From d7669f42229fb589a202677bda92d31ff6869d3a Mon Sep 17 00:00:00 2001 From: Jake Kersten Date: Tue, 18 May 2021 18:52:13 -0700 Subject: [PATCH] Bumping version to 1.3.5 --- dist/host.three.js | 2 +- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/host.three.js b/dist/host.three.js index 758dbe1..22833fd 100644 --- a/dist/host.three.js +++ b/dist/host.three.js @@ -2,4 +2,4 @@ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 */ -!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define("HOST",[],n):"object"==typeof exports?exports.HOST=n():e.HOST=n()}("undefined"!=typeof self?self:"undefined"!=typeof global?global:this,(function(){return function(e){var n={};function t(c){if(n[c])return n[c].exports;var a=n[c]={i:c,l:!1,exports:{}};return e[c].call(a.exports,a,a.exports,t),a.l=!0,a.exports}return t.m=e,t.c=n,t.d=function(e,n,c){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:c})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var c=Object.create(null);if(t.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var a in e)t.d(c,a,function(n){return e[n]}.bind(null,a));return c},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=130)}([function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar hide = __webpack_require__(11);\nvar redefine = __webpack_require__(12);\nvar ctx = __webpack_require__(19);\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzPzVjYTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0ZBQWtGLHVCQUF1QjtBQUN6RyxpRUFBaUU7QUFDakUsK0RBQStEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixnQkFBZ0I7QUFDaEIiLCJmaWxlIjoiMC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///0\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzP2NiN2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n")},function(module,exports){eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzPzc3MjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyIsImZpbGUiOiIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanM/NzllNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwiZmlsZSI6IjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3\n")},function(module,exports){eval("module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzP2QzZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwiZmlsZSI6IjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4\n")},function(module,exports,__webpack_require__){eval("var store = __webpack_require__(47)('wks');\nvar uid = __webpack_require__(33);\nvar Symbol = __webpack_require__(2).Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzPzJiNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5\n")},function(module,exports,__webpack_require__){eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(21);\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzPzlkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0QiLCJmaWxlIjoiNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6\n")},function(module,exports,__webpack_require__){eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(3)(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanM/OWUxZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQVU7QUFDcEMsaUNBQWlDLFFBQVEsbUJBQW1CLFVBQVUsRUFBRSxFQUFFO0FBQzFFLENBQUMiLCJmaWxlIjoiNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar toPrimitive = __webpack_require__(23);\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(7) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzPzg2Y2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBbUI7QUFDaEQsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0M7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLENBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFlBQVk7QUFDZjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8\n")},function(module,exports,__webpack_require__){eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzPzRiZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0EiLCJmaWxlIjoiOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n")},function(module,exports){eval("module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcz9kOGU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///10\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\nmodule.exports = __webpack_require__(7) ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcz8zMmU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLENBQWdCO0FBQ3pDO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSIsImZpbGUiOiIxMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///11\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar has = __webpack_require__(14);\nvar SRC = __webpack_require__(33)('src');\nvar $toString = __webpack_require__(134);\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(18).inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanM/MmFiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxHQUF1QjtBQUMvQztBQUNBOztBQUVBLG1CQUFPLENBQUMsRUFBUztBQUNqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///12\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanM/Mzg2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEZBQTBGO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///13\n")},function(module,exports){eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzPzY5YTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSIsImZpbGUiOiIxNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///14\n")},function(module,exports,__webpack_require__){eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(48);\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcz82ODIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEM7QUFDQTtBQUNBIiwiZmlsZSI6IjE1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///15\n")},function(module,exports,__webpack_require__){eval("var pIE = __webpack_require__(49);\nvar createDesc = __webpack_require__(32);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar has = __webpack_require__(14);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(7) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanM/MTFlOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBZTtBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHFCQUFxQixtQkFBTyxDQUFDLEVBQW1CO0FBQ2hEOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxDQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///16\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(14);\nvar toObject = __webpack_require__(9);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcz8zOGZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///17\n")},function(module,exports){eval("var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcz84Mzc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QjtBQUM3Qix1Q0FBdUMiLCJmaWxlIjoiMTguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjEyJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///18\n")},function(module,exports,__webpack_require__){eval("// optional / simple context binding\nvar aFunction = __webpack_require__(10);\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzPzliNDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///19\n")},function(module,exports){eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzPzJkOTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0EiLCJmaWxlIjoiMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///20\n")},function(module,exports){eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcz80NTg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar fails = __webpack_require__(3);\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcz8yZjIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsWUFBWSxtQkFBTyxDQUFDLENBQVU7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxjQUFjO0FBQ3ZELEdBQUc7QUFDSCIsImZpbGUiOiIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///22\n")},function(module,exports,__webpack_require__){eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(4);\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzPzZhOTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///23\n")},function(module,exports){eval('// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError("Can\'t call method on " + it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcz9iZTEzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///24\n')},function(module,exports,__webpack_require__){eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar fails = __webpack_require__(3);\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcz81ZWRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLHFEQUFxRCxPQUFPLEVBQUU7QUFDOUQiLCJmaWxlIjoiMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///25\n")},function(module,exports,__webpack_require__){eval("// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(19);\nvar IObject = __webpack_require__(48);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar asc = __webpack_require__(84);\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcz8wYTQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQXlCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxlQUFlO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBLDhCQUE4QjtBQUM5Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxTQUFTLGlDQUFpQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///26\n")},function(module,exports,__webpack_require__){"use strict";eval("\nif (__webpack_require__(7)) {\n var LIBRARY = __webpack_require__(29);\n var global = __webpack_require__(2);\n var fails = __webpack_require__(3);\n var $export = __webpack_require__(0);\n var $typed = __webpack_require__(62);\n var $buffer = __webpack_require__(92);\n var ctx = __webpack_require__(19);\n var anInstance = __webpack_require__(39);\n var propertyDesc = __webpack_require__(32);\n var hide = __webpack_require__(11);\n var redefineAll = __webpack_require__(41);\n var toInteger = __webpack_require__(21);\n var toLength = __webpack_require__(6);\n var toIndex = __webpack_require__(122);\n var toAbsoluteIndex = __webpack_require__(35);\n var toPrimitive = __webpack_require__(23);\n var has = __webpack_require__(14);\n var classof = __webpack_require__(44);\n var isObject = __webpack_require__(4);\n var toObject = __webpack_require__(9);\n var isArrayIter = __webpack_require__(81);\n var create = __webpack_require__(36);\n var getPrototypeOf = __webpack_require__(17);\n var gOPN = __webpack_require__(37).f;\n var getIterFn = __webpack_require__(83);\n var uid = __webpack_require__(33);\n var wks = __webpack_require__(5);\n var createArrayMethod = __webpack_require__(26);\n var createArrayIncludes = __webpack_require__(52);\n var speciesConstructor = __webpack_require__(51);\n var ArrayIterators = __webpack_require__(86);\n var Iterators = __webpack_require__(46);\n var $iterDetect = __webpack_require__(57);\n var setSpecies = __webpack_require__(38);\n var arrayFill = __webpack_require__(85);\n var arrayCopyWithin = __webpack_require__(111);\n var $DP = __webpack_require__(8);\n var $GOPD = __webpack_require__(16);\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanM/ZWMzMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLElBQUksbUJBQU8sQ0FBQyxDQUFnQjtBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFZO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFVO0FBQ2hDLGdCQUFnQixtQkFBTyxDQUFDLENBQVc7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLEVBQVU7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBaUI7QUFDekMsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsbUJBQW1CLG1CQUFPLENBQUMsRUFBZ0I7QUFDM0MscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0MsYUFBYSxtQkFBTyxDQUFDLEVBQVM7QUFDOUIsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0Msa0JBQWtCLG1CQUFPLENBQUMsRUFBZTtBQUN6QyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsd0JBQXdCLG1CQUFPLENBQUMsRUFBc0I7QUFDdEQsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsZ0JBQWdCLG1CQUFPLENBQUMsRUFBWTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLENBQWM7QUFDdkMsb0JBQW9CLG1CQUFPLENBQUMsRUFBa0I7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLEVBQWU7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQTRCO0FBQ3RELFlBQVksbUJBQU8sQ0FBQyxFQUFRO0FBQzVC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O0FBQ3ZDLE9BQU87QUFDUDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCx1REFBdUQsNkJBQTZCLEVBQUU7QUFDdEY7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUEsdURBQXVELFlBQVk7O0FBRW5FOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLLFVBQVUsZ0JBQWdCOztBQUUvQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSyxXQUFXLGtDQUFrQzs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxvQ0FBb0MiLCJmaWxlIjoiMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///27\n")},function(module,exports,__webpack_require__){eval("var Map = __webpack_require__(117);\nvar $export = __webpack_require__(0);\nvar shared = __webpack_require__(47)('metadata');\nvar store = shared.store || (shared.store = new (__webpack_require__(120))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YWRhdGEuanM/MzdhNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsR0FBVztBQUM3QixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVztBQUNoQyxpREFBaUQsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELGdCQUFnQixFQUFFO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTWFwID0gcmVxdWlyZSgnLi9lczYubWFwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdtZXRhZGF0YScpO1xudmFyIHN0b3JlID0gc2hhcmVkLnN0b3JlIHx8IChzaGFyZWQuc3RvcmUgPSBuZXcgKHJlcXVpcmUoJy4vZXM2LndlYWstbWFwJykpKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3RvcmUuc2V0KHRhcmdldCwgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9XG4gIHZhciBrZXlNZXRhZGF0YSA9IHRhcmdldE1ldGFkYXRhLmdldCh0YXJnZXRLZXkpO1xuICBpZiAoIWtleU1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdGFyZ2V0TWV0YWRhdGEuc2V0KHRhcmdldEtleSwga2V5TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9IHJldHVybiBrZXlNZXRhZGF0YTtcbn07XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbWV0YWRhdGFNYXAuZ2V0KE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUCkge1xuICBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIHRydWUpLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG59O1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsga2V5cy5wdXNoKGtleSk7IH0pO1xuICByZXR1cm4ga2V5cztcbn07XG52YXIgdG9NZXRhS2V5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG52YXIgZXhwID0gZnVuY3Rpb24gKE8pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgTyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RvcmU6IHN0b3JlLFxuICBtYXA6IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAsXG4gIGhhczogb3JkaW5hcnlIYXNPd25NZXRhZGF0YSxcbiAgZ2V0OiBvcmRpbmFyeUdldE93bk1ldGFkYXRhLFxuICBzZXQ6IG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEsXG4gIGtleXM6IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICBrZXk6IHRvTWV0YUtleSxcbiAgZXhwOiBleHBcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///28\n")},function(module,exports){eval("module.exports = false;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcz8yZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjI5LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29\n")},function(module,exports,__webpack_require__){eval("var META = __webpack_require__(33)('meta');\nvar isObject = __webpack_require__(4);\nvar has = __webpack_require__(14);\nvar setDesc = __webpack_require__(8).f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !__webpack_require__(3)(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YS5qcz82N2FiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdBQVcsbUJBQU8sQ0FBQyxFQUFRO0FBQzNCLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFjO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVU7QUFDaEMsaURBQWlEO0FBQ2pELENBQUM7QUFDRDtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLFNBQVM7QUFDVCxHQUFHLEVBQUU7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///30\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(5)('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(11)(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzPzljNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFRO0FBQ2xDO0FBQ0EsMENBQTBDLG1CQUFPLENBQUMsRUFBUyw2QkFBNkI7QUFDeEY7QUFDQTtBQUNBIiwiZmlsZSI6IjMxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31\n")},function(module,exports){eval("module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcz80NjMwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///32\n")},function(module,exports){eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzP2NhNWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///33\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(96);\nvar enumBugKeys = __webpack_require__(69);\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanM/MGQ1OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFNUM7QUFDQTtBQUNBIiwiZmlsZSI6IjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///34\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanM/NzdmMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///35\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(1);\nvar dPs = __webpack_require__(97);\nvar enumBugKeys = __webpack_require__(69);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(66)('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(70).appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcz8yYWViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQWU7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEMseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxFQUFlO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBUztBQUNuQiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///36\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(96);\nvar hiddenKeys = __webpack_require__(69).concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanM/OTA5MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFM0M7QUFDQTtBQUNBIiwiZmlsZSI6IjM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///37\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar dP = __webpack_require__(8);\nvar DESCRIPTORS = __webpack_require__(7);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanM/N2E1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixhQUFhO0FBQ25DLEdBQUc7QUFDSCIsImZpbGUiOiIzOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///38\n")},function(module,exports){eval("module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanM/ZjYwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///39\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar getIterFn = __webpack_require__(83);\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzPzRhNTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQixFQUFFO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUUsZ0JBQWdCO0FBQ25GO0FBQ0E7QUFDQSxHQUFHLDRDQUE0QyxnQ0FBZ0M7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///40\n")},function(module,exports,__webpack_require__){eval("var redefine = __webpack_require__(12);\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzP2RjYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///41\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcz9iMzlhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///42\n")},function(module,exports,__webpack_require__){eval("var def = __webpack_require__(8).f;\nvar has = __webpack_require__(14);\nvar TAG = __webpack_require__(5)('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanM/N2YyMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsQ0FBYztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsQ0FBUTs7QUFFMUI7QUFDQSxvRUFBb0UsaUNBQWlDO0FBQ3JHIiwiZmlsZSI6IjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///43\n")},function(module,exports,__webpack_require__){eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(20);\nvar TAG = __webpack_require__(5)('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcz8yM2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQSwyQkFBMkIsa0JBQWtCLEVBQUU7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///44\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar fails = __webpack_require__(3);\nvar spaces = __webpack_require__(72);\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanM/YWE3NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsRUFBYztBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///45\n")},function(module,exports){eval("module.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzPzg0ZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///46\n")},function(module,exports,__webpack_require__){eval("var core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: __webpack_require__(29) ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzPzU1MzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0EscUVBQXFFO0FBQ3JFLENBQUM7QUFDRDtBQUNBLFFBQVEsbUJBQU8sQ0FBQyxFQUFZO0FBQzVCO0FBQ0EsQ0FBQyIsImZpbGUiOiI0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///47\n")},function(module,exports,__webpack_require__){eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(20);\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcz82MjZhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///48\n")},function(module,exports){eval("exports.f = {}.propertyIsEnumerable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcz81MmE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMiLCJmaWxlIjoiNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///49\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(1);\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanM/MGJmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///50\n")},function(module,exports,__webpack_require__){eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar SPECIES = __webpack_require__(5)('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lYmQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsQ0FBUTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///51\n")},function(module,exports,__webpack_require__){eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\nvar toAbsoluteIndex = __webpack_require__(35);\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanM/YzM2NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssWUFBWSxlQUFlO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiNTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52\n")},function(module,exports){eval("exports.f = Object.getOwnPropertySymbols;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanM/MjYyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///53\n")},function(module,exports,__webpack_require__){eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(20);\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanM/MTE2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI1NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///54\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzPzAyZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///55\n")},function(module,exports,__webpack_require__){eval("// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(4);\nvar cof = __webpack_require__(20);\nvar MATCH = __webpack_require__(5)('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzP2FhZTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixZQUFZLG1CQUFPLENBQUMsQ0FBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///56\n")},function(module,exports,__webpack_require__){eval("var ITERATOR = __webpack_require__(5)('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanM/NWNjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDLHFCQUFxQjtBQUN0RDtBQUNBLGlDQUFpQyxTQUFTLEVBQUU7QUFDNUMsQ0FBQyxZQUFZOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixTQUFTLHFCQUFxQjtBQUMzRCxpQ0FBaUMsYUFBYTtBQUM5QztBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiNTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///57\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar classof = __webpack_require__(44);\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanM/NWYxYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgYnVpbHRpbkV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG5cbiAvLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG4gIHJldHVybiBidWlsdGluRXhlYy5jYWxsKFIsIFMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///58\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(113);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar wks = __webpack_require__(5);\nvar regexpExec = __webpack_require__(87);\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcz8yMTRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFtQjtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxVQUFVLG1CQUFPLENBQUMsQ0FBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw0Q0FBNEM7QUFDckU7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsVUFBVTtBQUN2QztBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsbUJBQW1CLGFBQWE7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsV0FBVztBQUN4RDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUNBQXFDO0FBQ3JFO0FBQ0E7QUFDQSwyQkFBMkIsZ0NBQWdDO0FBQzNEO0FBQ0E7QUFDQSIsImZpbGUiOiI1OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///59\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcz9hMjVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDOztBQUVBIiwiZmlsZSI6IjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///60\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar redefineAll = __webpack_require__(41);\nvar meta = __webpack_require__(30);\nvar forOf = __webpack_require__(40);\nvar anInstance = __webpack_require__(39);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar $iterDetect = __webpack_require__(57);\nvar setToStringTag = __webpack_require__(43);\nvar inheritIfRequired = __webpack_require__(73);\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcz9lMGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0MsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUIsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLG1DQUFtQyxnQ0FBZ0MsYUFBYTtBQUN2Riw4QkFBOEIsbUNBQW1DLGFBQWE7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBLGtEQUFrRCxpQkFBaUIsRUFBRTtBQUNyRTtBQUNBLHdEQUF3RCxhQUFhLEVBQUUsRUFBRTtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSIsImZpbGUiOiI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///61\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar uid = __webpack_require__(33);\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanM/MGY4OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjYyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///62\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// Forced replacement prototype accessors methods\nmodule.exports = __webpack_require__(29) || !__webpack_require__(3)(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete __webpack_require__(2)[K];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWZvcmNlZC1wYW0uanM/YzViNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBWSxNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUM3RDtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCxTQUFTLG1CQUFPLENBQUMsQ0FBVztBQUM1QixDQUFDIiwiZmlsZSI6IjYzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanM/YzZhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wiLCJmaWxlIjoiNjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///64\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar ctx = __webpack_require__(19);\nvar forOf = __webpack_require__(40);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcz8yOGU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMIiwiZmlsZSI6IjY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBmcm9tOiBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcEZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcEZuID0gYXJndW1lbnRzWzFdO1xuICAgIHZhciBtYXBwaW5nLCBBLCBuLCBjYjtcbiAgICBhRnVuY3Rpb24odGhpcyk7XG4gICAgbWFwcGluZyA9IG1hcEZuICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG1hcHBpbmcpIGFGdW5jdGlvbihtYXBGbik7XG4gICAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICAgIEEgPSBbXTtcbiAgICBpZiAobWFwcGluZykge1xuICAgICAgbiA9IDA7XG4gICAgICBjYiA9IGN0eChtYXBGbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgICBBLnB1c2goY2IobmV4dEl0ZW0sIG4rKykpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIEEucHVzaCwgQSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///65\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar document = __webpack_require__(2).document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcz8yMzBlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///66\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar LIBRARY = __webpack_require__(29);\nvar wksExt = __webpack_require__(95);\nvar defineProperty = __webpack_require__(8).f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcz8zYTcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLENBQWM7QUFDM0M7QUFDQSwwREFBMEQsc0JBQXNCO0FBQ2hGLGtGQUFrRix3QkFBd0I7QUFDMUciLCJmaWxlIjoiNjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///67\n")},function(module,exports,__webpack_require__){eval("var shared = __webpack_require__(47)('keys');\nvar uid = __webpack_require__(33);\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcz82MTNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///68\n")},function(module,exports){eval("// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcz9lMTFlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///69\n")},function(module,exports,__webpack_require__){eval("var document = __webpack_require__(2).document;\nmodule.exports = document && document.documentElement;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcz9mYWIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDIiwiZmlsZSI6IjcwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///70\n")},function(module,exports,__webpack_require__){eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = __webpack_require__(19)(Function.call, __webpack_require__(16).f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzPzhiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFRLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3ZFO0FBQ0E7QUFDQSxPQUFPLFlBQVksY0FBYztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7QUFDUjtBQUNBIiwiZmlsZSI6IjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///71\n")},function(module,exports){eval("module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzP2ZkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSIsImZpbGUiOiI3Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///72\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar setPrototypeOf = __webpack_require__(71).set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcz81ZGJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiI3My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///73\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXJlcGVhdC5qcz85NzQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0EiLCJmaWxlIjoiNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgcmV0dXJuIHJlcztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///74\n")},function(module,exports){eval("// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzPzk2ZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI3NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSA9PSAwIHx8IHggIT0geCA/IHggOiB4IDwgMCA/IC0xIDogMTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///75\n")},function(module,exports){eval("// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcz8yZDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiNzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBtMSA9IE1hdGguZXhwbTE7XG5tb2R1bGUuZXhwb3J0cyA9ICghJGV4cG0xXG4gIC8vIE9sZCBGRiBidWdcbiAgfHwgJGV4cG0xKDEwKSA+IDIyMDI1LjQ2NTc5NDgwNjcxOSB8fCAkZXhwbTEoMTApIDwgMjIwMjUuNDY1Nzk0ODA2NzE2NTE2OFxuICAvLyBUb3IgQnJvd3NlciBidWdcbiAgfHwgJGV4cG0xKC0yZS0xNykgIT0gLTJlLTE3XG4pID8gZnVuY3Rpb24gZXhwbTEoeCkge1xuICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiB4ID4gLTFlLTYgJiYgeCA8IDFlLTYgPyB4ICsgeCAqIHggLyAyIDogTWF0aC5leHAoeCkgLSAxO1xufSA6ICRleHBtMTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///76\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar $iterCreate = __webpack_require__(78);\nvar setToStringTag = __webpack_require__(43);\nvar getPrototypeOf = __webpack_require__(17);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanM/MDFmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMsRUFBZTtBQUM1QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQiw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBOztBQUVBLDhCQUE4QixhQUFhOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLG9DQUFvQztBQUM3RSw2Q0FBNkMsb0NBQW9DO0FBQ2pGLEtBQUssNEJBQTRCLG9DQUFvQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0Esa0NBQWtDLDJCQUEyQjtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EiLCJmaWxlIjoiNzcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///77\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar create = __webpack_require__(36);\nvar descriptor = __webpack_require__(32);\nvar setToStringTag = __webpack_require__(43);\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(11)(IteratorPrototype, __webpack_require__(5)('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanM/NDFhMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUNuRDs7QUFFQTtBQUNBLG1CQUFPLENBQUMsRUFBUyxxQkFBcUIsbUJBQU8sQ0FBQyxDQUFRLDRCQUE0QixhQUFhLEVBQUU7O0FBRWpHO0FBQ0EscURBQXFELDRCQUE0QjtBQUNqRjtBQUNBIiwiZmlsZSI6Ijc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///78\n")},function(module,exports,__webpack_require__){eval("// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(56);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanM/ZDJjOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7QUFDdEIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///79\n")},function(module,exports,__webpack_require__){eval("var MATCH = __webpack_require__(5)('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzPzUxNDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLENBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSyxZQUFZO0FBQ2pCLEdBQUc7QUFDSCIsImZpbGUiOiI4MC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///80\n")},function(module,exports,__webpack_require__){eval("// check on default Array iterator\nvar Iterators = __webpack_require__(46);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcz8zM2E0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///81\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $defineProperty = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzP2YxYWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFjO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCOztBQUUzQztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///82\n")},function(module,exports,__webpack_require__){eval("var classof = __webpack_require__(44);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar Iterators = __webpack_require__(46);\nmodule.exports = __webpack_require__(18).getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanM/MjdlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLEVBQVM7QUFDbEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///83\n")},function(module,exports,__webpack_require__){eval("// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(223);\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jcmVhdGUuanM/Y2QxYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLHlCQUF5QixtQkFBTyxDQUFDLEdBQThCOztBQUUvRDtBQUNBO0FBQ0EiLCJmaWxlIjoiODQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///84\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZmlsbC5qcz8zNmJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///85\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar addToUnscopables = __webpack_require__(31);\nvar step = __webpack_require__(112);\nvar Iterators = __webpack_require__(46);\nvar toIObject = __webpack_require__(15);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(77)(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanM/Y2FkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLHVCQUF1QixtQkFBTyxDQUFDLEVBQXVCO0FBQ3RELFdBQVcsbUJBQU8sQ0FBQyxHQUFjO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQ0FBZ0M7QUFDaEMsY0FBYztBQUNkLGlCQUFpQjtBQUNqQjtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///86\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar regexpFlags = __webpack_require__(50);\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanM/NTIwYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFVOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvLFxuICAgICAgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTFbTEFTVF9JTkRFWF0gIT09IDAgfHwgcmUyW0xBU1RfSU5ERVhdICE9PSAwO1xufSkoKTtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQ7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgcmUuc291cmNlICsgJyQoPyFcXFxccyknLCByZWdleHBGbGFncy5jYWxsKHJlKSk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlW0xBU1RfSU5ERVhdO1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwocmUsIHN0cik7XG5cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZVtMQVNUX0lOREVYXSA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///87\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar at = __webpack_require__(55)(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanM/MDM5MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxFQUFjOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///88\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar invoke = __webpack_require__(102);\nvar html = __webpack_require__(70);\nvar cel = __webpack_require__(66);\nvar global = __webpack_require__(2);\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (__webpack_require__(20)(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcz8xOTkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxHQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLG1CQUFPLENBQUMsRUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///89\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar macrotask = __webpack_require__(89).set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzPzgwNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBUztBQUNqQztBQUNBO0FBQ0E7QUFDQSxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx1Q0FBdUMsc0JBQXNCLEVBQUU7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///90\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__(10);\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcz9hNWI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///91\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar DESCRIPTORS = __webpack_require__(7);\nvar LIBRARY = __webpack_require__(29);\nvar $typed = __webpack_require__(62);\nvar hide = __webpack_require__(11);\nvar redefineAll = __webpack_require__(41);\nvar fails = __webpack_require__(3);\nvar anInstance = __webpack_require__(39);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar toIndex = __webpack_require__(122);\nvar gOPN = __webpack_require__(37).f;\nvar dP = __webpack_require__(8).f;\nvar arrayFill = __webpack_require__(85);\nvar setToStringTag = __webpack_require__(43);\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYnVmZmVyLmpzP2VkMGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxTQUFTLG1CQUFPLENBQUMsQ0FBYztBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsR0FBRztBQUNILHlCQUF5QjtBQUN6QixHQUFHO0FBQ0gsdUJBQXVCO0FBQ3ZCLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUI7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxpQkFBaUI7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCEnO1xudmFyICRBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIE1hdGggPSBnbG9iYWwuTWF0aDtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcbnZhciBJbmZpbml0eSA9IGdsb2JhbC5JbmZpbml0eTtcbnZhciBCYXNlQnVmZmVyID0gJEFycmF5QnVmZmVyO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcbnZhciBCVUZGRVIgPSAnYnVmZmVyJztcbnZhciBCWVRFX0xFTkdUSCA9ICdieXRlTGVuZ3RoJztcbnZhciBCWVRFX09GRlNFVCA9ICdieXRlT2Zmc2V0JztcbnZhciAkQlVGRkVSID0gREVTQ1JJUFRPUlMgPyAnX2InIDogQlVGRkVSO1xudmFyICRMRU5HVEggPSBERVNDUklQVE9SUyA/ICdfbCcgOiBCWVRFX0xFTkdUSDtcbnZhciAkT0ZGU0VUID0gREVTQ1JJUFRPUlMgPyAnX28nIDogQllURV9PRkZTRVQ7XG5cbi8vIElFRUU3NTQgY29udmVyc2lvbnMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9pZWVlNzU0XG5mdW5jdGlvbiBwYWNrSUVFRTc1NCh2YWx1ZSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobkJ5dGVzKTtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1MZW4gPT09IDIzID8gcG93KDIsIC0yNCkgLSBwb3coMiwgLTc3KSA6IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwO1xuICB2YXIgZSwgbSwgYztcbiAgdmFsdWUgPSBhYnModmFsdWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmICh2YWx1ZSAhPSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgbSA9IHZhbHVlICE9IHZhbHVlID8gMSA6IDA7XG4gICAgZSA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZSA9IGZsb29yKGxvZyh2YWx1ZSkgLyBMTjIpO1xuICAgIGlmICh2YWx1ZSAqIChjID0gcG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrKztcbiAgICAgIGMgLz0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gZSArIGVCaWFzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSAwO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbaSsrXSA9IG0gJiAyNTUsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuICBlID0gZSA8PCBtTGVuIHwgbTtcbiAgZUxlbiArPSBtTGVuO1xuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltpKytdID0gZSAmIDI1NSwgZSAvPSAyNTYsIGVMZW4gLT0gOCk7XG4gIGJ1ZmZlclstLWldIHw9IHMgKiAxMjg7XG4gIHJldHVybiBidWZmZXI7XG59XG5mdW5jdGlvbiB1bnBhY2tJRUVFNzU0KGJ1ZmZlciwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBlTGVuIC0gNztcbiAgdmFyIGkgPSBuQnl0ZXMgLSAxO1xuICB2YXIgcyA9IGJ1ZmZlcltpLS1dO1xuICB2YXIgZSA9IHMgJiAxMjc7XG4gIHZhciBtO1xuICBzID4+PSA3O1xuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZSA+Pj0gLW5CaXRzO1xuICBuQml0cyArPSBtTGVuO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6IHMgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIHBvdygyLCBtTGVuKTtcbiAgICBlID0gZSAtIGVCaWFzO1xuICB9IHJldHVybiAocyA/IC0xIDogMSkgKiBtICogcG93KDIsIGUgLSBtTGVuKTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrSTMyKGJ5dGVzKSB7XG4gIHJldHVybiBieXRlc1szXSA8PCAyNCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xufVxuZnVuY3Rpb24gcGFja0k4KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMTYoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMzIoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmLCBpdCA+PiAxNiAmIDB4ZmYsIGl0ID4+IDI0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrRjY0KGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgNTIsIDgpO1xufVxuZnVuY3Rpb24gcGFja0YzMihpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDIzLCA0KTtcbn1cblxuZnVuY3Rpb24gYWRkR2V0dGVyKEMsIGtleSwgaW50ZXJuYWwpIHtcbiAgZFAoQ1tQUk9UT1RZUEVdLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW2ludGVybmFsXTsgfSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IHN0b3JlLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKTtcbiAgcmV0dXJuIGlzTGl0dGxlRW5kaWFuID8gcGFjayA6IHBhY2sucmV2ZXJzZSgpO1xufVxuZnVuY3Rpb24gc2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgc3RvcmVbc3RhcnQgKyBpXSA9IHBhY2tbaXNMaXR0bGVFbmRpYW4gPyBpIDogYnl0ZXMgLSBpIC0gMV07XG59XG5cbmlmICghJHR5cGVkLkFCVikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICB0aGlzLl9iID0gYXJyYXlGaWxsLmNhbGwobmV3IEFycmF5KGJ5dGVMZW5ndGgpLCAwKTtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICREYXRhVmlldywgREFUQV9WSUVXKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgJEFycmF5QnVmZmVyLCBEQVRBX1ZJRVcpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBidWZmZXJbJExFTkdUSF07XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihieXRlT2Zmc2V0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB0aGlzWyRCVUZGRVJdID0gYnVmZmVyO1xuICAgIHRoaXNbJE9GRlNFVF0gPSBvZmZzZXQ7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJVRkZFUiwgJ19iJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfT0ZGU0VULCAnX28nKTtcbiAgfVxuXG4gIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgZ2V0SW50ODogZnVuY3Rpb24gZ2V0SW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF07XG4gICAgfSxcbiAgICBnZXRJbnQxNjogZnVuY3Rpb24gZ2V0SW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDIzLCA0KTtcbiAgICB9LFxuICAgIGdldEZsb2F0NjQ6IGZ1bmN0aW9uIGdldEZsb2F0NjQoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDUyLCA4KTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGNjQsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAkQXJyYXlCdWZmZXIoMSk7XG4gIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoTmFOKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gJEFycmF5QnVmZmVyLm5hbWUgIT0gQVJSQVlfQlVGRkVSO1xuICB9KSkge1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIpO1xuICAgICAgcmV0dXJuIG5ldyBCYXNlQnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90byA9ICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQmFzZUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2VCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSBoaWRlKCRBcnJheUJ1ZmZlciwga2V5LCBCYXNlQnVmZmVyW2tleV0pO1xuICAgIH1cbiAgICBpZiAoIUxJQlJBUlkpIEFycmF5QnVmZmVyUHJvdG8uY29uc3RydWN0b3IgPSAkQXJyYXlCdWZmZXI7XG4gIH1cbiAgLy8gaU9TIFNhZmFyaSA3LnggYnVnXG4gIHZhciB2aWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gJERhdGFWaWV3W1BST1RPVFlQRV0uc2V0SW50ODtcbiAgdmlldy5zZXRJbnQ4KDAsIDIxNDc0ODM2NDgpO1xuICB2aWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh2aWV3LmdldEludDgoMCkgfHwgIXZpZXcuZ2V0SW50OCgxKSkgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcbmhpZGUoJERhdGFWaWV3W1BST1RPVFlQRV0sICR0eXBlZC5WSUVXLCB0cnVlKTtcbmV4cG9ydHNbQVJSQVlfQlVGRkVSXSA9ICRBcnJheUJ1ZmZlcjtcbmV4cG9ydHNbREFUQV9WSUVXXSA9ICREYXRhVmlldztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///92\n")},function(module,exports){eval('var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function("return this")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === "object") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it\'s\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcz9jZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QyIsImZpbGUiOiI5My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///93\n')},function(module,exports,__webpack_require__){eval("module.exports = !__webpack_require__(7) && !__webpack_require__(3)(function () {\n return Object.defineProperty(__webpack_require__(66)('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanM/YzY5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQixNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUNsRSwrQkFBK0IsbUJBQU8sQ0FBQyxFQUFlLGdCQUFnQixtQkFBbUIsVUFBVSxFQUFFLEVBQUU7QUFDdkcsQ0FBQyIsImZpbGUiOiI5NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///94\n")},function(module,exports,__webpack_require__){eval("exports.f = __webpack_require__(5);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcz8zN2M4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxDQUFRIiwiZmlsZSI6Ijk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///95\n")},function(module,exports,__webpack_require__){eval("var has = __webpack_require__(14);\nvar toIObject = __webpack_require__(15);\nvar arrayIndexOf = __webpack_require__(52)(false);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanM/Y2UxMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEVBQW1CO0FBQzlDLGVBQWUsbUJBQU8sQ0FBQyxFQUFlOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///96\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar anObject = __webpack_require__(1);\nvar getKeys = __webpack_require__(34);\n\nmodule.exports = __webpack_require__(7) ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcz8xNDk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFdEMsaUJBQWlCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI5Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///97\n")},function(module,exports,__webpack_require__){eval("// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(15);\nvar gOPN = __webpack_require__(37).f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzPzdiYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxpQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///98\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(3)(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcz83MzMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDOztBQUVBO0FBQ0EsNkJBQTZCLG1CQUFPLENBQUMsQ0FBVTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsVUFBVSxFQUFFO0FBQ2hELG1CQUFtQixzQ0FBc0M7QUFDekQsQ0FBQyxxQ0FBcUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMiLCJmaWxlIjoiOTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///99\n")},function(module,exports){eval("// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2FtZS12YWx1ZS5qcz84M2ExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///100\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar aFunction = __webpack_require__(10);\nvar isObject = __webpack_require__(4);\nvar invoke = __webpack_require__(102);\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcz9mMGMxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsR0FBVztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsU0FBUztBQUNwQztBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///101\n")},function(module,exports){eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzPzMxZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///102\n")},function(module,exports,__webpack_require__){eval("var $parseInt = __webpack_require__(2).parseInt;\nvar $trim = __webpack_require__(45).trim;\nvar ws = __webpack_require__(72);\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzPzNjYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVztBQUNuQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsU0FBUyxtQkFBTyxDQUFDLEVBQWM7QUFDL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMDMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///103\n")},function(module,exports,__webpack_require__){eval("var $parseFloat = __webpack_require__(2).parseFloat;\nvar $trim = __webpack_require__(45).trim;\n\nmodule.exports = 1 / $parseFloat(__webpack_require__(72) + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanM/ZDc1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsaUNBQWlDLG1CQUFPLENBQUMsRUFBYztBQUN2RDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjEwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///104\n")},function(module,exports,__webpack_require__){eval("var cof = __webpack_require__(20);\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanM/YmVmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///105\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar isObject = __webpack_require__(4);\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcz85YzEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///106\n")},function(module,exports){eval("// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcz9kNmM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///107\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar sign = __webpack_require__(75);\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanM/OTFjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFjO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///108\n")},function(module,exports,__webpack_require__){eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(1);\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzPzFmYTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///109\n")},function(module,exports,__webpack_require__){eval("var aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzPzdiMjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHNDQUFzQztBQUM5QztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///110\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanM/YmE5MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNhO0FBQ2IsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///111\n")},function(module,exports){eval("module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzP2Q1M2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxVQUFVO0FBQ1YiLCJmaWxlIjoiMTEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///112\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar regexpExec = __webpack_require__(87);\n__webpack_require__(0)({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanM/YjBjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3pDLG1CQUFPLENBQUMsQ0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDIiwiZmlsZSI6IjExMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///113\n")},function(module,exports,__webpack_require__){eval("// 21.2.5.3 get RegExp.prototype.flags()\nif (__webpack_require__(7) && /./g.flags != 'g') __webpack_require__(8).f(RegExp.prototype, 'flags', {\n configurable: true,\n get: __webpack_require__(50)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzPzM4NDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBZ0Isd0JBQXdCLG1CQUFPLENBQUMsQ0FBYztBQUMxRTtBQUNBLE9BQU8sbUJBQU8sQ0FBQyxFQUFVO0FBQ3pCLENBQUMiLCJmaWxlIjoiMTE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///114\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcz85YzgwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osR0FBRztBQUNILFlBQVk7QUFDWjtBQUNBIiwiZmlsZSI6IjExNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///115\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar newPromiseCapability = __webpack_require__(91);\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzP2JjYWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTE2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///116\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = __webpack_require__(61)(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzP2Y0MDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///117\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar dP = __webpack_require__(8).f;\nvar create = __webpack_require__(36);\nvar redefineAll = __webpack_require__(41);\nvar ctx = __webpack_require__(19);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar $iterDefine = __webpack_require__(77);\nvar step = __webpack_require__(112);\nvar setSpecies = __webpack_require__(38);\nvar DESCRIPTORS = __webpack_require__(7);\nvar fastKey = __webpack_require__(30).fastKey;\nvar validate = __webpack_require__(42);\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanM/YzI2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFnQjtBQUMxQyxXQUFXLG1CQUFPLENBQUMsR0FBYztBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLE9BQU87QUFDOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLDZCQUE2QjtBQUM3QiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLHFCQUFxQjtBQUNyQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RSxPQUFPO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QyxxQkFBcUI7QUFDckIsMEJBQTBCO0FBQzFCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjExOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///118\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = __webpack_require__(61)(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzPzRmN2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///119\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar each = __webpack_require__(26)(0);\nvar redefine = __webpack_require__(12);\nvar meta = __webpack_require__(30);\nvar assign = __webpack_require__(99);\nvar weak = __webpack_require__(121);\nvar isObject = __webpack_require__(4);\nvar validate = __webpack_require__(42);\nvar NATIVE_WEAK_MAP = __webpack_require__(42);\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = __webpack_require__(61)(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanM/MTBhZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFrQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixhQUFhLG1CQUFPLENBQUMsRUFBa0I7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEdBQW9CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxFQUF3QjtBQUMvQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFlOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSCIsImZpbGUiOiIxMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///120\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar redefineAll = __webpack_require__(41);\nvar getWeak = __webpack_require__(30).getWeak;\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar createArrayMethod = __webpack_require__(26);\nvar $has = __webpack_require__(14);\nvar validate = __webpack_require__(42);\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi13ZWFrLmpzPzY0M2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsRUFBUTtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIscUJBQXFCO0FBQ3JCLDBCQUEwQjtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjEyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///121\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanM/MDlmYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///122\n")},function(module,exports,__webpack_require__){eval("// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(37);\nvar gOPS = __webpack_require__(53);\nvar anObject = __webpack_require__(1);\nvar Reflect = __webpack_require__(2).Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanM/OTkwYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///123\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = __webpack_require__(54);\nvar isObject = __webpack_require__(4);\nvar toLength = __webpack_require__(6);\nvar ctx = __webpack_require__(19);\nvar IS_CONCAT_SPREADABLE = __webpack_require__(5)('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzP2M0NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLDJCQUEyQixtQkFBTyxDQUFDLENBQVE7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6IjEyNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///124\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = __webpack_require__(6);\nvar repeat = __webpack_require__(74);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcz8yZTA4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsYUFBYSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///125\n")},function(module,exports,__webpack_require__){eval("var DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar toIObject = __webpack_require__(15);\nvar isEnum = __webpack_require__(49).f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzPzUwNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKE8sIGtleSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///126\n")},function(module,exports,__webpack_require__){eval('// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = __webpack_require__(44);\nvar from = __webpack_require__(128);\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn\'t generic");\n return from(this);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzPzQ0YjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsR0FBd0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///127\n')},function(module,exports,__webpack_require__){eval("var forOf = __webpack_require__(40);\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcz80Mzc5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyLCBJVEVSQVRPUikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvck9mKGl0ZXIsIGZhbHNlLCByZXN1bHQucHVzaCwgcmVzdWx0LCBJVEVSQVRPUik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///128\n")},function(module,exports){eval("// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcz9lOWQyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///129\n")},function(e,n,t){t(131),e.exports=t(333)},function(module,exports,__webpack_require__){"use strict";eval('/* WEBPACK VAR INJECTION */(function(global) {\n\n__webpack_require__(132);\n\n__webpack_require__(329);\n\n__webpack_require__(330);\n\nif (global._babelPolyfill) {\n throw new Error("only one instance of babel-polyfill is allowed");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = "defineProperty";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, "padLeft", "".padStart);\ndefine(String.prototype, "padRight", "".padEnd);\n\n"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcz9kYjRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhDQUFhOztBQUViLG1CQUFPLENBQUMsR0FBYzs7QUFFdEIsbUJBQU8sQ0FBQyxHQUE2Qjs7QUFFckMsbUJBQU8sQ0FBQyxHQUEwQjs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUMsRSIsImZpbGUiOiIxMzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///131\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(133);\n__webpack_require__(136);\n__webpack_require__(137);\n__webpack_require__(138);\n__webpack_require__(139);\n__webpack_require__(140);\n__webpack_require__(141);\n__webpack_require__(142);\n__webpack_require__(143);\n__webpack_require__(144);\n__webpack_require__(145);\n__webpack_require__(146);\n__webpack_require__(147);\n__webpack_require__(148);\n__webpack_require__(149);\n__webpack_require__(150);\n__webpack_require__(151);\n__webpack_require__(152);\n__webpack_require__(153);\n__webpack_require__(154);\n__webpack_require__(155);\n__webpack_require__(156);\n__webpack_require__(157);\n__webpack_require__(158);\n__webpack_require__(159);\n__webpack_require__(160);\n__webpack_require__(161);\n__webpack_require__(162);\n__webpack_require__(163);\n__webpack_require__(164);\n__webpack_require__(165);\n__webpack_require__(166);\n__webpack_require__(167);\n__webpack_require__(168);\n__webpack_require__(169);\n__webpack_require__(170);\n__webpack_require__(171);\n__webpack_require__(172);\n__webpack_require__(173);\n__webpack_require__(174);\n__webpack_require__(175);\n__webpack_require__(176);\n__webpack_require__(177);\n__webpack_require__(178);\n__webpack_require__(179);\n__webpack_require__(180);\n__webpack_require__(181);\n__webpack_require__(182);\n__webpack_require__(183);\n__webpack_require__(184);\n__webpack_require__(185);\n__webpack_require__(186);\n__webpack_require__(187);\n__webpack_require__(188);\n__webpack_require__(189);\n__webpack_require__(190);\n__webpack_require__(191);\n__webpack_require__(192);\n__webpack_require__(193);\n__webpack_require__(194);\n__webpack_require__(195);\n__webpack_require__(196);\n__webpack_require__(197);\n__webpack_require__(198);\n__webpack_require__(199);\n__webpack_require__(200);\n__webpack_require__(201);\n__webpack_require__(202);\n__webpack_require__(203);\n__webpack_require__(204);\n__webpack_require__(205);\n__webpack_require__(206);\n__webpack_require__(207);\n__webpack_require__(208);\n__webpack_require__(209);\n__webpack_require__(210);\n__webpack_require__(211);\n__webpack_require__(213);\n__webpack_require__(214);\n__webpack_require__(216);\n__webpack_require__(217);\n__webpack_require__(218);\n__webpack_require__(219);\n__webpack_require__(220);\n__webpack_require__(221);\n__webpack_require__(222);\n__webpack_require__(224);\n__webpack_require__(225);\n__webpack_require__(226);\n__webpack_require__(227);\n__webpack_require__(228);\n__webpack_require__(229);\n__webpack_require__(230);\n__webpack_require__(231);\n__webpack_require__(232);\n__webpack_require__(233);\n__webpack_require__(234);\n__webpack_require__(235);\n__webpack_require__(236);\n__webpack_require__(86);\n__webpack_require__(237);\n__webpack_require__(113);\n__webpack_require__(238);\n__webpack_require__(114);\n__webpack_require__(239);\n__webpack_require__(240);\n__webpack_require__(241);\n__webpack_require__(242);\n__webpack_require__(243);\n__webpack_require__(117);\n__webpack_require__(119);\n__webpack_require__(120);\n__webpack_require__(244);\n__webpack_require__(245);\n__webpack_require__(246);\n__webpack_require__(247);\n__webpack_require__(248);\n__webpack_require__(249);\n__webpack_require__(250);\n__webpack_require__(251);\n__webpack_require__(252);\n__webpack_require__(253);\n__webpack_require__(254);\n__webpack_require__(255);\n__webpack_require__(256);\n__webpack_require__(257);\n__webpack_require__(258);\n__webpack_require__(259);\n__webpack_require__(260);\n__webpack_require__(261);\n__webpack_require__(262);\n__webpack_require__(263);\n__webpack_require__(264);\n__webpack_require__(265);\n__webpack_require__(266);\n__webpack_require__(267);\n__webpack_require__(268);\n__webpack_require__(269);\n__webpack_require__(270);\n__webpack_require__(271);\n__webpack_require__(272);\n__webpack_require__(273);\n__webpack_require__(274);\n__webpack_require__(275);\n__webpack_require__(276);\n__webpack_require__(277);\n__webpack_require__(278);\n__webpack_require__(279);\n__webpack_require__(280);\n__webpack_require__(281);\n__webpack_require__(282);\n__webpack_require__(283);\n__webpack_require__(284);\n__webpack_require__(285);\n__webpack_require__(286);\n__webpack_require__(287);\n__webpack_require__(288);\n__webpack_require__(289);\n__webpack_require__(290);\n__webpack_require__(291);\n__webpack_require__(292);\n__webpack_require__(293);\n__webpack_require__(294);\n__webpack_require__(295);\n__webpack_require__(296);\n__webpack_require__(297);\n__webpack_require__(298);\n__webpack_require__(299);\n__webpack_require__(300);\n__webpack_require__(301);\n__webpack_require__(302);\n__webpack_require__(303);\n__webpack_require__(304);\n__webpack_require__(305);\n__webpack_require__(306);\n__webpack_require__(307);\n__webpack_require__(308);\n__webpack_require__(309);\n__webpack_require__(310);\n__webpack_require__(311);\n__webpack_require__(312);\n__webpack_require__(313);\n__webpack_require__(314);\n__webpack_require__(315);\n__webpack_require__(316);\n__webpack_require__(317);\n__webpack_require__(318);\n__webpack_require__(319);\n__webpack_require__(320);\n__webpack_require__(321);\n__webpack_require__(322);\n__webpack_require__(323);\n__webpack_require__(324);\n__webpack_require__(325);\n__webpack_require__(326);\n__webpack_require__(327);\n__webpack_require__(328);\nmodule.exports = __webpack_require__(18);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcz82NmY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsR0FBd0M7QUFDaEQsbUJBQU8sQ0FBQyxHQUFrRDtBQUMxRCxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUE2QztBQUNyRCxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUF5QztBQUNqRCxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFvQztBQUM1QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBNkI7QUFDckMsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXFDO0FBQzdDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUEyQjtBQUNuQyxtQkFBTyxDQUFDLEdBQWtDO0FBQzFDLG1CQUFPLENBQUMsR0FBK0I7QUFDdkMsbUJBQU8sQ0FBQyxHQUFtQztBQUMzQyxtQkFBTyxDQUFDLEdBQThCO0FBQ3RDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFpQztBQUN6QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBc0M7QUFDOUMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxHQUFnQztBQUN4QyxtQkFBTyxDQUFDLEdBQTBCO0FBQ2xDLG1CQUFPLENBQUMsR0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQXlCO0FBQ2pDLG1CQUFPLENBQUMsR0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxHQUF5QjtBQUNqQyxtQkFBTyxDQUFDLEdBQTBCO0FBQ2xDLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQXlCO0FBQ2pDLG1CQUFPLENBQUMsR0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQXlCO0FBQ2pDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUF5QjtBQUNqQyxtQkFBTyxDQUFDLEdBQXlCO0FBQ2pDLG1CQUFPLENBQUMsR0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxHQUFzQztBQUM5QyxtQkFBTyxDQUFDLEdBQTBCO0FBQ2xDLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUErQjtBQUN2QyxtQkFBTyxDQUFDLEdBQW9DO0FBQzVDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUErQjtBQUN2QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQTBCO0FBQ2xDLG1CQUFPLENBQUMsR0FBNEI7QUFDcEMsbUJBQU8sQ0FBQyxHQUEyQjtBQUNuQyxtQkFBTyxDQUFDLEdBQTRCO0FBQ3BDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUErQjtBQUN2QyxtQkFBTyxDQUFDLEdBQThCO0FBQ3RDLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUE0QjtBQUNwQyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQXdCO0FBQ2hDLG1CQUFPLENBQUMsR0FBNEI7QUFDcEMsbUJBQU8sQ0FBQyxHQUFrQztBQUMxQyxtQkFBTyxDQUFDLEdBQThCO0FBQ3RDLG1CQUFPLENBQUMsR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxHQUE4QjtBQUN0QyxtQkFBTyxDQUFDLEdBQTBCO0FBQ2xDLG1CQUFPLENBQUMsR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQTJCO0FBQ25DLG1CQUFPLENBQUMsR0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxHQUE4QjtBQUN0QyxtQkFBTyxDQUFDLEdBQXlCO0FBQ2pDLG1CQUFPLENBQUMsR0FBNEI7QUFDcEMsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQTJCO0FBQ25DLG1CQUFPLENBQUMsR0FBNEI7QUFDcEMsbUJBQU8sQ0FBQyxHQUFrQztBQUMxQyxtQkFBTyxDQUFDLEdBQThCO0FBQ3RDLG1CQUFPLENBQUMsR0FBbUM7QUFDM0MsbUJBQU8sQ0FBQyxHQUFpQztBQUN6QyxtQkFBTyxDQUFDLEdBQTBCO0FBQ2xDLG1CQUFPLENBQUMsR0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxHQUFnQztBQUN4QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsRUFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxHQUFrQztBQUMxQyxtQkFBTyxDQUFDLEdBQTJCO0FBQ25DLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUE0QjtBQUNwQyxtQkFBTyxDQUFDLEdBQTRCO0FBQ3BDLG1CQUFPLENBQUMsR0FBOEI7QUFDdEMsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQTRCO0FBQ3BDLG1CQUFPLENBQUMsR0FBdUI7QUFDL0IsbUJBQU8sQ0FBQyxHQUFtQjtBQUMzQixtQkFBTyxDQUFDLEdBQW1CO0FBQzNCLG1CQUFPLENBQUMsR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQyxHQUF3QjtBQUNoQyxtQkFBTyxDQUFDLEdBQWtDO0FBQzFDLG1CQUFPLENBQUMsR0FBK0I7QUFDdkMsbUJBQU8sQ0FBQyxHQUFnQztBQUN4QyxtQkFBTyxDQUFDLEdBQWlDO0FBQ3pDLG1CQUFPLENBQUMsR0FBeUM7QUFDakQsbUJBQU8sQ0FBQyxHQUFpQztBQUN6QyxtQkFBTyxDQUFDLEdBQWtDO0FBQzFDLG1CQUFPLENBQUMsR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxHQUFrQztBQUMxQyxtQkFBTyxDQUFDLEdBQW1DO0FBQzNDLG1CQUFPLENBQUMsR0FBbUM7QUFDM0MsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQWlDO0FBQ3pDLG1CQUFPLENBQUMsR0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQWlDO0FBQ3pDLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUFtRDtBQUMzRCxtQkFBTyxDQUFDLEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUFxQztBQUM3QyxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBMEM7QUFDbEQsbUJBQU8sQ0FBQyxHQUEyQjtBQUNuQyxtQkFBTyxDQUFDLEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsR0FBOEI7QUFDdEMsbUJBQU8sQ0FBQyxHQUE4QjtBQUN0QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUFnQztBQUN4QyxtQkFBTyxDQUFDLEdBQThCO0FBQ3RDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFpQztBQUN6QyxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBcUM7QUFDN0MsbUJBQU8sQ0FBQyxHQUFpQztBQUN6QyxtQkFBTyxDQUFDLEdBQW1EO0FBQzNELG1CQUFPLENBQUMsR0FBNkI7QUFDckMsbUJBQU8sQ0FBQyxHQUE4QjtBQUN0QyxtQkFBTyxDQUFDLEdBQW9DO0FBQzVDLG1CQUFPLENBQUMsR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxHQUFvQztBQUM1QyxtQkFBTyxDQUFDLEdBQW9DO0FBQzVDLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUEyQjtBQUNuQyxtQkFBTyxDQUFDLEdBQXNCO0FBQzlCLG1CQUFPLENBQUMsR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxHQUEyQjtBQUNuQyxtQkFBTyxDQUFDLEdBQTJCO0FBQ25DLG1CQUFPLENBQUMsR0FBd0I7QUFDaEMsbUJBQU8sQ0FBQyxHQUF3QjtBQUNoQyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBNkI7QUFDckMsbUJBQU8sQ0FBQyxHQUFzQjtBQUM5QixtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBOEI7QUFDdEMsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBNEI7QUFDcEMsbUJBQU8sQ0FBQyxHQUEyQjtBQUNuQyxtQkFBTyxDQUFDLEdBQTBCO0FBQ2xDLG1CQUFPLENBQUMsR0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBNEI7QUFDcEMsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQTBCO0FBQ2xDLG1CQUFPLENBQUMsR0FBNEI7QUFDcEMsbUJBQU8sQ0FBQyxHQUErQjtBQUN2QyxtQkFBTyxDQUFDLEdBQTJCO0FBQ25DLG1CQUFPLENBQUMsR0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQW9DO0FBQzVDLG1CQUFPLENBQUMsR0FBeUM7QUFDakQsbUJBQU8sQ0FBQyxHQUF3QztBQUNoRCxtQkFBTyxDQUFDLEdBQTZDO0FBQ3JELG1CQUFPLENBQUMsR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxHQUF3QztBQUNoRCxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBb0I7QUFDNUIsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQXNCO0FBQzlCLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUE0QjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFpQiIsImZpbGUiOiIxMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///132\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar DESCRIPTORS = __webpack_require__(7);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar META = __webpack_require__(30).KEY;\nvar $fails = __webpack_require__(3);\nvar shared = __webpack_require__(47);\nvar setToStringTag = __webpack_require__(43);\nvar uid = __webpack_require__(33);\nvar wks = __webpack_require__(5);\nvar wksExt = __webpack_require__(95);\nvar wksDefine = __webpack_require__(67);\nvar enumKeys = __webpack_require__(135);\nvar isArray = __webpack_require__(54);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar toObject = __webpack_require__(9);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar createDesc = __webpack_require__(32);\nvar _create = __webpack_require__(36);\nvar gOPNExt = __webpack_require__(98);\nvar $GOPD = __webpack_require__(16);\nvar $GOPS = __webpack_require__(53);\nvar $DP = __webpack_require__(8);\nvar $keys = __webpack_require__(34);\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n __webpack_require__(37).f = gOPNExt.f = $getOwnPropertyNames;\n __webpack_require__(49).f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !__webpack_require__(29)) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(11)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzPzhhODEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFVO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25ELFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFVBQVUsbUJBQU8sQ0FBQyxDQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLEdBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQWE7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7QUFDeEMsY0FBYyxtQkFBTyxDQUFDLEVBQW9CO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLENBQWM7QUFDaEMsWUFBWSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEIsc0JBQXNCLHVCQUF1QixXQUFXLElBQUk7QUFDNUQsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxzQkFBc0IsbUNBQW1DO0FBQ3pELEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRSxnQ0FBZ0M7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUIsRUFBRSxtQkFBTyxDQUFDLEVBQWU7QUFDekI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsRUFBWTtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxrQkFBa0I7O0FBRTVFO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7O0FBRTNDLG9EQUFvRCw2QkFBNkI7O0FBRWpGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCwwQkFBMEIsZUFBZSxFQUFFO0FBQzNDLDBCQUEwQixnQkFBZ0I7QUFDMUMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLDhDQUE4QyxZQUFZLEVBQUU7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsT0FBTyxRQUFRLGlDQUFpQztBQUNwRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLG9DQUFvQyxtQkFBTyxDQUFDLEVBQVM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///133\n")},function(module,exports,__webpack_require__){eval("module.exports = __webpack_require__(47)('native-function-to-string', Function.toString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzP2ZhNWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBVyIsImZpbGUiOiIxMzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///134\n")},function(module,exports,__webpack_require__){eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzP2Q0YzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMzUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///135\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: __webpack_require__(36) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qcz84NDc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsOEJBQThCLFNBQVMsbUJBQU8sQ0FBQyxFQUFrQixHQUFHIiwiZmlsZSI6IjEzNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///136\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperty: __webpack_require__(8).f });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcz8xYzAxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsQ0FBZ0IsY0FBYyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjLEtBQUsiLCJmaWxlIjoiMTM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///137\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperties: __webpack_require__(97) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzPzU4YjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFnQixjQUFjLG1CQUFtQixtQkFBTyxDQUFDLEVBQWUsR0FBRyIsImZpbGUiOiIxMzguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjMgLyAxNS4yLjMuNyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydGllczogcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///138\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = __webpack_require__(15);\nvar $getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n__webpack_require__(25)('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcz85OTg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFeEQsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTM5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///139\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = __webpack_require__(9);\nvar $getPrototypeOf = __webpack_require__(17);\n\n__webpack_require__(25)('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanM/ZTRmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHNCQUFzQixtQkFBTyxDQUFDLEVBQWU7O0FBRTdDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///140\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(9);\nvar $keys = __webpack_require__(34);\n\n__webpack_require__(25)('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanM/NDU2ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTQxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///141\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 Object.getOwnPropertyNames(O)\n__webpack_require__(25)('getOwnPropertyNames', function () {\n return __webpack_require__(98).f;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanM/MjVkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QixTQUFTLG1CQUFPLENBQUMsRUFBb0I7QUFDckMsQ0FBQyIsImZpbGUiOiIxNDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///142\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.5 Object.freeze(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcz8wZDZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///143\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.17 Object.seal(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanM/Y2Y2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTOztBQUU1QixtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///144\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcz85YWVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///145\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.12 Object.isFrozen(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcz82NmM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMiBPYmplY3QuaXNGcm96ZW4oTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRnJvemVuJywgZnVuY3Rpb24gKCRpc0Zyb3plbikge1xuICByZXR1cm4gZnVuY3Rpb24gaXNGcm96ZW4oaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRnJvemVuID8gJGlzRnJvemVuKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///146\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.13 Object.isSealed(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcz81N2YwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///147\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.11 Object.isExtensible(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanM/MTY1YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQyxtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTEgT2JqZWN0LmlzRXh0ZW5zaWJsZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNFeHRlbnNpYmxlJywgZnVuY3Rpb24gKCRpc0V4dGVuc2libGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlIDogZmFsc2U7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///148\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(0);\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(99) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcz9mNzUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDBDQUEwQyxTQUFTLG1CQUFPLENBQUMsRUFBa0IsR0FBRyIsImZpbGUiOiIxNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///149\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.10 Object.is(value1, value2)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { is: __webpack_require__(100) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzP2RiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyw4QkFBOEIsS0FBSyxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMTAgT2JqZWN0LmlzKHZhbHVlMSwgdmFsdWUyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBpczogcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///150\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(71).set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanM/ZmQyNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLDhCQUE4QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFjLE9BQU8iLCJmaWxlIjoiMTUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///151\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.3.6 Object.prototype.toString()\nvar classof = __webpack_require__(44);\nvar test = {};\ntest[__webpack_require__(5)('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n __webpack_require__(12)(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcz8wNmRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBLEtBQUssbUJBQU8sQ0FBQyxDQUFRO0FBQ3JCO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///152\n")},function(module,exports,__webpack_require__){eval("// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Function', { bind: __webpack_require__(101) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcz9kOTJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLGdDQUFnQyxPQUFPLG1CQUFPLENBQUMsR0FBUyxHQUFHIiwiZmlsZSI6IjE1My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///153\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8).f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || __webpack_require__(7) && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcz83ZjdmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTU0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///154\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar isObject = __webpack_require__(4);\nvar getPrototypeOf = __webpack_require__(17);\nvar HAS_INSTANCE = __webpack_require__(5)('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(8).f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzPzIxN2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLENBQVE7QUFDbkM7QUFDQTtBQUNBLHNDQUFzQyxtQkFBTyxDQUFDLENBQWMsa0NBQWtDO0FBQzlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMTU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///155\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzPzE4ZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYztBQUN0QztBQUNBLDBEQUEwRCxzQkFBc0IiLCJmaWxlIjoiMTU2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///156\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanM/YjcyYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUFnQjtBQUMxQztBQUNBLDhEQUE4RCwwQkFBMEIiLCJmaWxlIjoiMTU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///157\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar cof = __webpack_require__(20);\nvar inheritIfRequired = __webpack_require__(73);\nvar toPrimitive = __webpack_require__(23);\nvar fails = __webpack_require__(3);\nvar gOPN = __webpack_require__(37).f;\nvar gOPD = __webpack_require__(16).f;\nvar dP = __webpack_require__(8).f;\nvar $trim = __webpack_require__(45).trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(__webpack_require__(36)(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = __webpack_require__(7) ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n __webpack_require__(12)(global, NUMBER, $Number);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzP2M1ZjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN4RCxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BELEtBQUs7QUFDTDtBQUNBLG9DQUFvQyxjQUFjLE9BQU87QUFDekQscUNBQXFDLGNBQWMsT0FBTztBQUMxRDtBQUNBO0FBQ0Esb0VBQW9FLE9BQU87QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLDBCQUEwQixFQUFFO0FBQ3RFO0FBQ0E7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGlCQUFpQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QiIsImZpbGUiOiIxNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///158\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toInteger = __webpack_require__(21);\nvar aNumberValue = __webpack_require__(105);\nvar repeat = __webpack_require__(74);\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !__webpack_require__(3)(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzPzAzNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEdBQW1CO0FBQzlDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtQkFBTyxDQUFDLENBQVU7QUFDeEI7QUFDQSxrQkFBa0I7QUFDbEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciAkdG9GaXhlZCA9IDEuMC50b0ZpeGVkO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBkYXRhID0gWzAsIDAsIDAsIDAsIDAsIDBdO1xudmFyIEVSUk9SID0gJ051bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnO1xudmFyIFpFUk8gPSAnMCc7XG5cbnZhciBtdWx0aXBseSA9IGZ1bmN0aW9uIChuLCBjKSB7XG4gIHZhciBpID0gLTE7XG4gIHZhciBjMiA9IGM7XG4gIHdoaWxlICgrK2kgPCA2KSB7XG4gICAgYzIgKz0gbiAqIGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGMyICUgMWU3O1xuICAgIGMyID0gZmxvb3IoYzIgLyAxZTcpO1xuICB9XG59O1xudmFyIGRpdmlkZSA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIGMgPSAwO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBjICs9IGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGZsb29yKGMgLyBuKTtcbiAgICBjID0gKGMgJSBuKSAqIDFlNztcbiAgfVxufTtcbnZhciBudW1Ub1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgcyA9ICcnO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBpZiAocyAhPT0gJycgfHwgaSA9PT0gMCB8fCBkYXRhW2ldICE9PSAwKSB7XG4gICAgICB2YXIgdCA9IFN0cmluZyhkYXRhW2ldKTtcbiAgICAgIHMgPSBzID09PSAnJyA/IHQgOiBzICsgcmVwZWF0LmNhbGwoWkVSTywgNyAtIHQubGVuZ3RoKSArIHQ7XG4gICAgfVxuICB9IHJldHVybiBzO1xufTtcbnZhciBwb3cgPSBmdW5jdGlvbiAoeCwgbiwgYWNjKSB7XG4gIHJldHVybiBuID09PSAwID8gYWNjIDogbiAlIDIgPT09IDEgPyBwb3coeCwgbiAtIDEsIGFjYyAqIHgpIDogcG93KHggKiB4LCBuIC8gMiwgYWNjKTtcbn07XG52YXIgbG9nID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG4gPSAwO1xuICB2YXIgeDIgPSB4O1xuICB3aGlsZSAoeDIgPj0gNDA5Nikge1xuICAgIG4gKz0gMTI7XG4gICAgeDIgLz0gNDA5NjtcbiAgfVxuICB3aGlsZSAoeDIgPj0gMikge1xuICAgIG4gKz0gMTtcbiAgICB4MiAvPSAyO1xuICB9IHJldHVybiBuO1xufTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoISEkdG9GaXhlZCAmJiAoXG4gIDAuMDAwMDgudG9GaXhlZCgzKSAhPT0gJzAuMDAwJyB8fFxuICAwLjkudG9GaXhlZCgwKSAhPT0gJzEnIHx8XG4gIDEuMjU1LnRvRml4ZWQoMikgIT09ICcxLjI1JyB8fFxuICAxMDAwMDAwMDAwMDAwMDAwMTI4LjAudG9GaXhlZCgwKSAhPT0gJzEwMDAwMDAwMDAwMDAwMDAxMjgnXG4pIHx8ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvRml4ZWQuY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvRml4ZWQ6IGZ1bmN0aW9uIHRvRml4ZWQoZnJhY3Rpb25EaWdpdHMpIHtcbiAgICB2YXIgeCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCBFUlJPUik7XG4gICAgdmFyIGYgPSB0b0ludGVnZXIoZnJhY3Rpb25EaWdpdHMpO1xuICAgIHZhciBzID0gJyc7XG4gICAgdmFyIG0gPSBaRVJPO1xuICAgIHZhciBlLCB6LCBqLCBrO1xuICAgIGlmIChmIDwgMCB8fCBmID4gMjApIHRocm93IFJhbmdlRXJyb3IoRVJST1IpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoeCAhPSB4KSByZXR1cm4gJ05hTic7XG4gICAgaWYgKHggPD0gLTFlMjEgfHwgeCA+PSAxZTIxKSByZXR1cm4gU3RyaW5nKHgpO1xuICAgIGlmICh4IDwgMCkge1xuICAgICAgcyA9ICctJztcbiAgICAgIHggPSAteDtcbiAgICB9XG4gICAgaWYgKHggPiAxZS0yMSkge1xuICAgICAgZSA9IGxvZyh4ICogcG93KDIsIDY5LCAxKSkgLSA2OTtcbiAgICAgIHogPSBlIDwgMCA/IHggKiBwb3coMiwgLWUsIDEpIDogeCAvIHBvdygyLCBlLCAxKTtcbiAgICAgIHogKj0gMHgxMDAwMDAwMDAwMDAwMDtcbiAgICAgIGUgPSA1MiAtIGU7XG4gICAgICBpZiAoZSA+IDApIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIGogPSBmO1xuICAgICAgICB3aGlsZSAoaiA+PSA3KSB7XG4gICAgICAgICAgbXVsdGlwbHkoMWU3LCAwKTtcbiAgICAgICAgICBqIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgbXVsdGlwbHkocG93KDEwLCBqLCAxKSwgMCk7XG4gICAgICAgIGogPSBlIC0gMTtcbiAgICAgICAgd2hpbGUgKGogPj0gMjMpIHtcbiAgICAgICAgICBkaXZpZGUoMSA8PCAyMyk7XG4gICAgICAgICAgaiAtPSAyMztcbiAgICAgICAgfVxuICAgICAgICBkaXZpZGUoMSA8PCBqKTtcbiAgICAgICAgbXVsdGlwbHkoMSwgMSk7XG4gICAgICAgIGRpdmlkZSgyKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgbXVsdGlwbHkoMSA8PCAtZSwgMCk7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpICsgcmVwZWF0LmNhbGwoWkVSTywgZik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmID4gMCkge1xuICAgICAgayA9IG0ubGVuZ3RoO1xuICAgICAgbSA9IHMgKyAoayA8PSBmID8gJzAuJyArIHJlcGVhdC5jYWxsKFpFUk8sIGYgLSBrKSArIG0gOiBtLnNsaWNlKDAsIGsgLSBmKSArICcuJyArIG0uc2xpY2UoayAtIGYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHMgKyBtO1xuICAgIH0gcmV0dXJuIG07XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///159\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $fails = __webpack_require__(3);\nvar aNumberValue = __webpack_require__(105);\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbi5qcz81NGE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLENBQVU7QUFDL0IsbUJBQW1CLG1CQUFPLENBQUMsR0FBbUI7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0Esc0JBQXNCO0FBQ3RCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgJHRvUHJlY2lzaW9uID0gMS4wLnRvUHJlY2lzaW9uO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICgkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTctXG4gIHJldHVybiAkdG9QcmVjaXNpb24uY2FsbCgxLCB1bmRlZmluZWQpICE9PSAnMSc7XG59KSB8fCAhJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvUHJlY2lzaW9uLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b1ByZWNpc2lvbjogZnVuY3Rpb24gdG9QcmVjaXNpb24ocHJlY2lzaW9uKSB7XG4gICAgdmFyIHRoYXQgPSBhTnVtYmVyVmFsdWUodGhpcywgJ051bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gICAgcmV0dXJuIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gJHRvUHJlY2lzaW9uLmNhbGwodGhhdCkgOiAkdG9QcmVjaXNpb24uY2FsbCh0aGF0LCBwcmVjaXNpb24pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///160\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.1 Number.EPSILON\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanM/MmUzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsNEJBQTRCIiwiZmlsZSI6IjE2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xIE51bWJlci5FUFNJTE9OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgRVBTSUxPTjogTWF0aC5wb3coMiwgLTUyKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///161\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.2 Number.isFinite(number)\nvar $export = __webpack_require__(0);\nvar _isFinite = __webpack_require__(2).isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcz9mY2EwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4yIE51bWJlci5pc0Zpbml0ZShudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIF9pc0Zpbml0ZSA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmlzRmluaXRlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNGaW5pdGU6IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBfaXNGaW5pdGUoaXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///162\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { isInteger: __webpack_require__(106) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsWUFBWSxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///163\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.4 Number.isNaN(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbi5qcz9lZTFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///164\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = __webpack_require__(0);\nvar isInteger = __webpack_require__(106);\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcz9iMWIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBZTtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///165\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanM/ODdmMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIscUNBQXFDIiwiZmlsZSI6IjE2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///166\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanM/OTI3OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsc0NBQXNDIiwiZmlsZSI6IjE2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///167\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzPzVkZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsR0FBZ0I7QUFDMUM7QUFDQSwrRUFBK0UsMEJBQTBCIiwiZmlsZSI6IjE2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMjAuMS4yLjEyIE51bWJlci5wYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgJ051bWJlcicsIHsgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///168\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcz8wNGZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWM7QUFDdEM7QUFDQSwyRUFBMkUsc0JBQXNCIiwiZmlsZSI6IjE2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///169\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.3 Math.acosh(x)\nvar $export = __webpack_require__(0);\nvar log1p = __webpack_require__(107);\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcz83ZjI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEdBQWU7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMyBNYXRoLmFjb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGxvZzFwID0gcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpO1xudmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG52YXIgJGFjb3NoID0gTWF0aC5hY29zaDtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhY29zaFxuICAvLyBWOCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNTA5XG4gICYmIE1hdGguZmxvb3IoJGFjb3NoKE51bWJlci5NQVhfVkFMVUUpKSA9PSA3MTBcbiAgLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFjb3NoKEluZmluaXR5KSAtPiBOYU5cbiAgJiYgJGFjb3NoKEluZmluaXR5KSA9PSBJbmZpbml0eVxuKSwgJ01hdGgnLCB7XG4gIGFjb3NoOiBmdW5jdGlvbiBhY29zaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpIDwgMSA/IE5hTiA6IHggPiA5NDkwNjI2NS42MjQyNTE1NlxuICAgICAgPyBNYXRoLmxvZyh4KSArIE1hdGguTE4yXG4gICAgICA6IGxvZzFwKHggLSAxICsgc3FydCh4IC0gMSkgKiBzcXJ0KHggKyAxKSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///170\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.5 Math.asinh(x)\nvar $export = __webpack_require__(0);\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcz81MzZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUVBQXlFLGVBQWUiLCJmaWxlIjoiMTcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjUgTWF0aC5hc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXNpbmggPSBNYXRoLmFzaW5oO1xuXG5mdW5jdGlvbiBhc2luaCh4KSB7XG4gIHJldHVybiAhaXNGaW5pdGUoeCA9ICt4KSB8fCB4ID09IDAgPyB4IDogeCA8IDAgPyAtYXNpbmgoLXgpIDogTWF0aC5sb2coeCArIE1hdGguc3FydCh4ICogeCArIDEpKTtcbn1cblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFzaW5oKDApIC0+IC0wXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFzaW5oICYmIDEgLyAkYXNpbmgoMCkgPiAwKSwgJ01hdGgnLCB7IGFzaW5oOiBhc2luaCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///171\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.7 Math.atanh(x)\nvar $export = __webpack_require__(0);\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hdGFuaC5qcz9kOWFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///172\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.9 Math.cbrt(x)\nvar $export = __webpack_require__(0);\nvar sign = __webpack_require__(75);\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzP2Y5YWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBYzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE3My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///173\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.11 Math.clz32(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcz8zMmQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTEgTWF0aC5jbHozMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbHozMjogZnVuY3Rpb24gY2x6MzIoeCkge1xuICAgIHJldHVybiAoeCA+Pj49IDApID8gMzEgLSBNYXRoLmZsb29yKE1hdGgubG9nKHggKyAwLjUpICogTWF0aC5MT0cyRSkgOiAzMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///174\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.12 Math.cosh(x)\nvar $export = __webpack_require__(0);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzPzI1YzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///175\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.14 Math.expm1(x)\nvar $export = __webpack_require__(0);\nvar $expm1 = __webpack_require__(76);\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5leHBtMS5qcz85ZjNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7O0FBRXBDLGlFQUFpRSxnQkFBZ0IiLCJmaWxlIjoiMTc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICgkZXhwbTEgIT0gTWF0aC5leHBtMSksICdNYXRoJywgeyBleHBtMTogJGV4cG0xIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///176\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { fround: __webpack_require__(108) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanM/MDQyZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsU0FBUyxtQkFBTyxDQUFDLEdBQWdCLEdBQUciLCJmaWxlIjoiMTc3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGZyb3VuZDogcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///177\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = __webpack_require__(0);\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcz9jN2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///178\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.18 Math.imul(x, y)\nvar $export = __webpack_require__(0);\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzP2Y0ZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE4IE1hdGguaW11bCh4LCB5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW11bCA9IE1hdGguaW11bDtcblxuLy8gc29tZSBXZWJLaXQgdmVyc2lvbnMgZmFpbHMgd2l0aCBiaWcgbnVtYmVycywgc29tZSBoYXMgd3JvbmcgYXJpdHlcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkaW11bCgweGZmZmZmZmZmLCA1KSAhPSAtNSB8fCAkaW11bC5sZW5ndGggIT0gMjtcbn0pLCAnTWF0aCcsIHtcbiAgaW11bDogZnVuY3Rpb24gaW11bCh4LCB5KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgeG4gPSAreDtcbiAgICB2YXIgeW4gPSAreTtcbiAgICB2YXIgeGwgPSBVSU5UMTYgJiB4bjtcbiAgICB2YXIgeWwgPSBVSU5UMTYgJiB5bjtcbiAgICByZXR1cm4gMCB8IHhsICogeWwgKyAoKFVJTlQxNiAmIHhuID4+PiAxNikgKiB5bCArIHhsICogKFVJTlQxNiAmIHluID4+PiAxNikgPDwgMTYgPj4+IDApO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///179\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.21 Math.log10(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcz83ODcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///180\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.20 Math.log1p(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { log1p: __webpack_require__(107) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcz8wNDlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjE4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///181\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.22 Math.log2(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzP2E2OWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMiBNYXRoLmxvZzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMjogZnVuY3Rpb24gbG9nMih4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///182\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.28 Math.sign(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { sign: __webpack_require__(75) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzPzBiMjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCLE9BQU8sbUJBQU8sQ0FBQyxFQUFjLEdBQUciLCJmaWxlIjoiMTgzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduOiByZXF1aXJlKCcuL19tYXRoLXNpZ24nKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///183\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.30 Math.sinh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzPzZjMWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///184\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.33 Math.tanh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50YW5oLmpzP2M3YzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///185\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.34 Math.trunc(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcz84NGI0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///186\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludC5qcz81Njk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///187\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qcz83ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuNCBTdHJpbmcucmF3KGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKVxuICByYXc6IGZ1bmN0aW9uIHJhdyhjYWxsU2l0ZSkge1xuICAgIHZhciB0cGwgPSB0b0lPYmplY3QoY2FsbFNpdGUucmF3KTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodHBsLmxlbmd0aCk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGxlbiA+IGkpIHtcbiAgICAgIHJlcy5wdXNoKFN0cmluZyh0cGxbaSsrXSkpO1xuICAgICAgaWYgKGkgPCBhTGVuKSByZXMucHVzaChTdHJpbmcoYXJndW1lbnRzW2ldKSk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///188\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.1.3.25 String.prototype.trim()\n__webpack_require__(45)('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanM/NGYzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///189\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $at = __webpack_require__(55)(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(77)(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzPzVkZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixVQUFVLG1CQUFPLENBQUMsRUFBYzs7QUFFaEM7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLDZCQUE2QjtBQUM3QixjQUFjO0FBQ2Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsQ0FBQyIsImZpbGUiOiIxOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///190\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanM/YTAzMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykoZmFsc2UpO1xuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///191\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcz9hZWY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBbUI7QUFDekM7QUFDQTs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///192\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\nvar $export = __webpack_require__(0);\nvar context = __webpack_require__(79);\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(80)(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzPzJmZGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6Qzs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjcgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcsIHBvc2l0aW9uID0gMClcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5jb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgSU5DTFVERVMpXG4gICAgICAuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///193\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: __webpack_require__(74)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdC5qcz8xNGI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3BDLENBQUMiLCJmaWxlIjoiMTk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///194\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoLmpzP2Y1NTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6QztBQUNBOztBQUVBLGdDQUFnQyxtQkFBTyxDQUFDLEVBQW9CO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///195\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.2 String.prototype.anchor(name)\n__webpack_require__(13)('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcz84NDQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///196\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.3 String.prototype.big()\n__webpack_require__(13)('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcz85Yzg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///197\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.4 String.prototype.blink()\n__webpack_require__(13)('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzP2ZhODMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///198\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.5 String.prototype.bold()\n__webpack_require__(13)('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQuanM/NDhjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JvbGQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm9sZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///199\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.6 String.prototype.fixed()\n__webpack_require__(13)('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzP2QyNjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///200\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.7 String.prototype.fontcolor(color)\n__webpack_require__(13)('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcz82YzM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjAxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///201\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.8 String.prototype.fontsize(size)\n__webpack_require__(13)('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzPzllYzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///202\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.9 String.prototype.italics()\n__webpack_require__(13)('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MuanM/ZDBiMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///203\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.10 String.prototype.link(url)\n__webpack_require__(13)('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanM/YjU0YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///204\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.11 String.prototype.small()\n__webpack_require__(13)('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzP2YzODYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///205\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.12 String.prototype.strike()\n__webpack_require__(13)('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcz8xNDQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3RyaWtlJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3RyaWtlJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///206\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.13 String.prototype.sub()\n__webpack_require__(13)('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcz82NzNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3ViJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///207\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.14 String.prototype.sup()\n__webpack_require__(13)('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcz8yNDJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3VwJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///208\n")},function(module,exports,__webpack_require__){eval("// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS5ub3cuanM/NzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsbUJBQW1CLDZCQUE2QixFQUFFLEVBQUUiLCJmaWxlIjoiMjA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///209\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\n\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzPzAyOTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjs7QUFFM0MsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLG1DQUFtQywyQkFBMkIsVUFBVSxFQUFFLEVBQUU7QUFDNUUsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///210\n")},function(module,exports,__webpack_require__){eval("// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = __webpack_require__(0);\nvar toISOString = __webpack_require__(212);\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzPzhlYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF1Qjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///211\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = __webpack_require__(3);\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1pc28tc3RyaW5nLmpzPzhlZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///212\n")},function(module,exports,__webpack_require__){eval("var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n __webpack_require__(12)(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanM/ODdiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjEzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///213\n")},function(module,exports,__webpack_require__){eval("var TO_PRIMITIVE = __webpack_require__(5)('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) __webpack_require__(11)(proto, TO_PRIMITIVE, __webpack_require__(215));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanM/YzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsbUJBQU8sQ0FBQyxDQUFRO0FBQ25DOztBQUVBLDhCQUE4QixtQkFBTyxDQUFDLEVBQVMsdUJBQXVCLG1CQUFPLENBQUMsR0FBc0IiLCJmaWxlIjoiMjE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///214\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanM/ODM4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjIxNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///215\n")},function(module,exports,__webpack_require__){eval("// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Array', { isArray: __webpack_require__(54) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanM/MmNhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsVUFBVSxtQkFBTyxDQUFDLEVBQWEsR0FBRyIsImZpbGUiOiIyMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///216\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar ctx = __webpack_require__(19);\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar toLength = __webpack_require__(6);\nvar createProperty = __webpack_require__(82);\nvar getIterFn = __webpack_require__(83);\n\n$export($export.S + $export.F * !__webpack_require__(57)(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcz8xYzRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBb0I7QUFDakQsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7O0FBRXBELGlDQUFpQyxtQkFBTyxDQUFDLEVBQWdCLG1CQUFtQixrQkFBa0IsRUFBRTtBQUNoRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxnQ0FBZ0M7QUFDdkY7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtDQUFrQyxnQkFBZ0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2VcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///217\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar createProperty = __webpack_require__(82);\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanM/ZTgwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQsZ0JBQWdCO0FBQ2hCO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///218\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (__webpack_require__(48) != Object || !__webpack_require__(22)(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcz8zNzNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDOztBQUVBO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsRUFBWSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUMvRjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///219\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar html = __webpack_require__(70);\nvar cof = __webpack_require__(20);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanM/MjNiZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0EsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsVUFBVTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGlmIChodG1sKSBhcnJheVNsaWNlLmNhbGwoaHRtbCk7XG59KSwgJ0FycmF5Jywge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2UoYmVnaW4sIGVuZCkge1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGlzLmxlbmd0aCk7XG4gICAgdmFyIGtsYXNzID0gY29mKHRoaXMpO1xuICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kO1xuICAgIGlmIChrbGFzcyA9PSAnQXJyYXknKSByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xuICAgIHZhciBzdGFydCA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuKTtcbiAgICB2YXIgdXBUbyA9IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbik7XG4gICAgdmFyIHNpemUgPSB0b0xlbmd0aCh1cFRvIC0gc3RhcnQpO1xuICAgIHZhciBjbG9uZWQgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSBjbG9uZWRbaV0gPSBrbGFzcyA9PSAnU3RyaW5nJ1xuICAgICAgPyB0aGlzLmNoYXJBdChzdGFydCArIGkpXG4gICAgICA6IHRoaXNbc3RhcnQgKyBpXTtcbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///220\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar fails = __webpack_require__(3);\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !__webpack_require__(22)($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcz81NWRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDLE1BQU0sbUJBQU8sQ0FBQyxFQUFrQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRzb3J0ID0gW10uc29ydDtcbnZhciB0ZXN0ID0gWzEsIDIsIDNdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFOC1cbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCBidWdcbiAgdGVzdC5zb3J0KG51bGwpO1xuICAvLyBPbGQgV2ViS2l0XG59KSB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRzb3J0KSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjI1IEFycmF5LnByb3RvdHlwZS5zb3J0KGNvbXBhcmVmbilcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWRcbiAgICAgID8gJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSwgYUZ1bmN0aW9uKGNvbXBhcmVmbikpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///221\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $forEach = __webpack_require__(26)(0);\nvar STRICT = __webpack_require__(22)([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2guanM/ZjNlMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFrQjtBQUN6QyxhQUFhLG1CQUFPLENBQUMsRUFBa0I7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgU1RSSUNUID0gcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZvckVhY2gsIHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFTVFJJQ1QsICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjEwIC8gMTUuNC40LjE4IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///222\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar isArray = __webpack_require__(54);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lODUzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIyMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///223\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $map = __webpack_require__(26)(1);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzPzZkNjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBa0I7O0FBRXJDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5tYXAsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNSAvIDE1LjQuNC4xOSBBcnJheS5wcm90b3R5cGUubWFwKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///224\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $filter = __webpack_require__(26)(2);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzP2QyNWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7O0FBRXhDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///225\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $some = __webpack_require__(26)(3);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29tZS5qcz83NTlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQWtCOztBQUV0QyxpQ0FBaUMsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///226\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $every = __webpack_require__(26)(4);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanM/NjA5NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFdkMsaUNBQWlDLG1CQUFPLENBQUMsRUFBa0I7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///227\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzPzBjZDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE4IC8gMTUuNC40LjIxIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCBmYWxzZSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///228\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzPzQ4ZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///229\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $indexOf = __webpack_require__(52)(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanM/NTdlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFtQjtBQUMxQztBQUNBOztBQUVBLG1EQUFtRCxtQkFBTyxDQUFDLEVBQWtCO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///230\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcz85ODY1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7O0FBRUEsbURBQW1ELG1CQUFPLENBQUMsRUFBa0I7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxXQUFXO0FBQ3JCO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///231\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { copyWithin: __webpack_require__(111) });\n\n__webpack_require__(31)('copyWithin');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanM/NzQ0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsYUFBYSxtQkFBTyxDQUFDLEdBQXNCLEdBQUc7O0FBRTNFLG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnY29weVdpdGhpbicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///232\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { fill: __webpack_require__(85) });\n\n__webpack_require__(31)('fill');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcz82YzdiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDZCQUE2QixPQUFPLG1CQUFPLENBQUMsRUFBZSxHQUFHOztBQUU5RCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///233\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcz83NTE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjggQXJyYXkucHJvdG90eXBlLmZpbmQocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg1KTtcbnZhciBLRVkgPSAnZmluZCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///234\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcz8yMGQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjkgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///235\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(38)('Array');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcz9kMDRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///236\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar inheritIfRequired = __webpack_require__(73);\nvar dP = __webpack_require__(8).f;\nvar gOPN = __webpack_require__(37).f;\nvar isRegExp = __webpack_require__(56);\nvar $flags = __webpack_require__(50);\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (__webpack_require__(7) && (!CORRECT_NEW || __webpack_require__(3)(function () {\n re2[__webpack_require__(5)('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n __webpack_require__(12)(global, 'RegExp', $RegExp);\n}\n\n__webpack_require__(38)('RegExp');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzPzNiMmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7QUFDeEQsU0FBUyxtQkFBTyxDQUFDLENBQWM7QUFDL0IsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxFQUFjO0FBQ3JDLGFBQWEsbUJBQU8sQ0FBQyxFQUFVO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksbUJBQU8sQ0FBQyxDQUFnQixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFVO0FBQ3BFLE1BQU0sbUJBQU8sQ0FBQyxDQUFRO0FBQ3RCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCLEVBQUU7QUFDNUMsMEJBQTBCLGdCQUFnQjtBQUMxQyxLQUFLO0FBQ0w7QUFDQSxvQ0FBb0MsaUJBQWlCO0FBQ3JEO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2Qjs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCIiwiZmlsZSI6IjIzNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///237\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(114);\nvar anObject = __webpack_require__(1);\nvar $flags = __webpack_require__(50);\nvar DESCRIPTORS = __webpack_require__(7);\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n __webpack_require__(12)(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (__webpack_require__(3)(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcz82YjU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFvQjtBQUM1QixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBOztBQUVBO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7O0FBRUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBVSxlQUFlLHdCQUF3QiwwQkFBMEIsWUFBWSxFQUFFO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjM4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmZsYWdzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IC8uL1tUT19TVFJJTkddO1xuXG52YXIgZGVmaW5lID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmbiwgdHJ1ZSk7XG59O1xuXG4vLyAyMS4yLjUuMTQgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZygpXG5pZiAocmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7IHJldHVybiAkdG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSkpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgcmV0dXJuICcvJy5jb25jYXQoUi5zb3VyY2UsICcvJyxcbiAgICAgICdmbGFncycgaW4gUiA/IFIuZmxhZ3MgOiAhREVTQ1JJUFRPUlMgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCA/ICRmbGFncy5jYWxsKFIpIDogdW5kZWZpbmVkKTtcbiAgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxufSBlbHNlIGlmICgkdG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkcpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///238\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\n\n// @@match logic\n__webpack_require__(59)('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoLmpzPzQ5MTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///239\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\n__webpack_require__(59)('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanM/YTQ4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCO0FBQzFELGlCQUFpQixtQkFBTyxDQUFDLEVBQXlCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUMiLCJmaWxlIjoiMjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///240\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar sameValue = __webpack_require__(100);\nvar regExpExec = __webpack_require__(58);\n\n// @@search logic\n__webpack_require__(59)('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcz8zODZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWU7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///241\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar isRegExp = __webpack_require__(56);\nvar anObject = __webpack_require__(1);\nvar speciesConstructor = __webpack_require__(51);\nvar advanceStringIndex = __webpack_require__(88);\nvar toLength = __webpack_require__(6);\nvar callRegExpExec = __webpack_require__(58);\nvar regexpExec = __webpack_require__(87);\nvar fails = __webpack_require__(3);\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\n__webpack_require__(59)('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzPzI4YTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBd0I7QUFDekQseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBeUI7QUFDdEQsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLHlCQUF5QixFQUFFOztBQUVoRTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1GQUFtRjtBQUNuRjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EseUJBQXlCLG1CQUFtQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///242\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar global = __webpack_require__(2);\nvar ctx = __webpack_require__(19);\nvar classof = __webpack_require__(44);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar aFunction = __webpack_require__(10);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar speciesConstructor = __webpack_require__(51);\nvar task = __webpack_require__(89).set;\nvar microtask = __webpack_require__(90)();\nvar newPromiseCapabilityModule = __webpack_require__(91);\nvar perform = __webpack_require__(115);\nvar userAgent = __webpack_require__(60);\nvar promiseResolve = __webpack_require__(116);\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[__webpack_require__(5)('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = __webpack_require__(41)($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__webpack_require__(43)($Promise, PROMISE);\n__webpack_require__(38)(PROMISE);\nWrapper = __webpack_require__(18)[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(57)(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcz81NTFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RCxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQTJCO0FBQ3BFLGNBQWMsbUJBQU8sQ0FBQyxHQUFZO0FBQ2xDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMscUJBQXFCLG1CQUFPLENBQUMsR0FBb0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxFQUFFLG1CQUFPLENBQUMsQ0FBUTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsbUJBQW1CLGtDQUFrQztBQUNyRCxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxlQUFlLHVDQUF1QztBQUN0RDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDBCQUEwQjtBQUNqRDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGtCQUFrQix5QkFBeUIsS0FBSztBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCO0FBQ0EsdUJBQXVCLG1CQUFPLENBQUMsRUFBaUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxvQkFBb0I7QUFDOUUsbUJBQU8sQ0FBQyxFQUFzQjtBQUM5QixtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLFVBQVUsbUJBQU8sQ0FBQyxFQUFTOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxnREFBZ0QsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4RTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///243\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar weak = __webpack_require__(121);\nvar validate = __webpack_require__(42);\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\n__webpack_require__(61)(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanM/YzAyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFdBQVcsbUJBQU8sQ0FBQyxHQUFvQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQSxtQkFBTyxDQUFDLEVBQWU7QUFDdkIsNkJBQTZCLG1FQUFtRTtBQUNoRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbi8vIDIzLjQgV2Vha1NldCBPYmplY3RzXG5yZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy40LjMuMSBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfU0VUKSwgdmFsdWUsIHRydWUpO1xuICB9XG59LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///244\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $typed = __webpack_require__(62);\nvar buffer = __webpack_require__(92);\nvar anObject = __webpack_require__(1);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar isObject = __webpack_require__(4);\nvar ArrayBuffer = __webpack_require__(2).ArrayBuffer;\nvar speciesConstructor = __webpack_require__(51);\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * __webpack_require__(3)(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\n__webpack_require__(38)(ARRAY_BUFFER);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzP2M2NmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixhQUFhLG1CQUFPLENBQUMsRUFBaUI7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsQ0FBVztBQUNyQyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkVBQTZFLDRCQUE0Qjs7QUFFekc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQsNENBQTRDLG1CQUFPLENBQUMsQ0FBVTtBQUM5RDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsNkZBQTZGO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQsbUJBQU8sQ0FBQyxFQUFnQiIsImZpbGUiOiIyNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciAkQXJyYXlCdWZmZXIgPSBidWZmZXIuQXJyYXlCdWZmZXI7XG52YXIgJERhdGFWaWV3ID0gYnVmZmVyLkRhdGFWaWV3O1xudmFyICRpc1ZpZXcgPSAkdHlwZWQuQUJWICYmIEFycmF5QnVmZmVyLmlzVmlldztcbnZhciAkc2xpY2UgPSAkQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlO1xudmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChBcnJheUJ1ZmZlciAhPT0gJEFycmF5QnVmZmVyKSwgeyBBcnJheUJ1ZmZlcjogJEFycmF5QnVmZmVyIH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEkdHlwZWQuQ09OU1RSLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS4zLjEgQXJyYXlCdWZmZXIuaXNWaWV3KGFyZylcbiAgaXNWaWV3OiBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgICByZXR1cm4gJGlzVmlldyAmJiAkaXNWaWV3KGl0KSB8fCBpc09iamVjdChpdCkgJiYgVklFVyBpbiBpdDtcbiAgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5VICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3ICRBcnJheUJ1ZmZlcigyKS5zbGljZSgxLCB1bmRlZmluZWQpLmJ5dGVMZW5ndGg7XG59KSwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuNC4zIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZShzdGFydCwgZW5kKVxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIGlmICgkc2xpY2UgIT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCkgcmV0dXJuICRzbGljZS5jYWxsKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIHZhciBsZW4gPSBhbk9iamVjdCh0aGlzKS5ieXRlTGVuZ3RoO1xuICAgIHZhciBmaXJzdCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kLCBsZW4pO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluKSB7XG4gICAgICB2aWV3VC5zZXRVaW50OChpbmRleCsrLCB2aWV3Uy5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShBUlJBWV9CVUZGRVIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///245\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n$export($export.G + $export.W + $export.F * !__webpack_require__(62).ABV, {\n DataView: __webpack_require__(92).DataView\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3LmpzPzI2MmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsNkNBQTZDLG1CQUFPLENBQUMsRUFBVTtBQUMvRCxZQUFZLG1CQUFPLENBQUMsRUFBaUI7QUFDckMsQ0FBQyIsImZpbGUiOiIyNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///246\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcz9iMDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///247\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanM/MzRlZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQ4LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///248\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheS5qcz82YWEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///249\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanM/MTVhYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///250\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzP2FmNTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1MS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///251\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXkuanM/YjZlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///252\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzPzljMjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///253\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcz82M2Q5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///254\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheS5qcz80ZGRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///255\n")},function(module,exports,__webpack_require__){eval("// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar rApply = (__webpack_require__(2).Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !__webpack_require__(3)(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcz9kZjFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsQ0FBVyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFVO0FBQ25ELHNCQUFzQixjQUFjO0FBQ3BDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///256\n")},function(module,exports,__webpack_require__){eval("// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = __webpack_require__(0);\nvar create = __webpack_require__(36);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar bind = __webpack_require__(101);\nvar rConstruct = (__webpack_require__(2).Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanM/MjM5NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyxHQUFTO0FBQzVCLGtCQUFrQixtQkFBTyxDQUFDLENBQVcsZUFBZTs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLG1DQUFtQyxjQUFjO0FBQ2pELENBQUM7QUFDRDtBQUNBLDBCQUEwQixjQUFjO0FBQ3hDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4yIFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJndW1lbnRzTGlzdCBbLCBuZXdUYXJnZXRdKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vX2JpbmQnKTtcbnZhciByQ29uc3RydWN0ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmNvbnN0cnVjdDtcblxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEockNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUcpLCAnUmVmbGVjdCcsIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUZ1bmN0aW9uKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUZ1bmN0aW9uKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIHJDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBGdW5jdGlvbi5hcHBseS5jYWxsKFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///257\n")},function(module,exports,__webpack_require__){eval("// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = __webpack_require__(8);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanM/ODhjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCOztBQUUzQztBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxnQ0FBZ0MsTUFBTSxXQUFXLE9BQU8sV0FBVztBQUNuRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///258\n")},function(module,exports,__webpack_require__){eval("// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = __webpack_require__(0);\nvar gOPD = __webpack_require__(16).f;\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanM/YmExNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS40IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgdmFyIGRlc2MgPSBnT1BEKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgICByZXR1cm4gZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUgPyBmYWxzZSA6IGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlLZXldO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///259\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 26.1.5 Reflect.enumerate(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\n__webpack_require__(78)(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanM/N2ZmNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQSwrQkFBK0I7QUFDL0IsY0FBYztBQUNkLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDLEdBQUc7QUFDSCxVQUFVO0FBQ1YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///260\n")},function(module,exports,__webpack_require__){eval("// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanM/ZDE4NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQixXQUFXIiwiZmlsZSI6IjI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///261\n")},function(module,exports,__webpack_require__){eval("// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = __webpack_require__(16);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanM/ZWJkZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///262\n")},function(module,exports,__webpack_require__){eval("// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = __webpack_require__(0);\nvar getProto = __webpack_require__(17);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzPzJkMzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBZTtBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///263\n")},function(module,exports,__webpack_require__){eval("// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5oYXMuanM/ZjZiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///264\n")},function(module,exports,__webpack_require__){eval("// 26.1.10 Reflect.isExtensible(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzPzIyNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEwIFJlZmxlY3QuaXNFeHRlbnNpYmxlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///265\n")},function(module,exports,__webpack_require__){eval("// 26.1.11 Reflect.ownKeys(target)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', { ownKeys: __webpack_require__(123) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcz9jNjk4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLCtCQUErQixVQUFVLG1CQUFPLENBQUMsR0FBYSxHQUFHIiwiZmlsZSI6IjI2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///266\n")},function(module,exports,__webpack_require__){eval("// 26.1.12 Reflect.preventExtensions(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanM/YTE5ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///267\n")},function(module,exports,__webpack_require__){eval("// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = __webpack_require__(8);\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar createDesc = __webpack_require__(32);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQuanM/OTI1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsV0FBVyIsImZpbGUiOiIyNjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEzIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgWywgcmVjZWl2ZXJdKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzYyA9IGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvO1xuICBpZiAoIW93bkRlc2MpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYgKGhhcyhvd25EZXNjLCAndmFsdWUnKSkge1xuICAgIGlmIChvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvciA9IGdPUEQuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZURlc2MoMCwgVikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvd25EZXNjLnNldCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3duRGVzYy5zZXQuY2FsbChyZWNlaXZlciwgViksIHRydWUpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IHNldDogc2V0IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///268\n")},function(module,exports,__webpack_require__){eval("// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = __webpack_require__(0);\nvar setProto = __webpack_require__(71);\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzPzkyNzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///269\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/Array.prototype.includes\nvar $export = __webpack_require__(0);\nvar $includes = __webpack_require__(52)(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n__webpack_require__(31)('includes');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanM/Njc2MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBbUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjI3MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///270\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar aFunction = __webpack_require__(10);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\n__webpack_require__(31)('flatMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanM/ZTk1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsdUJBQXVCLG1CQUFPLENBQUMsR0FBdUI7QUFDdEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2Qyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF5Qjs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///271\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\n__webpack_require__(31)('flatten');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbi5qcz83MWYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyx1QkFBdUIsbUJBQU8sQ0FBQyxHQUF1QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///272\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(true);\nvar $fails = __webpack_require__(3);\n\nvar FORCED = $fails(function () {\n return '𠮷'.at(0) !== '𠮷';\n});\n\n$export($export.P + $export.F * FORCED, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzPzM1MzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDLGFBQWEsbUJBQU8sQ0FBQyxDQUFVOztBQUUvQjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjczLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG52YXIgRk9SQ0VEID0gJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICfwoK63Jy5hdCgwKSAhPT0gJ/CgrrcnO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VELCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///273\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcz9mNTc2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsR0FBZTtBQUNsQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///274\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQuanM/ZWQ1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEdBQWU7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZhbHNlKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///275\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcz8yM2JlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbUxlZnQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1MZWZ0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAxKTtcbiAgfTtcbn0sICd0cmltU3RhcnQnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///276\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanM/N2MwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1SaWdodCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbVJpZ2h0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAyKTtcbiAgfTtcbn0sICd0cmltRW5kJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///277\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar toLength = __webpack_require__(6);\nvar isRegExp = __webpack_require__(56);\nvar getFlags = __webpack_require__(50);\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\n__webpack_require__(78)($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbC5qcz85ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBVTtBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0EsVUFBVTtBQUNWLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZ2V0RmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIFJlZ0V4cFByb3RvID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIChyZWdleHAsIHN0cmluZykge1xuICB0aGlzLl9yID0gcmVnZXhwO1xuICB0aGlzLl9zID0gc3RyaW5nO1xufTtcblxucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKSgkUmVnRXhwU3RyaW5nSXRlcmF0b3IsICdSZWdFeHAgU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy5fci5leGVjKHRoaXMuX3MpO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IG1hdGNoID09PSBudWxsIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICBkZWZpbmVkKHRoaXMpO1xuICAgIGlmICghaXNSZWdFeHAocmVnZXhwKSkgdGhyb3cgVHlwZUVycm9yKHJlZ2V4cCArICcgaXMgbm90IGEgcmVnZXhwIScpO1xuICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgIHZhciBmbGFncyA9ICdmbGFncycgaW4gUmVnRXhwUHJvdG8gPyBTdHJpbmcocmVnZXhwLmZsYWdzKSA6IGdldEZsYWdzLmNhbGwocmVnZXhwKTtcbiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cC5zb3VyY2UsIH5mbGFncy5pbmRleE9mKCdnJykgPyBmbGFncyA6ICdnJyArIGZsYWdzKTtcbiAgICByeC5sYXN0SW5kZXggPSB0b0xlbmd0aChyZWdleHAubGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3ICRSZWdFeHBTdHJpbmdJdGVyYXRvcihyeCwgUyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///278\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('asyncIterator');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzP2FjNGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFlIiwiZmlsZSI6IjI3OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///279\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanM/YzdjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWUiLCJmaWxlIjoiMjgwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///280\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = __webpack_require__(0);\nvar ownKeys = __webpack_require__(123);\nvar toIObject = __webpack_require__(15);\nvar gOPD = __webpack_require__(16);\nvar createProperty = __webpack_require__(82);\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanM/OGU2ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///281\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $values = __webpack_require__(126)(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcy5qcz84NjE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsY0FBYyxtQkFBTyxDQUFDLEdBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjgyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///282\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $entries = __webpack_require__(126)(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanM/ZmZjMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxHQUFvQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI4My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///283\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXIuanM/NDUwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///284\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanM/ZmVlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///285\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanM/YjlhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///286\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanM/NjRkNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///287\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Map', { toJSON: __webpack_require__(127)('Map') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanM/NDcwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdNYXAnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///288\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(127)('Set') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LnRvLWpzb24uanM/ZGI5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ1NldCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///289\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\n__webpack_require__(64)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzPzcyOWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///290\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\n__webpack_require__(64)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzPzk5YzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///291\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\n__webpack_require__(64)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAub2YuanM/NzY0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///292\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\n__webpack_require__(64)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanM/YmRkMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///293\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\n__webpack_require__(65)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanM/NDE2YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///294\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\n__webpack_require__(65)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LmZyb20uanM/ZGQ4YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///295\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\n__webpack_require__(65)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcz81ZDQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///296\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\n__webpack_require__(65)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbS5qcz81ZDkwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///297\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.G, { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZ2xvYmFsLmpzPzBjMzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsb0JBQW9CLFNBQVMsbUJBQU8sQ0FBQyxDQUFXLEdBQUciLCJmaWxlIjoiMjk4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///298\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'System', { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcz9hMjM0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDhCQUE4QixTQUFTLG1CQUFPLENBQUMsQ0FBVyxHQUFHIiwiZmlsZSI6IjI5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///299\n")},function(module,exports,__webpack_require__){eval("// https://github.com/ljharb/proposal-is-error\nvar $export = __webpack_require__(0);\nvar cof = __webpack_require__(20);\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanM/NDI3NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFROztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///300\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcz8wOWUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///301\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcz8wYzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzAyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///302\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzLmpzPzI3NDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///303\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar scale = __webpack_require__(129);\nvar fround = __webpack_require__(108);\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanM/MWY5MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFlBQVksbUJBQU8sQ0FBQyxHQUFlO0FBQ25DLGFBQWEsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2NhbGUgPSByZXF1aXJlKCcuL19tYXRoLXNjYWxlJyk7XG52YXIgZnJvdW5kID0gcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBmc2NhbGU6IGZ1bmN0aW9uIGZzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgICByZXR1cm4gZnJvdW5kKHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///304\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcz85YzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///305\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcz8yZjc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///306\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pbXVsaC5qcz9iNGMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///307\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcz8xZjE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///308\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zLmpzPzY5MmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBERUdfUEVSX1JBRCA9IE1hdGguUEkgLyAxODA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///309\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { scale: __webpack_require__(129) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcz9jNzc1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjMxMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///310\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC51bXVsaC5qcz84YTVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzExLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///311\n")},function(module,exports,__webpack_require__){eval("// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzP2VkN2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMzEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///312\n")},function(module,exports,__webpack_require__){"use strict";eval("// https://github.com/tc39/proposal-promise-finally\n\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar speciesConstructor = __webpack_require__(51);\nvar promiseResolve = __webpack_require__(116);\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzPzA5N2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXdCO0FBQ3pELHFCQUFxQixtQkFBTyxDQUFDLEdBQW9COztBQUVqRCwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQsVUFBVSxFQUFFO0FBQzFFLEtBQUs7QUFDTDtBQUNBLDhEQUE4RCxTQUFTLEVBQUU7QUFDekUsS0FBSztBQUNMO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///313\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-promise-try\nvar $export = __webpack_require__(0);\nvar newPromiseCapability = __webpack_require__(91);\nvar perform = __webpack_require__(115);\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanM/YTljYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7QUFDOUQsY0FBYyxtQkFBTyxDQUFDLEdBQVk7O0FBRWxDLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///314\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanM/ZTNkMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///315\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanM/Y2VhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IG1ldGFkYXRhLm1hcDtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlO1xuXG5tZXRhZGF0YS5leHAoeyBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgaWYgKG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgfHwgIW1ldGFkYXRhTWFwWydkZWxldGUnXShtZXRhZGF0YUtleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgdGFyZ2V0TWV0YWRhdGFbJ2RlbGV0ZSddKHRhcmdldEtleSk7XG4gIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///316\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanM/ZTM5NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///317\n")},function(module,exports,__webpack_require__){eval("var Set = __webpack_require__(119);\nvar from = __webpack_require__(128);\nvar metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcz9iODBiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxHQUFXO0FBQzdCLFdBQVcsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBTZXQgPSByZXF1aXJlKCcuL2VzNi5zZXQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xudmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeU1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIHZhciBvS2V5cyA9IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHJldHVybiBvS2V5cztcbiAgdmFyIHBLZXlzID0gb3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgcmV0dXJuIHBLZXlzLmxlbmd0aCA/IG9LZXlzLmxlbmd0aCA/IGZyb20obmV3IFNldChvS2V5cy5jb25jYXQocEtleXMpKSkgOiBwS2V5cyA6IG9LZXlzO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///318\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzPzA2YTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///319\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///320\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanM/ODk2ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///321\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzP2VjMzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///322\n")},function(module,exports,__webpack_require__){eval("var $metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YS5qcz8zYTljIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWE7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QztBQUNBOztBQUVBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///323\n")},function(module,exports,__webpack_require__){eval("// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = __webpack_require__(0);\nvar microtask = __webpack_require__(90)();\nvar process = __webpack_require__(2).process;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcz8wZDI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///324\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/zenparsing/es-observable\nvar $export = __webpack_require__(0);\nvar global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar microtask = __webpack_require__(90)();\nvar OBSERVABLE = __webpack_require__(5)('observable');\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar anInstance = __webpack_require__(39);\nvar redefineAll = __webpack_require__(41);\nvar hide = __webpack_require__(11);\nvar forOf = __webpack_require__(40);\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\n__webpack_require__(38)('Observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JzZXJ2YWJsZS5qcz8zN2I1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLENBQVE7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEUsNEJBQTRCO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLHVDQUF1QztBQUN2Qyx1Q0FBdUMseUJBQXlCO0FBQ2hFLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQLDBCQUEwQixhQUFhO0FBQ3ZDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSwrREFBK0QsT0FBTztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixrQkFBa0I7QUFDM0M7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUCwwQkFBMEIsYUFBYTtBQUN2QyxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVELHFEQUFxRCxhQUFhLEVBQUU7O0FBRXBFLG9CQUFvQiwwQkFBMEI7O0FBRTlDLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMzI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///325\n")},function(module,exports,__webpack_require__){eval("// ie9- setTimeout & setInterval additional parameters fix\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar userAgent = __webpack_require__(60);\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzPzQ3OTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMyNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///326\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $task = __webpack_require__(89);\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzPzEzMGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQVM7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIsIHtcbiAgc2V0SW1tZWRpYXRlOiAkdGFzay5zZXQsXG4gIGNsZWFySW1tZWRpYXRlOiAkdGFzay5jbGVhclxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///327\n")},function(module,exports,__webpack_require__){eval("var $iterators = __webpack_require__(86);\nvar getKeys = __webpack_require__(34);\nvar redefine = __webpack_require__(12);\nvar global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar wks = __webpack_require__(5);\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzP2FjNmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBc0I7QUFDL0MsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvREFBb0Qsd0JBQXdCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///328\n")},function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(global) {/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n "use strict";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === "function" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || "@@iterator";\n var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";\n var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";\n\n var inModule = typeof module === "object";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we\'re in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don\'t bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we\'re in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there\'s no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don\'t have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: "normal", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: "throw", arg: err };\n }\n }\n\n var GenStateSuspendedStart = "suspendedStart";\n var GenStateSuspendedYield = "suspendedYield";\n var GenStateExecuting = "executing";\n var GenStateCompleted = "completed";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don\'t natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = "GeneratorFunction";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n ["next", "throw", "return"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === "function" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === "GeneratorFunction"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = "GeneratorFunction";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, "__await")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === "throw") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === "object" &&\n hasOwn.call(value, "__await")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke("next", value, resolve, reject);\n }, function(err) {\n invoke("throw", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === "object" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error("Generator is already running");\n }\n\n if (state === GenStateCompleted) {\n if (method === "throw") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === "next") {\n // Setting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === "throw") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === "return") {\n context.abrupt("return", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === "normal") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === "throw") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = "throw";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === "throw") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = "return";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === "throw") {\n // If maybeInvokeDelegate(context) changed context.method from\n // "return" to "throw", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = "throw";\n context.arg = new TypeError(\n "The iterator does not provide a \'throw\' method");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === "throw") {\n context.method = "throw";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = "throw";\n context.arg = new TypeError("iterator result is not an object");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was "throw" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was "next", forget context.arg since it has been\n // "consumed" by the delegate iterator. If context.method was\n // "return", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== "return") {\n context.method = "next";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = "Generator";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers\' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn\'t happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return "[object Generator]";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = "normal";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: "root" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === "function") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = "next";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === "t" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === "throw") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = "throw";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = "next";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === "root") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle("end");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, "catchLoc");\n var hasFinally = hasOwn.call(entry, "finallyLoc");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error("try statement without catch or finally");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, "finallyLoc") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === "break" ||\n type === "continue") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = "next";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === "throw") {\n throw record.arg;\n }\n\n if (record.type === "break" ||\n record.type === "continue") {\n this.next = record.arg;\n } else if (record.type === "return") {\n this.rval = this.arg = record.arg;\n this.method = "return";\n this.next = "end";\n } else if (record.type === "normal" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n "catch": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === "throw") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error("illegal catch attempt");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === "next") {\n // Deliberately forget the last sent value so that we don\'t\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === "object" ? global :\n typeof window === "object" ? window :\n typeof self === "object" ? self : this\n);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanM/ZjNhMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///329\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(331);\nmodule.exports = __webpack_require__(18).RegExp.escape;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcz9mZDVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsRUFBcUIiLCJmaWxlIjoiMzMwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///330\n")},function(module,exports,__webpack_require__){eval("// https://github.com/benjamingr/RexExp.escape\nvar $export = __webpack_require__(0);\nvar $re = __webpack_require__(332)(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanM/ZDBjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxHQUFhLG9CQUFvQjs7QUFFbkQsOEJBQThCLDhCQUE4QixnQkFBZ0IsRUFBRSxFQUFFIiwiZmlsZSI6IjMzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmdyL1JleEV4cC5lc2NhcGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlID0gcmVxdWlyZSgnLi9fcmVwbGFjZXInKSgvW1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWdFeHAnLCB7IGVzY2FwZTogZnVuY3Rpb24gZXNjYXBlKGl0KSB7IHJldHVybiAkcmUoaXQpOyB9IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///331\n")},function(module,exports){eval("module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVwbGFjZXIuanM/YWJkNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///332\n")},function(module,__webpack_exports__,__webpack_require__){"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./src/core/Deferred.js\nfunction _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _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; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Promise\r\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\r\n */\n\n/**\r\n * A Promise object that can be resolved, rejected or canceled at any time by the\r\n * user.\r\n *\r\n * @extends external:Promise\r\n */\nvar Deferred = /*#__PURE__*/function (_Promise) {\n _inherits(Deferred, _Promise);\n\n var _super = _createSuper(Deferred);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Function} [executable=() => {}] - The function to be executed by the\r\n * constructor, during the process of constructing the promise. The signature\r\n * of this is expected to be: executable( resolutionFunc, rejectionFunc, cancellationFunc ).\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'resolved\'.\r\n */\n function Deferred() {\n var _this;\n\n var executable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};\n var onResolve = arguments.length > 1 ? arguments[1] : undefined;\n var onReject = arguments.length > 2 ? arguments[2] : undefined;\n var onCancel = arguments.length > 3 ? arguments[3] : undefined;\n\n _classCallCheck(this, Deferred);\n\n if (typeof executable !== \'function\') {\n throw new Error("Cannot create new Deferred. Executable must be a function.");\n }\n\n if (typeof onResolve !== \'undefined\' && typeof onResolve !== \'function\') {\n throw new Error("Cannot create new Deferred. OnResolve must be a function.");\n }\n\n if (typeof onReject !== \'undefined\' && typeof onReject !== \'function\') {\n throw new Error("Cannot create new Deferred. OnReject must be a function.");\n }\n\n if (typeof onCancel !== \'undefined\' && typeof onCancel !== \'function\') {\n throw new Error("Cannot create new Deferred. OnCancel must be a function.");\n }\n\n var res;\n var rej;\n var cancel;\n var status = {\n resolved: false,\n rejected: false,\n canceled: false,\n pending: true\n };\n _this = _super.call(this, function (resolve, reject) {\n // Store the resolver\n res = function res(value) {\n if (status.pending) {\n status.resolved = true;\n status.pending = false;\n\n if (typeof onResolve === \'function\') {\n value = onResolve(value);\n }\n\n return resolve(value);\n }\n }; // Store the rejecter\n\n\n rej = function rej(value) {\n if (status.pending) {\n status.rejected = true;\n status.pending = false;\n\n if (typeof onReject === \'function\') {\n value = onReject(value);\n }\n\n return reject(value);\n }\n }; // Store the canceler\n\n\n cancel = function cancel(value) {\n if (status.pending) {\n status.canceled = true;\n status.pending = false;\n\n if (typeof onCancel === \'function\') {\n value = onCancel(value);\n }\n\n return resolve(value);\n }\n }; // Run the executable with custom resolver and rejecter\n\n\n executable(res, rej, cancel);\n });\n _this._status = status;\n _this._resolve = res;\n _this._reject = rej;\n _this._cancel = cancel;\n _this._executable = executable;\n return _this;\n }\n /**\r\n * Gets the resolved state of the promise.\r\n *\r\n * @readonly\r\n */\n\n\n _createClass(Deferred, [{\n key: "resolved",\n get: function get() {\n return this._status.resolved;\n }\n /**\r\n * Gets the rejected state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "rejected",\n get: function get() {\n return this._status.rejected;\n }\n /**\r\n * Gets the canceled state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "canceled",\n get: function get() {\n return this._status.canceled;\n }\n /**\r\n * Gets the pending state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "pending",\n get: function get() {\n return this._status.pending;\n }\n /**\r\n * Force the promise to resolve.\r\n *\r\n * @param {any=} value - Value to pass to the resolver.\r\n *\r\n * @returns {any} - The return value of the resolver function.\r\n */\n\n }, {\n key: "resolve",\n value: function resolve(value) {\n return this._resolve(value);\n }\n /**\r\n * Force the promise to reject.\r\n *\r\n * @param {any=} value - Value to pass to the rejecter.\r\n *\r\n * @returns {any} - The return value of the rejecter function.\r\n */\n\n }, {\n key: "reject",\n value: function reject(value) {\n return this._reject(value);\n }\n /**\r\n * Force the promise to resolve and set the canceled state to true.\r\n *\r\n * @param {any=} value - Value to pass to the canceller.\r\n *\r\n * @returns {any} - The return value of the canceller function.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel(value) {\n return this._cancel(value);\n }\n /**\r\n * Run the promise function to try to resolve the promise. Promise must be\r\n * pending.\r\n *\r\n * @param {...any} args - Optional arguments to pass after resolve and reject.\r\n */\n\n }, {\n key: "execute",\n value: function execute() {\n if (this.pending) {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this._executable.apply(this, [this._resolve, this._reject, this._cancel].concat(args));\n }\n }\n /**\r\n * Return a canceled deferred promise.\r\n *\r\n * @param {any=} value - Value to cancel the promise with.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }], [{\n key: "cancel",\n value: function cancel(value) {\n return new Deferred(function (_resolve, _reject, cancel) {\n cancel(value);\n });\n }\n /**\r\n * Return a new Deferred promise that will resolve or reject once all promises\r\n * in the input array have been resolved or one promise is canceled or rejected.\r\n * Promises in the array that are Deferred promises will be manually resolved,\r\n * rejected or canceled when calling resolve, reject or cancel on the return promise.\r\n *\r\n * @param {Array.} iterable - An iterable such as an array.\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'canceled\'.\r\n *\r\n * @returns Deferred\r\n */\n\n }, {\n key: "all",\n value: function all(iterable, onResolve, onReject, onCancel) {\n if (iterable == null || typeof iterable[Symbol.iterator] !== \'function\') {\n var e = "Cannot execute Deferred.all. First argument must be iterable.";\n\n if (typeof onReject === \'function\') {\n e = onReject(e);\n }\n\n return Deferred.reject(e);\n }\n\n var array = _toConsumableArray(iterable);\n\n var deferred = array.filter(function (item) {\n return item instanceof Deferred;\n });\n var result = new Deferred(undefined, function (resolveValue) {\n deferred.forEach(function (item) {\n item.resolve(resolveValue);\n });\n deferred.length = 0;\n\n if (typeof onResolve === \'function\') {\n return onResolve(resolveValue);\n } else {\n return resolveValue;\n }\n }, function (error) {\n deferred.forEach(function (item) {\n item.reject(error);\n });\n deferred.length = 0;\n\n if (typeof onReject === \'function\') {\n return onReject(error);\n } else {\n return error;\n }\n }, function (cancelValue) {\n deferred.forEach(function (item) {\n item.cancel(cancelValue);\n });\n deferred.length = 0;\n\n if (typeof onCancel === \'function\') {\n return onCancel(cancelValue);\n } else {\n return cancelValue;\n }\n });\n var numItems = array.length;\n var itemTracker = {\n failed: false,\n numResolved: 0,\n resolutions: []\n };\n array.forEach(function (item, index) {\n if (itemTracker.failed) {\n return;\n } else if (!(item instanceof Promise)) {\n itemTracker.resolutions[index] = item;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n\n return;\n }\n\n item.then(function (value) {\n if (!itemTracker.failed && !item.canceled) {\n itemTracker.resolutions[index] = value;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n } else if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.cancel(value);\n }\n }, function (error) {\n if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.reject(error);\n }\n });\n });\n return result;\n }\n }]);\n\n return Deferred;\n}( /*#__PURE__*/_wrapNativeSuper(Promise));\n\n/* harmony default export */ var core_Deferred = (Deferred);\n// CONCATENATED MODULE: ./src/core/Utils.js\nfunction Utils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Utils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Utils_createClass(Constructor, protoProps, staticProps) { if (protoProps) Utils_defineProperties(Constructor.prototype, protoProps); if (staticProps) Utils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * A collection of useful generic functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar Utils_Utils = /*#__PURE__*/function () {\n function Utils() {\n Utils_classCallCheck(this, Utils);\n }\n\n Utils_createClass(Utils, null, [{\n key: "createId",\n value:\n /**\r\n * @static\r\n *\r\n * Generate a unique id\r\n *\r\n * @returns {String}\r\n */\n function createId() {\n return \'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx\'.replace(/[xy]/g, function (c) {\n var randomNumber = Math.floor((Date.now() + Math.random() * 16) % 16);\n\n if (c === \'x\') {\n return randomNumber.toString(16);\n } // Set bit 6 and 7 to 0 and 1\n\n\n return (randomNumber & 0x3 | 0x8).toString(16);\n });\n }\n /**\r\n * @static\r\n *\r\n * Check a name string against an array of strings to determine if it is unique.\r\n * If it isn\'t, append incremented trailing integers to the end of the name\r\n * until it is unique.\r\n *\r\n * @param {string} name - String name to make unique.\r\n * @param {Array.=} nameArray - Array of string names to check agains.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getUniqueName",\n value: function getUniqueName(name) {\n var nameArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n // If the name isn\'t in the array return it right away\n if (!nameArray.includes(name)) {\n return name;\n }\n\n var nameSet = new Set(nameArray); // Separate the name into string and trailing numbers\n\n var matchGroup = name.match(/\\d*$/);\n var index = matchGroup.index;\n var baseName = name.slice(0, index);\n var increment = Number(matchGroup[0]); // Find the highest trailing number value for the base of the name\n\n nameSet.forEach(function (setName) {\n var setMatchGroup = setName.match(/\\d*$/);\n\n if (setName.slice(0, setMatchGroup.index) === baseName) {\n var setIncrement = Number(setMatchGroup[0]);\n\n if (setIncrement > increment) {\n increment = setIncrement;\n }\n }\n }); // Increment the highest trailing number and append to the name\n\n return "".concat(baseName).concat(increment + 1);\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. Pass delta time in milliseconds to the deferred promise\'s execute\r\n * method in an update loop to progress time.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait() {\n var seconds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref.onFinish,\n onProgress = _ref.onProgress,\n onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure seconds is numeric\n if (typeof seconds !== \'number\') {\n console.warn("Invalid seconds value ".concat(seconds, " for wait. Defaulting to 0."));\n seconds = 0;\n } // Resolve immediately if the wait time is not greater than 0\n\n\n if (seconds <= 0) {\n if (typeof onFinish === \'function\') {\n onFinish();\n }\n\n return core_Deferred.resolve();\n }\n\n var currentTime = 0;\n var totalTime = seconds * 1000; // convert to milliseconds\n // Executable to pass to Deferred, meant to be run in an update loop\n\n var onUpdate = function onUpdate(resolve, reject, _cancel) {\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n if (typeof deltaTime !== \'number\') {\n var e = new Error("Invalid property wait deltaTime. DeltaTime must be a number.");\n reject(e);\n return;\n } // Make sure time has passed\n\n\n if (deltaTime === 0) {\n return;\n } // Signal progress\n\n\n currentTime += deltaTime;\n\n if (currentTime < 0) {\n currentTime = 0;\n }\n\n if (typeof onProgress === \'function\') {\n onProgress(Math.min(currentTime / totalTime, 1));\n } // Signal completion once time is up\n\n\n if (currentTime >= totalTime) {\n resolve();\n }\n };\n\n return new core_Deferred(onUpdate, onFinish, onError, onCancel);\n }\n /**\r\n * Get a random float number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {float}\r\n */\n\n }, {\n key: "getRandomFloat",\n value: function getRandomFloat(min, max) {\n return Math.random() * (max - min) + min;\n }\n /**\r\n * Get a random integer number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {integer}\r\n */\n\n }, {\n key: "getRandomInt",\n value: function getRandomInt(min, max) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min)) + min;\n }\n }]);\n\n return Utils;\n}();\n\n/* harmony default export */ var core_Utils = (Utils_Utils);\n// CONCATENATED MODULE: ./src/core/MathUtils.js\nfunction MathUtils_toConsumableArray(arr) { return MathUtils_arrayWithoutHoles(arr) || MathUtils_iterableToArray(arr) || MathUtils_unsupportedIterableToArray(arr) || MathUtils_nonIterableSpread(); }\n\nfunction MathUtils_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction MathUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return MathUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return MathUtils_arrayLikeToArray(o, minLen); }\n\nfunction MathUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction MathUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return MathUtils_arrayLikeToArray(arr); }\n\nfunction MathUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction MathUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction MathUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction MathUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) MathUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) MathUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\nvar RadianToDegree = 180 / Math.PI;\nvar DegreeToRadian = Math.PI / 180;\n/**\n * A collection of useful math functions.\n *\n * @hideconstructor\n */\n\nvar MathUtils = /*#__PURE__*/function () {\n function MathUtils() {\n MathUtils_classCallCheck(this, MathUtils);\n }\n\n MathUtils_createClass(MathUtils, null, [{\n key: "toDegrees",\n value:\n /**\n * Convert the given angle from radians to degrees.\n *\n * @param {number} radians - Angle in radians.\n *\n * @returns {number} - Angle in degrees.\n */\n function toDegrees(radians) {\n return radians * RadianToDegree;\n }\n /**\n * Convert the given angle from degrees to radians.\n *\n * @param {number} degrees - Angle in degrees.\n *\n * @returns {number} - Angle in radians.\n */\n\n }, {\n key: "toRadians",\n value: function toRadians(degrees) {\n return degrees * DegreeToRadian;\n }\n /**\n * Linearly interpolate between two values.\n *\n * @param {number} from - Start value.\n * @param {number} to - Target value.\n * @param {number} factor - 0-1 amount to interpolate between from and to.\n *\n * @returns {number}\n */\n\n }, {\n key: "lerp",\n value: function lerp(from, to, factor) {\n return from + (to - from) * factor;\n }\n /**\n * Clamp a number between 2 values.\n *\n * @param {number} value - Value to clamp.\n * @param {number} [min=0] - Minumum value.\n * @param {number} [max=1] - Maximum value.\n *\n * @returns {number}\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n return Math.max(min, Math.min(value, max));\n }\n /**\n * Calculates the closest point on a given 2D line segement\n * from a given 2D point.\n *\n * @param {Array.} a - First point on line segment.\n * @param {Array.} b - Second point on line segment.\n * @param {Array.} p - 2D point.\n *\n * @returns {Array.}\n */\n\n }, {\n key: "closestPointOnLine",\n value: function closestPointOnLine(a, b, p) {\n var distSqr = MathUtils.distanceSquared(a, b); // Line segment is a single point\n\n if (distSqr === 0) {\n return a;\n }\n\n var t = ((p[0] - a[0]) * (b[0] - a[0]) + (p[1] - a[1]) * (b[1] - a[1])) / distSqr;\n\n var point = MathUtils_toConsumableArray(a);\n\n if (t > 1) {\n point = MathUtils_toConsumableArray(b);\n } else if (t > 0) {\n point = [a[0] + t * (b[0] - a[0]), a[1] + t * (b[1] - a[1])];\n }\n\n return point;\n }\n /**\n * Gets the distance squared for two 2D points.\n * @param {Array.} a - 2D point.\n * @param {Array.} b - 2D point.\n *\n * @returns {number}\n */\n\n }, {\n key: "distanceSquared",\n value: function distanceSquared(a, b) {\n return (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]);\n }\n /**\n * Triangulates a set of 2D points using an implementation\n * of the Bowyer-Watson incremental Delaunay triangulation.\n *\n * @param {Array.>} vertices - Array of 2D points.\n *\n * @returns {Array.>} - Array of triangle indices.\n */\n\n }, {\n key: "getDelaunayTriangulation",\n value: function getDelaunayTriangulation(vertices) {\n if (!vertices || vertices.length < 3) {\n throw new Error("Cannot get delaunay triangulation for points ".concat(vertices, ". Input must contain at least three points."));\n }\n\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n var maxX = Number.NEGATIVE_INFINITY;\n var maxY = Number.NEGATIVE_INFINITY;\n vertices.forEach(function (v) {\n minX = v[0] < minX ? v[0] : minX;\n minY = v[1] < minY ? v[1] : minY;\n maxX = v[0] > maxX ? v[0] : maxX;\n maxY = v[1] > maxY ? v[1] : maxY;\n });\n var dX = maxX - minX;\n var dY = maxY - minY;\n var midX = (minX + maxX) / 2;\n var midY = (minY + maxY) / 2;\n var dMax = dX > dY ? dX : dY;\n var superIndices = [vertices.length, vertices.length + 1, vertices.length + 2];\n var vertsWithSuper = [].concat(MathUtils_toConsumableArray(vertices), [[midX - 20 * dMax, midY - dMax], [midX, midY + 20 * dMax], [midX + 20 * dMax, midY - dMax]]);\n var superSortedIndices = MathUtils.sortPointsCCW(superIndices, vertsWithSuper);\n var superTriangle = {\n indices: superSortedIndices,\n edges: [[superSortedIndices[0], superSortedIndices[1]], [superSortedIndices[1], superSortedIndices[2]], [superSortedIndices[2], superSortedIndices[0]]]\n };\n var triangles = [superTriangle];\n vertsWithSuper.forEach(function (newVert, newIndex) {\n var invalidTriangles = [];\n triangles.forEach(function (triangle) {\n if (MathUtils.isPointInCircumCircle(vertsWithSuper[triangle.indices[0]], vertsWithSuper[triangle.indices[1]], vertsWithSuper[triangle.indices[2]], newVert)) {\n invalidTriangles.push(triangle);\n }\n });\n var boundingPoly = [];\n invalidTriangles.forEach(function (triangle) {\n triangle.edges.forEach(function (edge) {\n var count = 0;\n invalidTriangles.forEach(function (otherTriangle) {\n if (triangle !== otherTriangle) {\n otherTriangle.edges.forEach(function (otherEdge) {\n if (edge[0] === otherEdge[0] && edge[1] === otherEdge[1] || edge[1] === otherEdge[0] && edge[0] === otherEdge[1]) {\n count += 1;\n }\n });\n }\n });\n if (count === 0) boundingPoly.push(edge);\n });\n });\n invalidTriangles.forEach(function (triangle) {\n triangles.splice(triangles.indexOf(triangle), 1);\n });\n boundingPoly.forEach(function (edge) {\n var sortedIndices = MathUtils.sortPointsCCW([edge[0], edge[1], newIndex], vertsWithSuper);\n triangles.push({\n indices: sortedIndices,\n edges: [[sortedIndices[0], sortedIndices[1]], [sortedIndices[1], sortedIndices[2]], [sortedIndices[2], sortedIndices[0]]]\n });\n });\n });\n var trianglesToRemove = [];\n triangles.forEach(function (triangle) {\n triangle.indices.forEach(function (index) {\n if (superIndices.includes(index)) {\n trianglesToRemove.push(triangle);\n }\n });\n });\n trianglesToRemove.forEach(function (triangle) {\n var index = triangles.indexOf(triangle);\n\n if (index !== -1) {\n triangles.splice(index, 1);\n }\n });\n return triangles.map(function (triangle) {\n return triangle.indices;\n });\n }\n /**\n * Determines if a given 2D point is within the cicrumcircle\n * defined by three 2D points. The triangle points must be in\n * counter-clockwise order a -> b -> c.\n *\n * @param {Array.} a - First triangle point.\n * @param {Array.} b - Second triangle point.\n * @param {Array.} c - Third triangle point.\n * @param {Array.} p - 2D point.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "isPointInCircumCircle",\n value: function isPointInCircumCircle(a, b, c, p) {\n var ax = a[0] - p[0];\n var ay = a[1] - p[1];\n var bx = b[0] - p[0];\n var by = b[1] - p[1];\n var cx = c[0] - p[0];\n var cy = c[1] - p[1];\n return (ax * ax + ay * ay) * (bx * cy - cx * by) - (bx * bx + by * by) * (ax * cy - cx * ay) + (cx * cx + cy * cy) * (ax * by - bx * ay) > 0;\n }\n /**\n * Determines if a given 2D point is within a given triangle.\n *\n * @param {Array.} a - First triangle point.\n * @param {Array.} b - Second triangle point.\n * @param {Array.} c - Third triangle point.\n * @param {Array.} p - 2D point.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "isPointInTriangle",\n value: function isPointInTriangle(a, b, c, p) {\n var denom = (b[1] - c[1]) * (a[0] - c[0]) + (c[0] - b[0]) * (a[1] - c[1]);\n var aVal = ((b[1] - c[1]) * (p[0] - c[0]) + (c[0] - b[0]) * (p[1] - c[1])) / denom;\n var bVal = ((c[1] - a[1]) * (p[0] - c[0]) + (a[0] - c[0]) * (p[1] - c[1])) / denom;\n var cVal = 1 - aVal - bVal;\n return aVal >= 0 && aVal <= 1 && bVal >= 0 && bVal <= 1 && cVal >= 0 && cVal <= 1;\n }\n /**\n * Gets the sorted indices of a given set of 2D points in\n * counter-clockwise order.\n *\n * @param {Array.} indices - List of indices.\n * @param {Array.>} vertices - List of 2D points.\n *\n * @returns {Array.>} - List of sorted indices.\n */\n\n }, {\n key: "sortPointsCCW",\n value: function sortPointsCCW(indices, vertices) {\n var centroid = [0, 0];\n indices.forEach(function (index) {\n centroid[0] += vertices[index][0];\n centroid[1] += vertices[index][1];\n });\n centroid[0] /= indices.length;\n centroid[1] /= indices.length;\n indices.sort(function (a, b) {\n var bVal = Math.atan2(vertices[b][1] - centroid[1], vertices[b][0] - centroid[0]);\n var aVal = Math.atan2(vertices[a][1] - centroid[1], vertices[a][0] - centroid[0]);\n return aVal - bVal;\n });\n return indices;\n }\n /**\n * Cacluates the area of a triangle\n * @param {Array.} a - First triangle point.\n * @param {Array.} b - Second triangle point.\n * @param {Array.} c - Third triangle point.\n *\n * @returns {number}\n */\n\n }, {\n key: "triangleArea",\n value: function triangleArea(a, b, c) {\n return Math.abs((a[0] * (b[1] - c[1]) + b[0] * (c[1] - a[1]) + c[0] * (a[1] - b[1])) * 0.5);\n }\n /**\n * Return the magnitude of a given vector array.\n *\n * @param {Array.} vector - Array consisting of numbers.\n *\n * @returns {number}\n */\n\n }, {\n key: "getVectorMagnitude",\n value: function getVectorMagnitude(vector) {\n if (!(vector instanceof Array)) {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". Input must be an Array numbers."));\n }\n\n var reducer = function reducer(accumulator, currentValue) {\n if (typeof currentValue !== \'number\') {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". All items in the input Array must be numbers."));\n }\n\n return accumulator + Math.pow(currentValue, 2);\n };\n\n return Math.sqrt(vector.reduce(reducer, 0));\n }\n /**\n * Return the dot product between two vectors.\n *\n * @param {Array.} vectorA - Array consisting of numbers.\n * @param {Array.} vectorB - Array consisting of numbers.\n *\n * @returns {number}\n */\n\n }, {\n key: "getDotProduct",\n value: function getDotProduct(vectorA, vectorB) {\n if (!(vectorA instanceof Array) || !(vectorB instanceof Array) || vectorA.length !== vectorB.length) {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Inputs must be vectors of the same length."));\n }\n\n var result = 0;\n vectorA.forEach(function (valueA, index) {\n var valueB = vectorB[index];\n\n if (typeof valueA !== \'number\' || typeof valueB !== \'number\') {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Vectors must only consist of numeric values."));\n }\n\n result += valueA * valueB;\n });\n return result;\n }\n /**\n * Return the angle in radians between vectorA and vectorB.\n *\n * @param {Array.} vectorA - Array consisting of numbers.\n * @param {Array.} vectorB - Array consisting of numbers.\n *\n * @returns {number}\n */\n\n }, {\n key: "getAngleBetween",\n value: function getAngleBetween(vectorA, vectorB) {\n var normalA = this.normalizeVector(MathUtils_toConsumableArray(vectorA));\n var normalB = this.normalizeVector(MathUtils_toConsumableArray(vectorB));\n var dot = this.getDotProduct(normalA, normalB);\n return Math.acos(this.clamp(dot, -1, 1));\n }\n /**\n * Multiply a 3x3 rotation matrix with a vector3.\n *\n * @param {Array.} vector3 - Array consisting of 3 numbers representing\n * a direction vector.\n * @param {Array.} matrix3 - An array of 9 numbers representing a row\n * major rotation matrix.\n *\n * @returns {Array.} - An array of 3 numbers representing the new direction\n * of the vector.\n */\n\n }, {\n key: "rotateVector",\n value: function rotateVector(vector3, matrix3) {\n if (!(vector3 instanceof Array) || vector3.length !== 3 || !vector3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input vector must be an array of 3 numbers."));\n }\n\n if (!(matrix3 instanceof Array) || matrix3.length !== 9 || !matrix3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input matrix3 must be an array of 9 numbers."));\n }\n\n var x = matrix3[0] * vector3[0] + matrix3[3] * vector3[1] + matrix3[6] * vector3[2];\n var y = matrix3[1] * vector3[0] + matrix3[4] * vector3[1] + matrix3[7] * vector3[2];\n var z = matrix3[2] * vector3[0] + matrix3[5] * vector3[1] + matrix3[8] * vector3[2];\n return [x, y, z];\n }\n /**\n * Normalize a given vector array.\n *\n * @param {Array.} vector - Array consisting of numbers.\n *\n * @returns {Array.} The original vector with normalized values, for chaining.\n */\n\n }, {\n key: "normalizeVector",\n value: function normalizeVector(vector) {\n var magnitude = this.getVectorMagnitude(vector);\n\n if (magnitude === 0) {\n vector.fill(0);\n } else {\n vector.forEach(function (value, index) {\n vector[index] = value / magnitude;\n });\n }\n\n return vector;\n }\n /**\n * Extract the 3x3 rotation matrix from a given 4x4 transformation matrix.\n *\n * @param {Array.} matrix4 - An array of 16 numbers representing a row\n * major transformation matrix.\n *\n * @returns {Array.} - An array of 9 numbers representing a row major\n * rotation matrix.\n */\n\n }, {\n key: "getRotationMatrix",\n value: function getRotationMatrix(matrix4) {\n if (!(matrix4 instanceof Array) || matrix4.length !== 16 || !matrix4.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot convert matrix ".concat(matrix4, " to a rotation matrix. Input matrix must be an array of 16 numbers."));\n } // Extract scale\n\n\n var scaleX = 1 / (this.getVectorMagnitude(matrix4.slice(0, 4)) || 1);\n var scaleY = 1 / (this.getVectorMagnitude(matrix4.slice(4, 8)) || 1);\n var scaleZ = 1 / (this.getVectorMagnitude(matrix4.slice(8, 12)) || 1);\n return [matrix4[0] * scaleX, matrix4[1] * scaleX, matrix4[2] * scaleX, matrix4[4] * scaleY, matrix4[5] * scaleY, matrix4[6] * scaleY, matrix4[8] * scaleZ, matrix4[9] * scaleZ, matrix4[10] * scaleZ];\n }\n /**\n * Return an array containing the spherical coordinates of the given cartesian\n * xyz coordinates.\n *\n * @private\n *\n * @param {number} x - Position along the x axis.\n * @param {number} y - Position along the y axis.\n * @param {number} z - Position along the z axis.\n *\n * @returns {Array.} - An array consisting of three numberes where index\n * 0 represents the radius, index 1 represents the vertical/polar angle in radians\n * and index 2 represents the horizontal/azimuthal angle in radians.\n */\n\n }, {\n key: "cartesianToSpherical",\n value: function cartesianToSpherical(x, y, z) {\n var r = this.getVectorMagnitude([x, y, z]); // Return identity if the vector has no length\n\n if (r === 0) {\n return [0, 0, 0];\n }\n\n return [r, Math.acos(this.clamp(y / r, -1, 1)), Math.atan2(x, z)];\n }\n /**\n * Gradually change a value of a numeric property towards a goal over time using\n * a critically damped spring function.\n *\n * @param {number} currentValue - The starting value.\n * @param {number} targetValue- The goal value.\n * @param {Array.} [valueStore = [0, 0]] - An Array consisting of two\n * numbers where the first number holds the result value and the second holds\n * the velocity that resulted in that value. The same array should be provided\n * with each call to this function.\n * @param {number} [deltaTime = 1e-7] - The time since the last call to this function\n * in seconds.\n * @param {number} [smoothTime = 0.3] - The approximate amount of time in seconds\n * it should take to reach the target value.\n * @param {number} [maxSpeed = 1e7] - A clamping value for the maximum speed the\n * value can change.\n *\n * @returns {Array.} - The valueStore array.\n */\n\n }, {\n key: "dampValue",\n value: function dampValue(currentValue, targetValue) {\n var valueStore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0, 0];\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1e-7;\n var smoothTime = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0.3;\n var maxSpeed = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1e7;\n smoothTime = Math.max(0.0001, smoothTime);\n deltaTime = Math.max(1e-7, deltaTime); // Find the delta between values and use it to estimate the previous value\n\n var clampTime = maxSpeed * smoothTime;\n var deltaValue = currentValue - targetValue;\n var clampDeltaValue = this.clamp(deltaValue, -clampTime, clampTime);\n var lastValue = currentValue - clampDeltaValue; // Calculate damping factors\n\n var d1 = 2 / smoothTime;\n var d2 = d1 * deltaTime;\n var d3 = 1 / (1 + d2 + 0.5 * Math.pow(d2, 2) + 0.25 * Math.pow(d2, 3));\n var d4 = (valueStore[1] + d1 * clampDeltaValue) * deltaTime; // Damp the target value and update the velocity\n\n valueStore[0] = lastValue + (clampDeltaValue + d4) * d3;\n valueStore[1] = (valueStore[1] - d1 * d4) * d3; // Prevent overshooting\n\n if (targetValue - currentValue > 0 === valueStore[0] > targetValue) {\n valueStore[0] = targetValue;\n valueStore[1] = (valueStore[0] - targetValue) / deltaTime;\n }\n\n return valueStore;\n }\n }]);\n\n return MathUtils;\n}();\n\n/* harmony default export */ var core_MathUtils = (MathUtils);\n// CONCATENATED MODULE: ./src/core/animpack/Easing.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * @typedef {Object} EasingObject Object containing easing functions\n * @property {Function} In - Easing \'In\' function. Should use the signature (k:number):number.\n * @property {Function} Out - Easing \'Out\' function. Should use the signature (k:number):number.\n * @property {Function} InOut - Easing \'InOut\' function. Should use the signature (k:number):number.\n */\n\n/**\n * Linear Easing\n * @type {EasingObject}\n */\nvar Linear = {\n None: function None(k) {\n return k;\n },\n In: function In(k) {\n return k;\n },\n Out: function Out(k) {\n return k;\n },\n InOut: function InOut(k) {\n return k;\n }\n};\n/**\n * Quadratic Easing\n * @type {EasingObject}\n */\n\nvar Quadratic = {\n In: function In(k) {\n return k * k;\n },\n Out: function Out(k) {\n return k * (2 - k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k;\n }\n\n return -0.5 * (--k * (k - 2) - 1);\n }\n};\n/**\n * Cubic Easing\n * @type {EasingObject}\n */\n\nvar Cubic = {\n In: function In(k) {\n return k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k + 2);\n }\n};\n/**\n * Quartic Easing\n * @type {EasingObject}\n */\n\nvar Quartic = {\n In: function In(k) {\n return k * k * k * k;\n },\n Out: function Out(k) {\n return 1 - --k * k * k * k;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k;\n }\n\n k -= 2;\n return -0.5 * (k * k * k * k - 2);\n }\n};\n/**\n * Quintic Easing\n * @type {EasingObject}\n */\n\nvar Quintic = {\n In: function In(k) {\n return k * k * k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k * k * k + 2);\n }\n};\n/**\n * Sinusoidal Easing\n * @type {EasingObject}\n */\n\nvar Sinusoidal = {\n In: function In(k) {\n return 1 - Math.cos(k * Math.PI / 2);\n },\n Out: function Out(k) {\n return Math.sin(k * Math.PI / 2);\n },\n InOut: function InOut(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n};\n/**\n * Exponential Easing\n * @type {EasingObject}\n */\n\nvar Exponential = {\n In: function In(k) {\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n Out: function Out(k) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n InOut: function InOut(k) {\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n k *= 2;\n\n if (k < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n }\n};\n/**\n * Circular Easing\n * @type {EasingObject}\n */\n\nvar Circular = {\n In: function In(k) {\n return 1 - Math.sqrt(1 - k * k);\n },\n Out: function Out(k) {\n return Math.sqrt(1 - --k * k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n\n k -= 2;\n return 0.5 * (Math.sqrt(1 - k * k) + 1);\n }\n};\n/**\n * Elastic Easing\n * @type {EasingObject}\n */\n\nvar Elastic = {\n In: function In(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k -= 1;\n return -(a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n Out: function Out(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;\n },\n InOut: function InOut(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k *= 2;\n\n if (k < 1) {\n k -= 1;\n return -0.5 * (a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n\n k -= 1;\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n }\n};\n/**\n * Back Easing\n * @type {EasingObject}\n */\n\nvar Back = {\n In: function In(k) {\n var s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n Out: function Out(k) {\n var s = 1.70158;\n return --k * k * ((s + 1) * k + s) + 1;\n },\n InOut: function InOut(k) {\n var s = 1.70158 * 1.525;\n k *= 2;\n\n if (k < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n\n k -= 2;\n return 0.5 * (k * k * ((s + 1) * k + s) + 2);\n }\n};\n/**\n * Bounce Easing\n * @type {EasingObject}\n */\n\nvar Bounce = {\n In: function In(k) {\n return 1 - Bounce.Out(1 - k);\n },\n Out: function Out(k) {\n if (k < 1 / 2.75) {\n return 7.5625 * k * k;\n } else if (k < 2 / 2.75) {\n k -= 1.5;\n return 7.5625 * (k / 2.75) * k + 0.75;\n } else if (k < 2.5 / 2.75) {\n k -= 2.25;\n return 7.5625 * (k / 2.75) * k + 0.9375;\n }\n\n k -= 2.625;\n return 7.5625 * (k / 2.75) * k + 0.984375;\n },\n InOut: function InOut(k) {\n if (k < 0.5) {\n return Bounce.In(k * 2) * 0.5;\n }\n\n return Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n }\n};\n// CONCATENATED MODULE: ./src/core/Messenger.js\nfunction Messenger_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Messenger_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Messenger_createClass(Constructor, protoProps, staticProps) { if (protoProps) Messenger_defineProperties(Constructor.prototype, protoProps); if (staticProps) Messenger_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/**\n * Class that can execute functions when local messages are received. Local messages\n * are prefixed with the instance\'s id.\n *\n * @alias core/Messenger\n *\n * @property {core/Messenger} GlobalMessenger - A messenger that can be used for\n * global messaging. When using static listen and emit methods they are executed\n * on this messenger.\n * @property {Object} EVENTS - Built-in events that the Messenger emits.\n */\n\nvar Messenger_Messenger = /*#__PURE__*/function () {\n /**\n * @constructor\n *\n * @param {any=} id - Id for the object. If none is provided a new id will\n * be created. Id should be able to be represented as a string.\n */\n function Messenger(id) {\n Messenger_classCallCheck(this, Messenger);\n\n this._id = id !== undefined ? id : core_Utils.createId();\n this._dispatcher = window;\n this._callbacks = {};\n this._eventListeners = {};\n }\n /**\n * Gets the string id of the object.\n *\n * @readonly\n * @type {string}\n */\n\n\n Messenger_createClass(Messenger, [{\n key: "id",\n get: function get() {\n return this._id;\n }\n /**\n * Prefix a message with the instance id.\n *\n * @private\n *\n * @param {string} message\n *\n * @returns {string}\n */\n\n }, {\n key: "_createLocalMessage",\n value: function _createLocalMessage(message) {\n return "".concat(this.id, ".").concat(message);\n }\n /**\n * Return a function that will call a callback function and supply the event\'s\n * detail property as an argument.\n *\n * @private\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\n\n }, {\n key: "_createListener",\n value: function _createListener(callback) {\n return function (e) {\n var value;\n\n if (e.detail !== null) {\n value = e.detail;\n }\n\n callback(value);\n };\n }\n /**\n * Create an event object and send it to listeners.\n *\n * @private\n *\n * @param {string} message - Event type name.\n * @param {any=} value - Value to send to listeners.\n *\n * @returns {CustomEvent}\n */\n\n }, {\n key: "_createEvent",\n value: function _createEvent(message, value) {\n return new CustomEvent(message, {\n detail: value\n });\n }\n /**\n * Register an event.\n *\n * @private\n *\n * @param {string} message - Event type name.\n * @param {Function} listener - A listener function generated using _createListener.\n */\n\n }, {\n key: "_addListener",\n value: function _addListener(message, listener) {\n this._dispatcher.addEventListener(this._createLocalMessage(message), listener);\n }\n /**\n * Unregister an event.\n *\n * @private\n *\n * @param {string} message - Event type name.\n * @param {Function} listener - A listener function generated using _createListener.\n */\n\n }, {\n key: "_removeListener",\n value: function _removeListener(message, listener) {\n this._dispatcher.removeEventListener(this._createLocalMessage(message), listener);\n }\n /**\n * Execute a function when a message is received for this object.\n *\n * @param {string} message - The message to listen for.\n * @param {Function} callback - Function to execute once the message is received.\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n if (typeof callback !== \'function\') {\n throw new Error("Cannot add listener for ".concat(message, " on ").concat(this.id, ". Callback must be a function."));\n }\n\n if (this._callbacks[message] === undefined) {\n this._callbacks[message] = [];\n this._eventListeners[message] = [];\n }\n\n var listener = this._createListener(callback);\n\n this._callbacks[message].push(callback);\n\n this._eventListeners[message].push(listener);\n\n this._addListener(message, listener);\n }\n /**\n * Prevent a function from being executed when a message is received for this\n * object.\n *\n * @param {string} message - The message to stop listening for.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for the message.\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n if (this._callbacks[message] === undefined) {\n return;\n } else if (callback === undefined) {\n // If no callback was defined, call stopListening on all callbacks for the message\n for (var i = this._callbacks[message].length - 1; i > -1; i--) {\n this.stopListening(message, this._callbacks[message][i]);\n }\n\n return;\n } // If a callback was defined, make sure it\'s a listener\n\n\n var index = this._callbacks[message].indexOf(callback);\n\n if (index === -1) {\n return;\n }\n\n var listener = this._eventListeners[message][index];\n\n this._removeListener(message, listener);\n\n this._callbacks[message].splice(index, 1);\n\n this._eventListeners[message].splice(index, 1);\n\n if (this._callbacks[message].length === 0) {\n delete this._callbacks[message];\n delete this._eventListeners[message];\n }\n }\n /**\n * De-register callback(s) from being executed when messages matching the given\n * regular expression are received.\n *\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for messages matching the regular expression.\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this = this;\n\n var messages = Object.keys(this._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this.stopListening(message, callback);\n });\n }\n /**\n * Prevent any functions from being executed when any message is received for\n * this object.\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n var messages = Object.keys(this._callbacks);\n\n for (var i = messages.length - 1; i > -1; i--) {\n this.stopListening(messages[i]);\n }\n }\n /**\n * Send a message, causing listener functions for the message on this object\n * to be executed.\n *\n * @param {string} message - The message to emit.\n * @param {any=} value - Optional argument to pass to listener callbacks.\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n if (this._callbacks[message] === undefined) {\n return;\n }\n\n message = this._createLocalMessage(message);\n\n var event = this._createEvent(message, value);\n\n this._dispatcher.dispatchEvent(event);\n }\n /**\n * Execute a function when a message is received for the global Messenger instance.\n *\n * @static\n *\n * @param {string} message - The message to listen for.\n * @param {Function} callback - Function to execute once the message is received.\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback, messenger) {\n this.GlobalMessenger.listenTo(message, callback, messenger);\n }\n /**\n * Prevent a function from being executed when a message is received for the\n * global Messenger instance.\n *\n * @static\n *\n * @param {string} message - The message to stop listening for.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for the message.\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n this.GlobalMessenger.stopListening(message, callback);\n }\n /**\n * De-register callback(s) from being executed on the global messengerr instance\n * when messages matching the given regular expression are received.\n *\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for messages matching the regular expression.\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this2 = this;\n\n var messages = Object.keys(this.GlobalMessenger._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this2.stopListening(message, callback);\n });\n }\n /**\n * Prevent any functions from being executed when any message is received for\n * the global Messenger instance.\n *\n * @static\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n this.GlobalMessenger.stopListeningToAll();\n }\n /**\n * Send a message, causing listener functions for the message on the global Messenger\n * instance to be executed.\n *\n * @static\n *\n * @param {string} message - The message to emit.\n * @param {any=} value - Optional argument to pass to listener callbacks.\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n this.GlobalMessenger.emit(message, value);\n }\n }]);\n\n return Messenger;\n}();\n\nObject.defineProperties(Messenger_Messenger, {\n GlobalMessenger: {\n value: new Messenger_Messenger(),\n writable: false\n },\n EVENTS: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_Messenger = (Messenger_Messenger);\n// CONCATENATED MODULE: ./src/three.js/Messenger.js\nfunction Messenger_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Messenger_typeof = function _typeof(obj) { return typeof obj; }; } else { Messenger_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Messenger_typeof(obj); }\n\nfunction three_js_Messenger_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction three_js_Messenger_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction three_js_Messenger_createClass(Constructor, protoProps, staticProps) { if (protoProps) three_js_Messenger_defineProperties(Constructor.prototype, protoProps); if (staticProps) three_js_Messenger_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Messenger_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Messenger_setPrototypeOf(subClass, superClass); }\n\nfunction Messenger_setPrototypeOf(o, p) { Messenger_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Messenger_setPrototypeOf(o, p); }\n\nfunction Messenger_createSuper(Derived) { var hasNativeReflectConstruct = Messenger_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Messenger_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Messenger_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Messenger_possibleConstructorReturn(this, result); }; }\n\nfunction Messenger_possibleConstructorReturn(self, call) { if (call && (Messenger_typeof(call) === "object" || typeof call === "function")) { return call; } return Messenger_assertThisInitialized(self); }\n\nfunction Messenger_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Messenger_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; } }\n\nfunction Messenger_getPrototypeOf(o) { Messenger_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Messenger_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @extends core/Messenger\r\n * @alias three.js/Messenger\r\n */\n\nvar three_js_Messenger_Messenger = /*#__PURE__*/function (_CoreMessenger) {\n Messenger_inherits(Messenger, _CoreMessenger);\n\n var _super = Messenger_createSuper(Messenger);\n\n /**\r\n * @constructor\r\n *\r\n * @param {any=} id - Id for the object. If none is provided a new id will\r\n * be created. Id should be able to be represented as a string.\r\n */\n function Messenger(id) {\n var _this;\n\n three_js_Messenger_classCallCheck(this, Messenger);\n\n _this = _super.call(this, id);\n _this._dispatcher = Messenger_assertThisInitialized(_this);\n return _this;\n }\n\n three_js_Messenger_createClass(Messenger, [{\n key: "_createEvent",\n value: function _createEvent(message, value) {\n return {\n detail: value,\n type: message\n };\n }\n }]);\n\n return Messenger;\n}(core_Messenger); // Assign Three.js EventDispatcher functionality to the Messenger class\n\n\nObject.assign(three_js_Messenger_Messenger.prototype, THREE.EventDispatcher.prototype);\nObject.defineProperty(three_js_Messenger_Messenger, \'GlobalMessenger\', {\n value: new three_js_Messenger_Messenger(),\n writable: false\n});\n/* harmony default export */ var three_js_Messenger = (three_js_Messenger_Messenger);\n// CONCATENATED MODULE: ./src/core/AbstractHostFeature.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || AbstractHostFeature_unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction AbstractHostFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractHostFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractHostFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractHostFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractHostFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractHostFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractHostFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractHostFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractHostFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Base class for all host features. Keeps a reference to the host object managing\r\n * the feature.\r\n *\r\n * @abstract\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.update=onUpdate] - Message that is emitted after\r\n * each call to [update]{@link AbstractHostFeature#update}.\r\n * @property {Object} SERVICES - Any AWS services that are necessary for the\r\n * feature to function.\r\n */\n\nvar AbstractHostFeature_AbstractHostFeature = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - The HostObject managing the feature.\r\n */\n function AbstractHostFeature(host) {\n AbstractHostFeature_classCallCheck(this, AbstractHostFeature);\n\n this._host = host;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n */\n\n\n AbstractHostFeature_createClass(AbstractHostFeature, [{\n key: "installApi",\n value: function installApi() {\n var _this = this;\n\n var events = {};\n var api = {\n EVENTS: events\n }; // Add the class name to event names\n\n Object.entries(this.constructor.EVENTS).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n name = _ref2[0],\n value = _ref2[1];\n\n events[name] = "".concat(_this.constructor.name, ".").concat(value);\n });\n this._host[this.constructor.name] = api;\n return api;\n }\n /**\r\n * Gets the host that manages the feature.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "host",\n get: function get() {\n return this._host;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "owner",\n get: function get() {\n return this._host.owner;\n }\n /**\r\n * Listen to a feature message from the host object.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n this._host.listenTo(message, callback);\n }\n /**\r\n * Listen to a feature message from the global messenger. Feature messages will\r\n * be prefixed with the class name of the feature.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "stopListening",\n value:\n /**\r\n * Stop listening to a message from the host object.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListening(message, callback) {\n this._host.stopListening(message, callback);\n }\n /**\r\n * Stop listening to a message from the global messenger.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningByRegexp",\n value:\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * host object.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListeningByRegexp(regexp, callback) {\n this._host.stopListeningByRegexp(regexp, callback);\n }\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * global messenger.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningToAll",\n value:\n /**\r\n * Stop listening to all messages.\r\n */\n function stopListeningToAll() {\n this._host.stopListeningToAll();\n }\n /**\r\n * Stop listening to all feature messages.\r\n */\n\n }, {\n key: "emit",\n value:\n /**\r\n * Emit feature messages from the host. Feature messages will be prefixed with\r\n * the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n function emit(message, value) {\n message = "".concat(this.constructor.name, ".").concat(message);\n\n this._host.emit(message, value);\n }\n /**\r\n * Emit feature messages from the global messenger. Feature messages will be prefixed\r\n * with the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n\n }, {\n key: "update",\n value:\n /**\r\n * Executes each time the host is updated.\r\n *\r\n * @param {number} deltaTime - Amount of time since the last host update was\r\n * called.\r\n */\n function update(deltaTime) {\n this.emit(this.constructor.EVENTS.update, deltaTime);\n }\n /**\r\n * Clean up once the feature is no longer in use. Remove the feature namespace\r\n * from the host and remove reference to the host.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n var _this2 = this;\n\n Object.keys(this._host[this.constructor.name]).forEach(function (name) {\n delete _this2._host[_this2.constructor.name][name];\n });\n delete this._host[this.constructor.name];\n delete this._host;\n }\n /**\r\n * Applies a sequence of mixin class factory functions to this class and\r\n * returns the result. Each function is expected to return a class that\r\n * extends the class it was given. The functions are applied in the order\r\n * that parameters are given, meaning that the first factory will\r\n * extend this base class.\r\n *\r\n * @param {...Function} mixinClassFactories Class factory functions that will\r\n * be applied.\r\n *\r\n * @returns {Class} A class that is the result of applying the factory functions.\r\n * The resulting class will always inherit from AbstractHostFeature.\r\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n three_js_Messenger.listenTo(message, callback);\n }\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n three_js_Messenger.stopListening(message, callback);\n }\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n regexp = new RegExp("^".concat(this.name, ".").concat(regexp.source.replace(/\\^/, \'\')));\n three_js_Messenger.stopListeningByRegexp(regexp, callback);\n }\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n three_js_Messenger.stopListeningByRegexp(new RegExp("^".concat(this.name, ".")));\n }\n }, {\n key: "emit",\n value: function emit(message, value) {\n message = "".concat(this.name, ".").concat(message);\n three_js_Messenger.emit(message, value);\n }\n }, {\n key: "mix",\n value: function mix() {\n var ResultClass = this;\n\n for (var _len = arguments.length, mixinClassFactories = new Array(_len), _key = 0; _key < _len; _key++) {\n mixinClassFactories[_key] = arguments[_key];\n }\n\n mixinClassFactories.forEach(function (mixinClassFactory) {\n ResultClass = mixinClassFactory(ResultClass);\n });\n return ResultClass;\n }\n }]);\n\n return AbstractHostFeature;\n}();\n\nObject.defineProperties(AbstractHostFeature_AbstractHostFeature, {\n EVENTS: {\n value: {\n update: \'onUpdate\'\n },\n writable: false\n },\n SERVICES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_AbstractHostFeature = (AbstractHostFeature_AbstractHostFeature);\n// CONCATENATED MODULE: ./src/core/HostObject.js\nfunction 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; }\n\nfunction _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; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction HostObject_construct(Parent, args, Class) { if (HostObject_isNativeReflectConstruct()) { HostObject_construct = Reflect.construct; } else { HostObject_construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) HostObject_setPrototypeOf(instance, Class.prototype); return instance; }; } return HostObject_construct.apply(null, arguments); }\n\nfunction HostObject_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { HostObject_typeof = function _typeof(obj) { return typeof obj; }; } else { HostObject_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return HostObject_typeof(obj); }\n\nfunction HostObject_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction HostObject_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction HostObject_createClass(Constructor, protoProps, staticProps) { if (protoProps) HostObject_defineProperties(Constructor.prototype, protoProps); if (staticProps) HostObject_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction HostObject_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) HostObject_setPrototypeOf(subClass, superClass); }\n\nfunction HostObject_setPrototypeOf(o, p) { HostObject_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return HostObject_setPrototypeOf(o, p); }\n\nfunction HostObject_createSuper(Derived) { var hasNativeReflectConstruct = HostObject_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = HostObject_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = HostObject_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return HostObject_possibleConstructorReturn(this, result); }; }\n\nfunction HostObject_possibleConstructorReturn(self, call) { if (call && (HostObject_typeof(call) === "object" || typeof call === "function")) { return call; } return HostObject_assertThisInitialized(self); }\n\nfunction HostObject_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction HostObject_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; } }\n\nfunction HostObject_getPrototypeOf(o) { HostObject_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return HostObject_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Object that manages access to all Host features. Contains a reference to\r\n * engine-specific visuals if applicable.\r\n *\r\n * @extends core/Messenger\r\n * @alias core/HostObject\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the Messenger emits.\r\n * @property {string} [EVENTS.update=\'onUpdate\'] - Message that is emitted after\r\n * each call to [update]{@link core/HostObject#update}.\r\n * @property {string} [EVENTS.addFeature=\'onAddFeature\'] - Message that is emitted\r\n * after each call to [addFeature]{@link core/HostObject#addFeature}.\r\n * @property {string} [EVENTS.removeFeature=\'onRemoveFeature\'] - Message that is emitted\r\n * after each call to [removeFeature]{@link core/HostObject#removeFeature}.\r\n */\n\nvar HostObject_HostObject = /*#__PURE__*/function (_Messenger) {\n HostObject_inherits(HostObject, _Messenger);\n\n var _super = HostObject_createSuper(HostObject);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the host.\r\n * @param {Object=} options.owner - Optional engine-specific owner of the host.\r\n */\n function HostObject() {\n var _this;\n\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$owner = _ref.owner,\n owner = _ref$owner === void 0 ? {} : _ref$owner;\n\n HostObject_classCallCheck(this, HostObject);\n\n // If an owner is specified, use its id for messaging\n _this = _super.call(this, owner.id);\n _this._owner = owner;\n _this._features = {};\n _this._waits = [];\n _this._lastUpdate = _this.now;\n return _this;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n * @type {Object}\r\n */\n\n\n HostObject_createClass(HostObject, [{\n key: "owner",\n get: function get() {\n return this._owner;\n }\n /**\r\n * Gets the current time in milliseconds.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "now",\n get: function get() {\n return Date.now();\n }\n /**\r\n * Gets the amount of time in milliseconds since update was last called.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "deltaTime",\n get: function get() {\n return this.now - this._lastUpdate;\n }\n /**\r\n * This function should be called in the engine\'s render loop. Executes update\r\n * loops for all features.\r\n */\n\n }, {\n key: "update",\n value: function update() {\n var currentTime = this.now;\n var dt = this.deltaTime; // Progress stored waits\n\n this._waits.forEach(function (wait) {\n wait.execute(dt);\n }); // Update all features\n\n\n Object.values(this._features).forEach(function (feature) {\n feature.update(dt);\n }); // Notify listeners an update occured\n\n this.emit(this.constructor.EVENTS.update, dt);\n this._lastUpdate = currentTime;\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. The host will continuously update the wait promise during the\r\n * update loop until it resolves.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait(seconds) {\n var _this2 = this;\n\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref2.onFinish,\n onProgress = _ref2.onProgress,\n onCancel = _ref2.onCancel,\n onError = _ref2.onError;\n\n var wait = core_Utils.wait(seconds, {\n onFinish: onFinish,\n onProgress: onProgress,\n onCancel: onCancel,\n onError: onError\n });\n\n this._waits.push(wait); // Once the wait promise is no longer pending remove it from the waits array\n\n\n var onComplete = function onComplete() {\n _this2._waits.splice(_this2._waits.indexOf(wait), 1);\n };\n\n wait.then(onComplete, onComplete);\n return wait;\n }\n /**\r\n * Instantiate a new Host feature and store it. Features must inherit from\r\n * AbstractHostFeature.\r\n *\r\n * @param {Class} FeatureClass - Class that will instantiate the feature. Must\r\n * extend {@link AbstractHostFeature}.\r\n * @param {boolean} [force=false] - Whether or not to overwrite an existing\r\n * feature if one of this type already exists on the object.\r\n * @param {...any} args - Additional arguments to pass to the FeatureClass\r\n * constructor. The HostObject will always be passed as the first argument.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully added.\r\n */\n\n }, {\n key: "addFeature",\n value: function addFeature(FeatureClass) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var inputType = HostObject_typeof(FeatureClass); // Make sure the FeatureClass can be executed\n\n\n if (inputType !== \'function\') {\n throw new Error("Cannot add feature to host ".concat(this.id, ". FeatureClass must be a class."));\n } // Make sure the feature is a host feature\n else if (!(FeatureClass.prototype instanceof core_AbstractHostFeature)) {\n throw new Error("Cannot add feature ".concat(FeatureClass.name, " to host ").concat(this.id, ". FeatureClass must extend AbstractHostFeature."));\n } // Check if the FeatureClass already exists on this object\n\n\n if (this._features[FeatureClass.name] !== undefined) {\n if (force) {\n console.warn("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Existing feature will be overwritten."));\n } else {\n throw new Error("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Use \'force\' argument to overwrite the feature."));\n }\n } // Initialize the feature\n\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var feature = HostObject_construct(FeatureClass, [this].concat(args));\n\n feature.installApi();\n this._features[FeatureClass.name] = feature;\n this.emit(this.constructor.EVENTS.addFeature, FeatureClass.name);\n return true;\n }\n /**\r\n * Remove a feature from the object.\r\n *\r\n * @param {string} typeName - Name of the type of feature to remove.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully removed.\r\n */\n\n }, {\n key: "removeFeature",\n value: function removeFeature(typeName) {\n if (this._features[typeName] === undefined) {\n console.warn("Feature of type ".concat(typeName, " does not exist on host ").concat(this.id, ". No feature will be removed."));\n return false;\n } else {\n // Remove the feature\n this.emit(this.constructor.EVENTS.removeFeature, typeName);\n\n this._features[typeName].discard();\n\n delete this._features[typeName];\n return true;\n }\n }\n /**\r\n * Indicate whether a specified feature is installed on the host.\r\n *\r\n * @param {string} typeName - Name of the type of feature to look for.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "hasFeature",\n value: function hasFeature(typeName) {\n return !!this._features[typeName];\n }\n /**\r\n * List the names of the features installed on the host.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "listFeatures",\n value: function listFeatures() {\n return Object.keys(this._features);\n }\n }]);\n\n return HostObject;\n}(three_js_Messenger);\n\nObject.defineProperty(HostObject_HostObject, \'EVENTS\', {\n value: _objectSpread(_objectSpread({}, Object.getPrototypeOf(HostObject_HostObject).EVENTS), {}, {\n update: \'onUpdate\',\n addFeature: \'onAddFeature\',\n removeFeature: \'onRemoveFeature\'\n }),\n writable: false\n});\n/* harmony default export */ var core_HostObject = (HostObject_HostObject);\n// CONCATENATED MODULE: ./src/three.js/HostObject.js\nfunction three_js_HostObject_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { three_js_HostObject_typeof = function _typeof(obj) { return typeof obj; }; } else { three_js_HostObject_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return three_js_HostObject_typeof(obj); }\n\nfunction three_js_HostObject_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction three_js_HostObject_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) three_js_HostObject_setPrototypeOf(subClass, superClass); }\n\nfunction three_js_HostObject_setPrototypeOf(o, p) { three_js_HostObject_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return three_js_HostObject_setPrototypeOf(o, p); }\n\nfunction three_js_HostObject_createSuper(Derived) { var hasNativeReflectConstruct = three_js_HostObject_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = three_js_HostObject_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = three_js_HostObject_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return three_js_HostObject_possibleConstructorReturn(this, result); }; }\n\nfunction three_js_HostObject_possibleConstructorReturn(self, call) { if (call && (three_js_HostObject_typeof(call) === "object" || typeof call === "function")) { return call; } return three_js_HostObject_assertThisInitialized(self); }\n\nfunction three_js_HostObject_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction three_js_HostObject_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; } }\n\nfunction three_js_HostObject_getPrototypeOf(o) { three_js_HostObject_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return three_js_HostObject_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Threejs Clock object\r\n *\r\n * @external "THREE.Clock"\r\n * @see https://threejs.org/docs/#api/en/core/Clock\r\n */\n\n/**\r\n * @alias three.js/HostObject\r\n * @extends core/HostObject\r\n */\n\nvar three_js_HostObject_HostObject = /*#__PURE__*/function (_CoreHostObject) {\n three_js_HostObject_inherits(HostObject, _CoreHostObject);\n\n var _super = three_js_HostObject_createSuper(HostObject);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the host.\r\n * @param {Object=} options.owner - Optional engine-specific owner of the host.\r\n * @param {external:"THREE.Clock"=} options.clock - Optional clock to manage time.\r\n */\n function HostObject() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n three_js_HostObject_classCallCheck(this, HostObject);\n\n _this = _super.call(this, options);\n _this._clock = options.clock;\n\n if (_this._clock) {\n Object.defineProperty(three_js_HostObject_assertThisInitialized(_this), \'now\', {\n get: function get() {\n return _this._clock.getElapsedTime() * 1000;\n }\n });\n _this._lastUpdate = _this.now;\n }\n\n return _this;\n }\n\n return HostObject;\n}(core_HostObject);\n\n/* harmony default export */ var three_js_HostObject = (three_js_HostObject_HostObject);\n// CONCATENATED MODULE: ./src/core/FeatureDependentInterface.js\nfunction FeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { FeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FeatureDependentInterface_typeof(obj); }\n\nfunction FeatureDependentInterface_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; }\n\nfunction FeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { FeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { FeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { FeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction FeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction FeatureDependentInterface_slicedToArray(arr, i) { return FeatureDependentInterface_arrayWithHoles(arr) || FeatureDependentInterface_iterableToArrayLimit(arr, i) || FeatureDependentInterface_unsupportedIterableToArray(arr, i) || FeatureDependentInterface_nonIterableRest(); }\n\nfunction FeatureDependentInterface_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction FeatureDependentInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return FeatureDependentInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return FeatureDependentInterface_arrayLikeToArray(o, minLen); }\n\nfunction FeatureDependentInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction FeatureDependentInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction FeatureDependentInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FeatureDependentInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction FeatureDependentInterface_setPrototypeOf(o, p) { FeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction FeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = FeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction FeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (FeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return FeatureDependentInterface_assertThisInitialized(self); }\n\nfunction FeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FeatureDependentInterface_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; } }\n\nfunction FeatureDependentInterface_getPrototypeOf(o) { FeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FeatureDependentInterface_getPrototypeOf(o); }\n\nfunction FeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) FeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) FeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for features that are dependent on other features being\n * present on the host. Event dependencies will be listened for when a feature of\n * matching type is added to the host and will stop being listened for when one\n * is removed. If the feature is already present when constructed, events will\n * be listened for right away.\n *\n * @interface\n *\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\n * listening for when a feature of type FeatureName is added/removed from the host.\n * Event dependencies should follow the signature:\n * { FeatureName: { eventName: callbackName, ... }, ... }\n */\n\nvar FeatureDependentInterface_FeatureDependentInterface = /*#__PURE__*/function () {\n function FeatureDependentInterface() {\n FeatureDependentInterface_classCallCheck(this, FeatureDependentInterface);\n }\n\n FeatureDependentInterface_createClass(FeatureDependentInterface, [{\n key: "_onFeatureAdded",\n value:\n /**\n * Start listening for event dependencies that match the given feature type.\n *\n * @private\n *\n * @param {string} typeName - type of feature to listen for.\n */\n function _onFeatureAdded(typeName) {}\n /**\n * Stop listening for event dependencies that match the given feature type.\n *\n * @private\n *\n * @param {string} typeName - type of feature to stop listening for.\n */\n\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {}\n /**\n * @augments {@link AbstractHostFeature#discard}\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\n * Creates a class that implements {@link FeatureDependentInterface} and extends\n * a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link FeatureDependentInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var FeatureDependentMixin = /*#__PURE__*/function (_BaseClass) {\n FeatureDependentInterface_inherits(FeatureDependentMixin, _BaseClass);\n\n var _super = FeatureDependentInterface_createSuper(FeatureDependentMixin);\n\n function FeatureDependentMixin(host) {\n var _this;\n\n FeatureDependentInterface_classCallCheck(this, FeatureDependentMixin);\n\n _this = _super.call(this, host);\n _this._host = host; // No need to listen for events if the mixin is in the prototype chain multiple times\n\n if (!_this._initialized) {\n _this._initialized = true; // Start listening for feature events\n\n _this._onFeatureAdded = _this._onFeatureAdded.bind(FeatureDependentInterface_assertThisInitialized(_this));\n _this._onFeatureRemoved = _this._onFeatureRemoved.bind(FeatureDependentInterface_assertThisInitialized(_this));\n\n _this._host.listenTo(three_js_HostObject.EVENTS.addFeature, _this._onFeatureAdded);\n\n _this._host.listenTo(three_js_HostObject.EVENTS.removeFeature, _this._onFeatureRemoved); // Register features that already exist\n\n\n Object.keys(_this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this._host[typeName] !== undefined) {\n _this._onFeatureAdded(typeName);\n }\n });\n }\n\n return _this;\n }\n\n FeatureDependentInterface_createClass(FeatureDependentMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref) {\n var _ref2 = FeatureDependentInterface_slicedToArray(_ref, 2),\n eventName = _ref2[0],\n callback = _ref2[1];\n\n _this2[callback] = _this2[callback].bind(_this2);\n\n _this2._host.listenTo(_this2._host[typeName].EVENTS[eventName], _this2[callback]);\n });\n }\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref3) {\n var _ref4 = FeatureDependentInterface_slicedToArray(_ref3, 2),\n eventName = _ref4[0],\n callback = _ref4[1];\n\n _this3._host.stopListening(_this3._host[typeName].EVENTS[eventName], _this3[callback]);\n });\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n var _this4 = this;\n\n // Stop listening for feature events\n this._host.stopListening(three_js_HostObject.EVENTS.addFeature, this._onFeatureAdded);\n\n this._host.stopListening(three_js_HostObject.EVENTS.removeFeature, this._onFeatureRemoved); // Stop listening to feature-specific events\n\n\n Object.keys(this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this4._host[typeName] !== undefined) {\n _this4._onFeatureRemoved(typeName);\n }\n });\n\n _get(FeatureDependentInterface_getPrototypeOf(FeatureDependentMixin.prototype), "discard", this).call(this);\n }\n }]);\n\n return FeatureDependentMixin;\n }(BaseClass);\n\n var EVENT_DEPENDENCIES = BaseClass.EVENT_DEPENDENCIES || {};\n Object.defineProperties(FeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: FeatureDependentInterface_objectSpread({}, EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return FeatureDependentMixin;\n }\n }]);\n\n return FeatureDependentInterface;\n}();\n/**\n * Event dependencies should follow the signature:\n * {\n * FeatureName: {\n * // Events that the feature should start/stop listening for when a feature\n * // of type FeatureName is added/removed from the host\n * {\n * eventName: callbackName,\n * ...\n * },\n * }\n * }\n */\n\n\nObject.defineProperties(FeatureDependentInterface_FeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_FeatureDependentInterface = (FeatureDependentInterface_FeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeatureDependentInterface.js\nfunction AnimationFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeatureDependentInterface_typeof(obj); }\n\nfunction AnimationFeatureDependentInterface_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; }\n\nfunction AnimationFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { AnimationFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeatureDependentInterface_setPrototypeOf(o, p) { AnimationFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction AnimationFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (AnimationFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction AnimationFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeatureDependentInterface_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; } }\n\nfunction AnimationFeatureDependentInterface_getPrototypeOf(o) { AnimationFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for features that are dependent on the AnimationFeature\n * being present on the host. Layer and animation events will automatically be\n * listened for once a AnimationFeature is added to the host and stopped once it\n * is removed.\n *\n * @interface\n * @extends FeatureDependentInterface\n *\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\n * listening for when a feature of type FeatureName is added/removed from the host.\n * @property {Object} EVENT_DEPENDENCIES.AnimationFeature - Events that are\n * specific to the AnimationFeature.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addLayer=\'_onLayerAdded\'] -\n * The name of the method that will be executed when AnimationFeature addLayer\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeLayer=\'_onLayerRemoved\'] -\n * The name of the method that will be executed when AnimationFeature removeLayer\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameLayer=\'_onLayerRenamed\'] -\n * The name of the method that will be executed when AnimationFeature renameLayer\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addAnimation=\'_onAnimationAdded\'] -\n * The name of the method that will be executed when AnimationFeature addAnimation\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeAnimation=\'_onAnimationRemoved\'] -\n * The name of the method that will be executed when AnimationFeature removeAnimation\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameAnimation=\'_onAnimationRenamed\'] -\n * The name of the method that will be executed when AnimationFeature renameAnimation\n * events are emitted.\n */\n\nvar AnimationFeatureDependentInterface_AnimationFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentInterface);\n\n function AnimationFeatureDependentInterface() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentInterface, [{\n key: "_onLayerAdded",\n value:\n /**\n * Executed when animation layer added events are caught.\n *\n * @private\n *\n * @param {string} name - Name of the layer that was added.\n */\n function _onLayerAdded(_ref) {\n var name = _ref.name;\n }\n /**\n * Executed when animation layer removed events are caught.\n *\n * @private\n *\n * @param {string} name - Name of the layer that was removed.\n */\n\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var name = _ref2.name;\n }\n /**\n * Executed when animation layer renamed events are caught.\n *\n * @private\n *\n * @param {string} oldName - Name of the layer that was renamed.\n * @param {string} newName - New name of the layer.\n */\n\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n }\n /**\n * Executed when animation added events are caught.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that an animation was added to.\n * @param {string} animationName - Name of the animation that was added.\n */\n\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n }\n /**\n * Executed when animation removed events are caught.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that an animation was removed from.\n * @param {string} animationName - Name of the animation that was removed.\n */\n\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n }\n /**\n * Executed when animation renamed events are caught.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that an animation belongs to.\n * @param {string} oldName - Name of the animation that was renamed.\n * @param {string} newName - New name of the animation.\n */\n\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n }\n /**\n * Creates a class that implements {@link AnimationFeatureDependentInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationFeatureDependentInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var AnimationFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentMixin, _ParentClass);\n\n var _super2 = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentMixin);\n\n function AnimationFeatureDependentMixin() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentMixin, [{\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref7) {\n var name = _ref7.name;\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref8) {\n var name = _ref8.name;\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref9) {\n var oldName = _ref9.oldName,\n newName = _ref9.newName;\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref10) {\n var layerName = _ref10.layerName,\n animationName = _ref10.animationName;\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref11) {\n var layerName = _ref11.layerName,\n animationName = _ref11.animationName;\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref12) {\n var layerName = _ref12.layerName,\n oldName = _ref12.oldName,\n newName = _ref12.newName;\n }\n }]);\n\n return AnimationFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(AnimationFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: AnimationFeatureDependentInterface_objectSpread(AnimationFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), AnimationFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return AnimationFeatureDependentMixin;\n }\n }]);\n\n return AnimationFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(AnimationFeatureDependentInterface_AnimationFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n AnimationFeature: {\n addLayer: \'_onLayerAdded\',\n removeLayer: \'_onLayerRemoved\',\n renameLayer: \'_onLayerRenamed\',\n addAnimation: \'_onAnimationAdded\',\n removeAnimation: \'_onAnimationRemoved\',\n renameAnimation: \'_onAnimationRenamed\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_AnimationFeatureDependentInterface = (AnimationFeatureDependentInterface_AnimationFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/ManagedAnimationLayerInterface.js\nfunction ManagedAnimationLayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ManagedAnimationLayerInterface_typeof(obj); }\n\nfunction ManagedAnimationLayerInterface_slicedToArray(arr, i) { return ManagedAnimationLayerInterface_arrayWithHoles(arr) || ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) || ManagedAnimationLayerInterface_unsupportedIterableToArray(arr, i) || ManagedAnimationLayerInterface_nonIterableRest(); }\n\nfunction ManagedAnimationLayerInterface_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction ManagedAnimationLayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction ManagedAnimationLayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction ManagedAnimationLayerInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ManagedAnimationLayerInterface_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; }\n\nfunction ManagedAnimationLayerInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ManagedAnimationLayerInterface_ownKeys(Object(source), true).forEach(function (key) { ManagedAnimationLayerInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ManagedAnimationLayerInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction ManagedAnimationLayerInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction ManagedAnimationLayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { ManagedAnimationLayerInterface_get = Reflect.get; } else { ManagedAnimationLayerInterface_get = function _get(target, property, receiver) { var base = ManagedAnimationLayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return ManagedAnimationLayerInterface_get(target, property, receiver || target); }\n\nfunction ManagedAnimationLayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = ManagedAnimationLayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction ManagedAnimationLayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction ManagedAnimationLayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction ManagedAnimationLayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) ManagedAnimationLayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) ManagedAnimationLayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction ManagedAnimationLayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) ManagedAnimationLayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction ManagedAnimationLayerInterface_setPrototypeOf(o, p) { ManagedAnimationLayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return ManagedAnimationLayerInterface_setPrototypeOf(o, p); }\n\nfunction ManagedAnimationLayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = ManagedAnimationLayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = ManagedAnimationLayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = ManagedAnimationLayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return ManagedAnimationLayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction ManagedAnimationLayerInterface_possibleConstructorReturn(self, call) { if (call && (ManagedAnimationLayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return ManagedAnimationLayerInterface_assertThisInitialized(self); }\n\nfunction ManagedAnimationLayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction ManagedAnimationLayerInterface_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; } }\n\nfunction ManagedAnimationLayerInterface_getPrototypeOf(o) { ManagedAnimationLayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return ManagedAnimationLayerInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for that keeps track of layers and animations on a host.\n * Tracked assets are marked as inactive until layers and animations with matching\n * names are detected as present on the host.\n *\n * @interface\n * @extends AnimationFeatureDependentInterface\n *\n * @property {Object} DEFAULT_LAYER_OPTIONS - Default options to use when executing\n * {@link AnimationLayer} methods.\n * @property {number} [DEFAULT_LAYER_OPTIONS.blendTime=0.5] - Default time in seconds\n * to use when executing {@link AnimationLayer.setBlendWeight}.\n * @property {Object} [DEFAULT_LAYER_OPTIONS.animations={}] - Maps animation names\n * to default options objects to use for managed animations.\n */\n\nvar ManagedAnimationLayerInterface_ManagedAnimationLayerInterface = /*#__PURE__*/function (_AnimationFeatureDepe) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerInterface, _AnimationFeatureDepe);\n\n var _super = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerInterface);\n\n function ManagedAnimationLayerInterface() {\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerInterface);\n\n return _super.apply(this, arguments);\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerInterface, [{\n key: "registerLayer",\n value:\n /**\n * Start tracking keeping track of whether a layer with the given name is present\n * on the host.\n *\n * @param {string} name - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {number=} options.blendTime - Default amount of time to use when\n * manipulating layer weights on this layer.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating layer weights on this layer.\n * @param {Object=} options.animations - Animations to keep track of on the layer.\n * Animations are represented as key/value pairs of animation names and their\n * options.\n */\n function registerLayer(name) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n }\n /**\n * Start tracking keeping track of whether an animation with the given name is\n * present on the host.\n *\n * @param {string} layerName - Name of the layer that will own the animation.\n * @param {string} animationName - Name of the animation to keep track of.\n * @param {Object=} options - Options for the animation.\n */\n\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n }\n /**\n * Set layer weights on tracked layers.\n *\n * @param {Function=} nameFilter - Predicate function to test each tracked layer\n * with. By default all layers will pass.\n * @param {number} weight - Weight value to set on layers.\n * @param {number=} seconds - Number of seconds it will take to reach the weight\n * on each layer. If undefined, each layers\' blendTime option is used.\n * @param {Function=} easingFn - Easing function to use when setting weight\n * on each layer. If undefined, each layers\' easingFn option is used.\n */\n\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n }\n /**\n * Set all tracked layers\' weights to 1.\n *\n * @param {number=} seconds - Number of seconds it will take to reach the weight\n * on each layer. If undefined, each layers\' blendTime option is used.\n * @param {Function=} easingFn - Easing function to use when setting weight\n * on each layer. If undefined, each layers\' easingFn option is used.\n */\n\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {}\n /**\n * Set all tracked layers\' weights to 0.\n *\n * @param {number=} seconds - Number of seconds it will take to reach the weight\n * on each layer. If undefined, each layers\' blendTime option is used.\n * @param {Function=} easingFn - Easing function to use when setting weight\n * on each layer. If undefined, each layers\' easingFn option is used.\n */\n\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {}\n /**\n * Creates a class that implements {@link ManagedAnimationLayerInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link ManagedAnimationLayerInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = animpack_AnimationFeatureDependentInterface.Mixin(BaseClass);\n\n var ManagedAnimationLayerMixin = /*#__PURE__*/function (_ParentClass) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerMixin, _ParentClass);\n\n var _super2 = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerMixin);\n\n function ManagedAnimationLayerMixin() {\n var _this;\n\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerMixin);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super2.call.apply(_super2, [this].concat(args));\n _this._managedLayers = {};\n return _this;\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Detect new layers\n\n this._host.AnimationFeature.layers.forEach(function (name) {\n _this2._onLayerAdded({\n name: name\n });\n });\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureRemoved", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Deactivate the layers\n\n Object.keys(this._managedLayers).forEach(function (name) {\n _this3._onLayerRemoved({\n name: name\n });\n });\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref) {\n var _this4 = this;\n\n var name = _ref.name;\n\n // Mark the layer as active if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = true; // Detect new animations\n\n this._host.AnimationFeature.getAnimations(name).forEach(function (animName) {\n _this4._onAnimationAdded({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var _this5 = this;\n\n var name = _ref2.name;\n\n // Deactivate the layer if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = false; // Deactivate the animations\n\n Object.keys(this._managedLayers[name].animations).forEach(function (animName) {\n _this5._onAnimationRemoved({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n var layerOptions = this._managedLayers[oldName]; // Replace the layer key with the new name\n\n if (layerOptions !== undefined) {\n delete this._managedLayers[oldName];\n this._managedLayers[newName] = layerOptions;\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n\n // Mark the animation as active if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = true;\n }\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n\n // Deactivate the animation if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[oldName] !== undefined) {\n // Replace the animation key with the new name\n var animOptions = this._managedLayers[layerName].animations[oldName];\n delete this._managedLayers[layerName].animations[oldName];\n this._managedLayers[layerName].animations[newName] = animOptions;\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this6 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // Start with default options for each new layer\n if (this._managedLayers[name] === undefined) {\n this._managedLayers[name] = ManagedAnimationLayerInterface_objectSpread(ManagedAnimationLayerInterface_objectSpread({}, this.constructor.DEFAULT_LAYER_OPTIONS), {}, {\n animations: {}\n });\n } // Update all options except animations\n\n\n var layerOptions = this._managedLayers[name];\n options = ManagedAnimationLayerInterface_objectSpread({}, options);\n var animationOptions = options.animations || {};\n delete options.animations;\n Object.assign(layerOptions, options); // Check whether the layer can be manipulated now\n\n layerOptions.isActive = this._host.AnimationFeature !== undefined && this._host.AnimationFeature.layers.includes(name); // Register the animations\n\n Object.entries(animationOptions).forEach(function (_ref7) {\n var _ref8 = ManagedAnimationLayerInterface_slicedToArray(_ref7, 2),\n animName = _ref8[0],\n animOptions = _ref8[1];\n\n _this6.registerAnimation(name, animName, animOptions);\n });\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Register the layer if it hasn\'t been registered yet\n if (this._managedLayers[layerName] === undefined) {\n this.registerLayer(layerName);\n } // Update animation options\n\n\n var animOptions = this._managedLayers[layerName].animations[animationName] || {};\n Object.assign(animOptions, options);\n this._managedLayers[layerName].animations[animationName] = animOptions; // Check whether the animation can be manipulated now\n\n this._managedLayers[layerName].animations[animationName].isActive = this._managedLayers[layerName].isActive && this._host.AnimationFeature.getAnimations(layerName).includes(animationName);\n }\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var _this7 = this;\n\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var layerNames = Object.keys(this._managedLayers).filter(nameFilter);\n layerNames.forEach(function (name) {\n var layerOptions = _this7._managedLayers[name];\n\n if (layerOptions.isActive) {\n _this7._host.AnimationFeature.setLayerWeight(name, weight, seconds !== undefined ? seconds : layerOptions.blendTime, easingFn || layerOptions.easingFn);\n }\n });\n }\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {\n this.setLayerWeights(undefined, 1, seconds, easingFn);\n }\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {\n this.setLayerWeights(undefined, 0, seconds, easingFn);\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var api = ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n registerLayer: this.registerLayer.bind(this),\n registerAnimation: this.registerAnimation.bind(this),\n setLayerWeights: this.setLayerWeights.bind(this),\n enable: this.enable.bind(this),\n disable: this.disable.bind(this)\n });\n return api;\n }\n }]);\n\n return ManagedAnimationLayerMixin;\n }(ParentClass);\n\n Object.defineProperties(ManagedAnimationLayerMixin, {\n DEFAULT_LAYER_OPTIONS: {\n value: ManagedAnimationLayerInterface.DEFAULT_LAYER_OPTIONS,\n writable: false\n }\n });\n return ManagedAnimationLayerMixin;\n }\n }]);\n\n return ManagedAnimationLayerInterface;\n}(animpack_AnimationFeatureDependentInterface);\n\nObject.defineProperties(ManagedAnimationLayerInterface_ManagedAnimationLayerInterface, {\n DEFAULT_LAYER_OPTIONS: {\n value: {\n blendTime: 0.5,\n animations: {}\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_ManagedAnimationLayerInterface = (ManagedAnimationLayerInterface_ManagedAnimationLayerInterface);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeatureDependentInterface.js\nfunction TextToSpeechFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeatureDependentInterface_typeof(obj); }\n\nfunction TextToSpeechFeatureDependentInterface_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; }\n\nfunction TextToSpeechFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { TextToSpeechFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { TextToSpeechFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { TextToSpeechFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction TextToSpeechFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p) { TextToSpeechFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction TextToSpeechFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeatureDependentInterface_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; } }\n\nfunction TextToSpeechFeatureDependentInterface_getPrototypeOf(o) { TextToSpeechFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for features that are dependent on the TextToSpeechFeature\n * being present on the host. Speech events will automatically be listened for once a\n * TextToSpeechFeature is added to the host and stopped once it is removed.\n *\n * @interface\n * @extends FeatureDependentInterface\n *\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\n * listening for when a feature of type FeatureName is added/removed from the host.\n * @property {Object} EVENT_DEPENDENCIES.TextToSpeechFeature - Events that are\n * specific to the TextToSpeechFeature.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.play=\'_onPlay\'] -\n * The name of the method that will be executed when TextToSpeechFeature play\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.pause=\'_onPause\'] -\n * The name of the method that will be executed when TextToSpeechFeature pause\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.resume=\'_onResume\'] -\n * The name of the method that will be executed when TextToSpeechFeature resume\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.stop=\'_onStop\'] -\n * The name of the method that will be executed when TextToSpeechFeature stop\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.sentence=\'_onSentence\'] -\n * The name of the method that will be executed when TextToSpeechFeature sentence\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.word=\'_onWord\'] -\n * The name of the method that will be executed when TextToSpeechFeature word\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.viseme=\'_onViseme\'] -\n * The name of the method that will be executed when TextToSpeechFeature viseme\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.ssml=\'_onSsml\'] -\n * The name of the method that will be executed when TextToSpeechFeature ssml\n * events are emitted.\n */\n\nvar TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentInterface);\n\n function TextToSpeechFeatureDependentInterface() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentInterface, [{\n key: "_onPlay",\n value:\n /**\n * Executed when speech play events are caught.\n *\n * @private\n */\n function _onPlay() {}\n /**\n * Executed when speech pause events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onPause",\n value: function _onPause() {}\n /**\n * Executed when speech resume events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onResume",\n value: function _onResume() {}\n /**\n * Executed when speech stop events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onStop",\n value: function _onStop() {}\n /**\n * Executed when speech sentence events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n /**\n * Executed when speech word events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onWord",\n value: function _onWord() {}\n /**\n * Executed when speech viseme events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n /**\n * Executed when speech ssml events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n /**\n * Creates a class that implements {@link TextToSpeechFeatureDependentInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link TextToSpeechFeatureDependentInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var TextToSpeechFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentMixin, _ParentClass);\n\n var _super2 = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentMixin);\n\n function TextToSpeechFeatureDependentMixin() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentMixin, [{\n key: "_onPlay",\n value: function _onPlay() {}\n }, {\n key: "_onPause",\n value: function _onPause() {}\n }, {\n key: "_onResume",\n value: function _onResume() {}\n }, {\n key: "_onStop",\n value: function _onStop() {}\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n }, {\n key: "_onWord",\n value: function _onWord() {}\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n }]);\n\n return TextToSpeechFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(TextToSpeechFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: TextToSpeechFeatureDependentInterface_objectSpread(TextToSpeechFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), TextToSpeechFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return TextToSpeechFeatureDependentMixin;\n }\n }]);\n\n return TextToSpeechFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n TextToSpeechFeature: {\n play: \'_onPlay\',\n pause: \'_onPause\',\n resume: \'_onResume\',\n stop: \'_onStop\',\n sentence: \'_onSentence\',\n word: \'_onWord\',\n viseme: \'_onViseme\',\n ssml: \'_onSsml\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var awspack_TextToSpeechFeatureDependentInterface = (TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/LipsyncFeature.js\nfunction LipsyncFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { LipsyncFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { LipsyncFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return LipsyncFeature_typeof(obj); }\n\nfunction LipsyncFeature_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; }\n\nfunction LipsyncFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { LipsyncFeature_ownKeys(Object(source), true).forEach(function (key) { LipsyncFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { LipsyncFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction LipsyncFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }\n\nfunction LipsyncFeature_slicedToArray(arr, i) { return LipsyncFeature_arrayWithHoles(arr) || LipsyncFeature_iterableToArrayLimit(arr, i) || LipsyncFeature_unsupportedIterableToArray(arr, i) || LipsyncFeature_nonIterableRest(); }\n\nfunction LipsyncFeature_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction LipsyncFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return LipsyncFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return LipsyncFeature_arrayLikeToArray(o, minLen); }\n\nfunction LipsyncFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction LipsyncFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction LipsyncFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction LipsyncFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction LipsyncFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction LipsyncFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) LipsyncFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) LipsyncFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction LipsyncFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { LipsyncFeature_get = Reflect.get; } else { LipsyncFeature_get = function _get(target, property, receiver) { var base = LipsyncFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return LipsyncFeature_get(target, property, receiver || target); }\n\nfunction LipsyncFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = LipsyncFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction LipsyncFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) LipsyncFeature_setPrototypeOf(subClass, superClass); }\n\nfunction LipsyncFeature_setPrototypeOf(o, p) { LipsyncFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return LipsyncFeature_setPrototypeOf(o, p); }\n\nfunction LipsyncFeature_createSuper(Derived) { var hasNativeReflectConstruct = LipsyncFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = LipsyncFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = LipsyncFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return LipsyncFeature_possibleConstructorReturn(this, result); }; }\n\nfunction LipsyncFeature_possibleConstructorReturn(self, call) { if (call && (LipsyncFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return LipsyncFeature_assertThisInitialized(self); }\n\nfunction LipsyncFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction LipsyncFeature_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; } }\n\nfunction LipsyncFeature_getPrototypeOf(o) { LipsyncFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return LipsyncFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n/**\n * Default mapping of Polly viseme names to animation options objects.\n *\n * @property {Object} [sil={name: \'sil\'}]\n * @property {Object} [p={name: \'p\', overrideWeight: 0.9}]\n * @property {Object} [t={name: \'t\', blendTime: 0.2}]\n * @property {Object} [S={name: \'S\'}]\n * @property {Object} [T={name: \'T\'}]\n * @property {Object} [f={name: \'f\', overrideWeight: 0.75}]\n * @property {Object} [k={name: \'k\'}]\n * @property {Object} [i={name: \'i\'}]\n * @property {Object} [r={name: \'r\'}]\n * @property {Object} [s={name: \'s\', blendTime: 0.25}]\n * @property {Object} [u={name: \'u\'}]\n * @property {Object} [@={name: \'@\'}]\n * @property {Object} [a={name: \'a\'}]\n * @property {Object} [e={name: \'e\', blendTime: 0.2}]\n * @property {Object} [E={name: \'E\'}]\n * @property {Object} [o={name: \'o\'}]\n * @property {Object} [O={name: \'O\'}]\n */\n\nvar DefaultVisemeMap = {\n sil: {\n name: \'sil\'\n },\n p: {\n name: \'p\',\n overrideWeight: 0.9\n },\n t: {\n name: \'t\',\n blendTime: 0.2\n },\n S: {\n name: \'S\'\n },\n T: {\n name: \'T\'\n },\n f: {\n name: \'f\',\n overrideWeight: 0.75\n },\n k: {\n name: \'k\'\n },\n i: {\n name: \'i\'\n },\n r: {\n name: \'r\'\n },\n s: {\n name: \'s\',\n blendTime: 0.25\n },\n u: {\n name: \'u\'\n },\n \'@\': {\n name: \'@\'\n },\n a: {\n name: \'a\'\n },\n e: {\n name: \'e\',\n blendTime: 0.2\n },\n E: {\n name: \'E\'\n },\n o: {\n name: \'o\'\n },\n O: {\n name: \'O\'\n }\n};\n/**\n * Lipsync controls two types of movement: idle animation that should play while\n * speech is playing and viseme animations corresponding to Polly visemes whose\n * weights should be turned on and off as they are encountered in the Polly SSML\n * transcript. Layers owned by this feature will be enabled while speech is playing\n * and disabled once it stops.\n *\n * @extends AbstractHostFeature\n * @alias core/LipsyncFeature\n * @implements TextToSpeechFeatureDependentInterface\n * @implements ManagedAnimationLayerInterface\n */\n\nvar LipsyncFeature_LipsyncFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n LipsyncFeature_inherits(LipsyncFeature, _AbstractHostFeature$);\n\n var _super = LipsyncFeature_createSuper(LipsyncFeature);\n\n /**\n * @constructor\n *\n * @param {core/HostObject} host - Host that owns the feature.\n * @param {Object=} visemeOptions - Options for the viseme layers.\n * @param {number} [visemeOptions.blendTime=0.15] - Default amount of time it\n * will take to manipulate each freeBlend weight on the viseme states.\n * @param {Object} [visemeOptions.decayRate={amount: .5, seconds: .5}] - An object\n * describing the 0-1 factor viseme weight will decay if the viseme duration is\n * longer than the blendTime and the number of seconds it would take to decay\n * by that factor.\n * @param {number} [visemeOptions.easingFn=Quadratic.InOut] - Default easing function\n * to use when manipulating viseme freeBlend weights.\n * @param {Array.} [visemeOptions..layers=[]] - An array of layer options\n * objects to register as viseme layers.\n * @param {Object=} talkingOptions - Options for the talking layers.\n * @param {number} [talkingOptions.blendTime=0.75] - Default amount of time to\n * enable and disable the talking idle layers\n * @param {number} [talkingOptions.easingFn=Quadratic.InOut] - Default easing\n * function to use when manipulating weights on the talking idle layers.\n * @param {Array.} [talkingOptions.layers=[]] - An array of layer options\n * objects to register as talking layers.\n * @param {number} [visemeLeadTime=.067] - The amount of time to instruct the\n * TextToSpeechFeature to emit speechmarks before each one\'s actual timestamp\n * is reached. This will set the \'speechMarkOffset\' variable on the TextToSpeechFeature.\n */\n function LipsyncFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$blendTime = _ref.blendTime,\n visemeBlendTime = _ref$blendTime === void 0 ? 0.15 : _ref$blendTime,\n _ref$decayRate = _ref.decayRate;\n\n _ref$decayRate = _ref$decayRate === void 0 ? {} : _ref$decayRate;\n var _ref$decayRate$amount = _ref$decayRate.amount,\n amount = _ref$decayRate$amount === void 0 ? 0.5 : _ref$decayRate$amount,\n _ref$decayRate$second = _ref$decayRate.seconds,\n seconds = _ref$decayRate$second === void 0 ? 0.5 : _ref$decayRate$second,\n _ref$easingFn = _ref.easingFn,\n visemeEasingFn = _ref$easingFn === void 0 ? Quadratic.InOut : _ref$easingFn,\n _ref$layers = _ref.layers,\n visemeLayers = _ref$layers === void 0 ? [] : _ref$layers;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n talkingBlendTime = _ref2$blendTime === void 0 ? 0.75 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n talkingEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n talkingLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var visemeLeadTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.067;\n\n LipsyncFeature_classCallCheck(this, LipsyncFeature);\n\n _this = _super.call(this, host);\n _this._visemeLayers = {};\n _this._talkingLayers = {};\n _this.visemeLeadTime = visemeLeadTime; // Register the viseme layers\n\n visemeLayers.forEach(function (_ref3) {\n var name = _ref3.name,\n animation = _ref3.animation,\n _ref3$visemeMap = _ref3.visemeMap,\n visemeMap = _ref3$visemeMap === void 0 ? DefaultVisemeMap : _ref3$visemeMap;\n\n _this.registerVisemeLayer(name, {\n animation: animation,\n visemeMap: visemeMap,\n decayRate: {\n amount: amount,\n seconds: seconds\n },\n blendTime: visemeBlendTime,\n easingFn: visemeEasingFn\n });\n }); // Register the talking layers\n\n talkingLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation;\n\n _this.registerTalkingLayer(name, {\n animation: animation,\n blendTime: talkingBlendTime,\n easingFn: talkingEasingFn\n });\n });\n return _this;\n }\n /**\n * Ensure that registered viseme animations are FreeBlendStates.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the viseme animation.\n * @param {string} animationName - Name of the animation.\n */\n\n\n LipsyncFeature_createClass(LipsyncFeature, [{\n key: "_registerVisemeAnimation",\n value: function _registerVisemeAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (this._host.AnimationFeature.getAnimationType(layerName, animationName) !== \'freeBlend\') {\n // Warn and deactivate if the registered state is not freeBlend\n console.warn("Cannot register Lipsync viseme animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Viseme animations must be of type \'freeBlend\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n } else {\n // Check if the blendWeights can be manipulated now\n var weightNames = this._host.AnimationFeature.getAnimationBlendNames(layerName, animationName);\n\n var visemeMap = this._managedLayers[layerName].animations[animationName].visemeMap;\n Object.values(visemeMap).forEach(function (visemeOptions) {\n visemeOptions.isActive = weightNames.includes(visemeOptions.name);\n });\n }\n }\n }\n /**\n * If the added feature is TextToSpeech, update its speechMarkOffset variable.\n *\n * @private\n *\n * @param {string} typeName - Name of the type of feature that was added.\n */\n\n }, {\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n this._visemeLayers = this._visemeLayers || {};\n this._talkingLayers = this._talkingLayers || {};\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName === \'TextToSpeechFeature\') {\n this._host.TextToSpeechFeature.speechmarkOffset = -this._visemeLeadTime || 0;\n }\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref5) {\n var name = _ref5.name;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[name] !== undefined) {\n this._registerVisemeAnimation(name, this._visemeLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[layerName] === animationName) {\n this._registerVisemeAnimation(layerName, this._visemeLayers[layerName]);\n }\n }\n }, {\n key: "_onPlay",\n value: function _onPlay() {\n var _this2 = this;\n\n // Turn on the layer weights\n this.enable(); // Set the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref7) {\n var _ref8 = LipsyncFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animationName = _ref8[1];\n\n if (_this2._managedLayers[layerName].animations[animationName].isActive) {\n _this2._host.AnimationFeature.resumeAnimation(layerName, animationName);\n }\n });\n });\n }\n }, {\n key: "_onPause",\n value: function _onPause() {\n this._onStop();\n }\n }, {\n key: "_onResume",\n value: function _onResume() {\n this._onPlay();\n }\n }, {\n key: "_onStop",\n value: function _onStop() {\n var _this3 = this;\n\n // Turn off the layer weights\n this.disable(); // Pause the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref9) {\n var _ref10 = LipsyncFeature_slicedToArray(_ref9, 2),\n layerName = _ref10[0],\n animationName = _ref10[1];\n\n if (_this3._managedLayers[layerName].animations[animationName].isActive) {\n _this3._host.AnimationFeature.pauseAnimation(layerName, animationName);\n }\n });\n });\n }\n /**\n * When viseme events are caught, turn on weight of the new viseme for the duration\n * of the speech mark, then turn weight back off.\n *\n * @private\n *\n * @param {Object} event - Event data passed from the speech.\n * @param {Object} event.mark - Speechmark object.\n */\n\n }, {\n key: "_onViseme",\n value: function () {\n var _onViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(_ref11) {\n var _this4 = this;\n\n var mark;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n mark = _ref11.mark;\n Object.entries(this._visemeLayers).forEach(function (_ref12) {\n var _ref13 = LipsyncFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n // Make sure the layer can be manipulated\n var _this4$_managedLayers = _this4._managedLayers[layerName].animations[animName],\n isActive = _this4$_managedLayers.isActive,\n visemeMap = _this4$_managedLayers.visemeMap;\n\n if (!isActive) {\n return;\n } // Take variables from the viseme if they exist and default to the layer\n\n\n var _this4$_managedLayers2 = LipsyncFeature_objectSpread(LipsyncFeature_objectSpread({}, _this4._managedLayers[layerName]), visemeMap[mark.value]),\n viseme = _this4$_managedLayers2.name,\n isVisemeActive = _this4$_managedLayers2.isActive,\n decayRate = _this4$_managedLayers2.decayRate,\n blendTime = _this4$_managedLayers2.blendTime,\n easingFn = _this4$_managedLayers2.easingFn,\n overrideWeight = _this4$_managedLayers2.overrideWeight;\n\n var visemeNames = _this4._host.AnimationFeature.getAnimationBlendNames(layerName, animName); // Make sure the new viseme has an active freeBlend weight\n\n\n if (!isVisemeActive || !visemeNames.includes(viseme)) {\n return;\n } // Find the peak weight for the viseme and the amount of time it should\n // take to reach it\n\n\n var weight = 1;\n var duration = mark.duration / 1000;\n\n if (duration < blendTime) {\n var lerpFactor = blendTime > 0 ? duration / blendTime : 1;\n weight = overrideWeight !== undefined ? overrideWeight : core_MathUtils.lerp(0, 1, lerpFactor);\n }\n\n var blendInTime = Math.min(duration, blendTime); // Find the amount and time viseme will be held for\n\n var holdTime = duration - blendTime;\n\n if (holdTime < 0) {\n // Perform in -> out animation\n _this4._animateSimpleViseme(layerName, animName, viseme, weight, blendInTime, blendTime, easingFn);\n } else {\n var _lerpFactor = decayRate.seconds > 0 ? holdTime / decayRate.seconds : 1; // Perform in -> hold -> out animation\n\n\n var decayWeight = core_MathUtils.lerp(weight, weight * decayRate.amount, Math.min(1, _lerpFactor));\n\n _this4._animateHeldViseme(layerName, animName, viseme, weight, decayWeight, blendInTime, holdTime, blendTime, easingFn);\n }\n });\n\n case 2:\n case "end":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function _onViseme(_x) {\n return _onViseme2.apply(this, arguments);\n }\n\n return _onViseme;\n }()\n /**\n * Animate a viseme blend weight towards a value and then back to zero.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the viseme.\n * @param {string} animName - Name of the freeblend animation that contains\n * the viseme.\n * @param {string} visemeName - Name of the blend weight to manipulate.\n * @param {number} weight - Peak weight to animate towards.\n * @param {number} blendInTime - Amount of time it should take to reach the\n * peak weight.\n * @param {number} blendOutTime - Amount of time it should take to animate back\n * to zero after reaching the peak weight.\n * @param {Function} easingFn - Easing function to use during animation.\n */\n\n }, {\n key: "_animateSimpleViseme",\n value: function _animateSimpleViseme(layerName, animName, visemeName, peakWeight, blendInTime, blendOutTime, easingFn) {\n var _this5 = this;\n\n // Animate towards the peak value\n var weightPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn); // Animate back to zero if there was no weight interruption\n\n\n weightPromise.then(function () {\n if (!weightPromise.canceled) {\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n });\n }\n /**\n * Animate a viseme blend weight towards a value and then back to zero.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the viseme.\n * @param {string} animName - Name of the freeblend animation that contains\n * the viseme.\n * @param {string} visemeName - Name of the blend weight to manipulate.\n * @param {number} peakWeight - Peak weight to animate towards.\n * @param {number} decayWeight - Weight to animate towards after reaching the\n * peak weight.\n * @param {number} blendInTime - Amount of time it should take to reach the\n * peak weight.\n * @param {number} holdTime - Amount of time it should take to reach the decay\n * weight after the peak weight has been reached.\n * @param {number} blendOutTime - Amount of time it should take to animate back\n * to zero after reaching the decay weight.\n * @param {Function} easingFn - Easing function to use during animation.\n */\n\n }, {\n key: "_animateHeldViseme",\n value: function () {\n var _animateHeldViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(layerName, animName, visemeName, peakWeight, decayWeight, blendInTime, holdTime, blendOutTime, easingFn) {\n var startPromise, holdPromise;\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // Animate towards the peak value\n startPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn);\n _context2.next = 3;\n return startPromise;\n\n case 3:\n if (startPromise.canceled) {\n _context2.next = 8;\n break;\n }\n\n // Animate towards the decay value if there was no weight interruption\n holdPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, decayWeight, holdTime, easingFn);\n _context2.next = 7;\n return holdPromise;\n\n case 7:\n if (!holdPromise.canceled) {\n // Animate back to zero if there was no weight interruption\n this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n\n case 8:\n case "end":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function _animateHeldViseme(_x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9, _x10) {\n return _animateHeldViseme2.apply(this, arguments);\n }\n\n return _animateHeldViseme;\n }()\n /**\n * Gets and sets the amount of time in seconds to negatively offset speechmark\n * emission by.\n *\n * @type {number}\n */\n\n }, {\n key: "visemeLeadTime",\n get: function get() {\n return this._visemeLeadTime;\n },\n set: function set(seconds) {\n this._visemeLeadTime = seconds;\n\n if (this._host.TextToSpeechFeature) {\n this._host.TextToSpeechFeature.speechmarkOffset = -seconds;\n }\n }\n /**\n * Start keeping track of an animation layer that owns a freeBlend animation\n * with blendWeights corresponding to visemes.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation=\'visemes\'] - Name of the animation on the\n * layer that will be played during speech. This animation must be of type\n * freeBlend.\n * @param {Object=} decayRate\n * @param {number} [decayRate.amount=0.5] - The percentage to decrease the viseme\'s\n * peak value by over time once the peak value has been reached.\n * @param {number} [decayRate.seconds=0.5] - The amount of time in seconds to\n * decrease the viseme\'s weight once it has reached its peak value.\n * @param {number=} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating animation blendWeights.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating animation blendWeights.\n * @param {Object} [options.visemeMap=DefaultVisemeMap] - Object containing key/value pairs of\n * Polly viseme names mapped to objects containing the name of the corresponding\n * animation blendWeight and any other animation options to use such as viseme\n * specific blend times and easing functions.\n */\n\n }, {\n key: "registerVisemeLayer",\n value: function registerVisemeLayer(layerName) {\n var _ref14 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref14$animation = _ref14.animation,\n animation = _ref14$animation === void 0 ? \'visemes\' : _ref14$animation,\n _ref14$decayRate = _ref14.decayRate,\n decayRate = _ref14$decayRate === void 0 ? {\n amount: 0.5,\n seconds: 0.5\n } : _ref14$decayRate,\n _ref14$blendTime = _ref14.blendTime,\n blendTime = _ref14$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref14$blendTime,\n easingFn = _ref14.easingFn,\n _ref14$visemeMap = _ref14.visemeMap,\n visemeMap = _ref14$visemeMap === void 0 ? DefaultVisemeMap : _ref14$visemeMap;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n decayRate: decayRate,\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {\n visemeMap: visemeMap\n })\n });\n this._visemeLayers[layerName] = animation; // Validate the viseme animation\n\n this._registerVisemeAnimation(layerName, animation);\n }\n /**\n * Start keeping track of an animation layer that contains a looping animation\n * to be played during speech.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation=\'stand_talk\'] - Name of the animation on the\n * layer that will be played during speech.\n * @param {number} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating the layer\'s weights.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating the layer\'s weights.\n */\n\n }, {\n key: "registerTalkingLayer",\n value: function registerTalkingLayer(layerName) {\n var _ref15 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref15$animation = _ref15.animation,\n animation = _ref15$animation === void 0 ? \'stand_talk\' : _ref15$animation,\n _ref15$blendTime = _ref15.blendTime,\n blendTime = _ref15$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref15$blendTime,\n easingFn = _ref15.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {})\n });\n this._talkingLayers[layerName] = animation;\n }\n /**\n * Adds a namespace to the host with the name of the feature to contain properties\n * and methods from the feature that users of the host need access to.\n *\n * @see LipsyncFeature\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\n * @inner\n * @namespace LipsyncFeature\n */\n var api = LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "installApi", this).call(this);\n /**\n * @memberof LipsyncFeature\n * @name registerLayer\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#registerLayer\n */\n\n /**\n * @memberof LipsyncFeature\n * @name registerAnimation\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#registerAnimation\n */\n\n /**\n * @memberof LipsyncFeature\n * @name setLayerWeights\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#setLayerWeights\n */\n\n /**\n * @memberof LipsyncFeature\n * @name enable\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#enable\n */\n\n /**\n * @memberof LipsyncFeature\n * @name disable\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#disable\n */\n\n\n Object.assign(api, {\n /**\n * @memberof LipsyncFeature\n * @instance\n * @method\n * @see core/LipsyncFeature#registerVisemeLayer\n */\n registerVisemeLayer: this.registerVisemeLayer.bind(this),\n\n /**\n * @memberof LipsyncFeature\n * @instance\n * @method\n * @see core/LipsyncFeature#registerTalkingLayer\n */\n registerTalkingLayer: this.registerTalkingLayer.bind(this)\n });\n /**\n * @memberof LipsyncFeature\n * @instance\n * @name visemeLeadTime\n * @see core/LipsyncFeature#visemeLeadTime\n */\n\n Object.defineProperty(api, \'visemeLeadTime\', {\n get: function get() {\n return _this6.visemeLeadTime;\n },\n set: function set(seconds) {\n _this6.visemeLeadTime = seconds;\n }\n });\n return api;\n }\n }]);\n\n return LipsyncFeature;\n}(core_AbstractHostFeature.mix(awspack_TextToSpeechFeatureDependentInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_LipsyncFeature = (LipsyncFeature_LipsyncFeature);\n\n// CONCATENATED MODULE: ./src/core/awspack/SSMLSpeechmarkInterface.js\nfunction SSMLSpeechmarkInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SSMLSpeechmarkInterface_typeof(obj); }\n\nfunction SSMLSpeechmarkInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SSMLSpeechmarkInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SSMLSpeechmarkInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) SSMLSpeechmarkInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) SSMLSpeechmarkInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SSMLSpeechmarkInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SSMLSpeechmarkInterface_setPrototypeOf(subClass, superClass); }\n\nfunction SSMLSpeechmarkInterface_setPrototypeOf(o, p) { SSMLSpeechmarkInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SSMLSpeechmarkInterface_setPrototypeOf(o, p); }\n\nfunction SSMLSpeechmarkInterface_createSuper(Derived) { var hasNativeReflectConstruct = SSMLSpeechmarkInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SSMLSpeechmarkInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SSMLSpeechmarkInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SSMLSpeechmarkInterface_possibleConstructorReturn(this, result); }; }\n\nfunction SSMLSpeechmarkInterface_possibleConstructorReturn(self, call) { if (call && (SSMLSpeechmarkInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return SSMLSpeechmarkInterface_assertThisInitialized(self); }\n\nfunction SSMLSpeechmarkInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SSMLSpeechmarkInterface_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; } }\n\nfunction SSMLSpeechmarkInterface_getPrototypeOf(o) { SSMLSpeechmarkInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SSMLSpeechmarkInterface_getPrototypeOf(o); }\n\n/* eslint-disable no-unused-vars */\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-empty */\n\n/**\n * Class factory interface for that registers callback method when a ssml speechmark event is emitted.\n *\n * @interface\n * @extends TextToSpeechFeatureDependentInterface\n */\n\nvar SSMLSpeechmarkInterface_SSMLSpeechmarkInterface = /*#__PURE__*/function (_TextToSpeechFeatureD) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechmarkInterface, _TextToSpeechFeatureD);\n\n var _super = SSMLSpeechmarkInterface_createSuper(SSMLSpeechmarkInterface);\n\n function SSMLSpeechmarkInterface() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechmarkInterface);\n\n return _super.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechmarkInterface, [{\n key: "_onSsml",\n value:\n /**\n * When ssml events are caught, this will try to parse the speech mark value and execute any function which meets criteria defined in the value.\n * Speech mark value will be treated as stringified json format containing required feature name, function name and argument array to pass in.\n * Example speech mark value might look like: \'{"feature":"GestureFeature", "method":"switchToGesture", "args":["genricA", 0.5]}\'\n *\n * @private\n *\n * @param {Object} event - Event data passed from the speech.\n * @param {Object} event.mark - Speechmark object.\n */\n function _onSsml(_ref) {\n var mark = _ref.mark;\n }\n /**\n * Creates a class that implements {@link SSMLSpeechmarkInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link SSMLSpeechmarkInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = awspack_TextToSpeechFeatureDependentInterface.Mixin(BaseClass);\n\n var SSMLSpeechMarkMixin = /*#__PURE__*/function (_ParentClass) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechMarkMixin, _ParentClass);\n\n var _super2 = SSMLSpeechmarkInterface_createSuper(SSMLSpeechMarkMixin);\n\n function SSMLSpeechMarkMixin() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechMarkMixin);\n\n return _super2.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechMarkMixin, [{\n key: "_onSsml",\n value: function _onSsml(_ref2) {\n var mark = _ref2.mark;\n\n try {\n var _JSON$parse = JSON.parse(mark.value),\n feature = _JSON$parse.feature,\n method = _JSON$parse.method,\n args = _JSON$parse.args;\n\n if (this.constructor.name === feature) {\n var callback = this[method];\n\n if (callback && typeof callback === \'function\') {\n callback.apply(this, args);\n } else {\n console.warn("Function ".concat(method, " does not exist within feature ").concat(feature));\n }\n }\n } catch (e) {}\n }\n }]);\n\n return SSMLSpeechMarkMixin;\n }(ParentClass);\n\n return SSMLSpeechMarkMixin;\n }\n }]);\n\n return SSMLSpeechmarkInterface;\n}(awspack_TextToSpeechFeatureDependentInterface);\n\n/* harmony default export */ var awspack_SSMLSpeechmarkInterface = (SSMLSpeechmarkInterface_SSMLSpeechmarkInterface);\n// CONCATENATED MODULE: ./src/core/GestureFeature.js\nfunction GestureFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { GestureFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { GestureFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return GestureFeature_typeof(obj); }\n\nfunction GestureFeature_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; }\n\nfunction GestureFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { GestureFeature_ownKeys(Object(source), true).forEach(function (key) { GestureFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { GestureFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction GestureFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction GestureFeature_slicedToArray(arr, i) { return GestureFeature_arrayWithHoles(arr) || GestureFeature_iterableToArrayLimit(arr, i) || GestureFeature_unsupportedIterableToArray(arr, i) || GestureFeature_nonIterableRest(); }\n\nfunction GestureFeature_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction GestureFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return GestureFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return GestureFeature_arrayLikeToArray(o, minLen); }\n\nfunction GestureFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction GestureFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction GestureFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction GestureFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction GestureFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction GestureFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) GestureFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) GestureFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction GestureFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { GestureFeature_get = Reflect.get; } else { GestureFeature_get = function _get(target, property, receiver) { var base = GestureFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return GestureFeature_get(target, property, receiver || target); }\n\nfunction GestureFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = GestureFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction GestureFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) GestureFeature_setPrototypeOf(subClass, superClass); }\n\nfunction GestureFeature_setPrototypeOf(o, p) { GestureFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return GestureFeature_setPrototypeOf(o, p); }\n\nfunction GestureFeature_createSuper(Derived) { var hasNativeReflectConstruct = GestureFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = GestureFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = GestureFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return GestureFeature_possibleConstructorReturn(this, result); }; }\n\nfunction GestureFeature_possibleConstructorReturn(self, call) { if (call && (GestureFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return GestureFeature_assertThisInitialized(self); }\n\nfunction GestureFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction GestureFeature_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; } }\n\nfunction GestureFeature_getPrototypeOf(o) { GestureFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return GestureFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\nvar DefaultGestureWords = {\n big: [\'add\', \'above\', \'authority\', \'big\', \'cover\', \'full\', \'fly\', \'grow\', \'growth\', \'high\', \'huge\', \'increase\', \'major\', \'majority\', \'large\', \'leader\', \'lot\', \'raise\', \'rise\', \'tall\'],\n heart: [\'accept\', \'admit\', \'believe\', \'care\', \'feeling\', \'feel\', \'friend\', \'grateful\', \'happy\', \'heart\', \'human\', \'pain\', \'save\', \'safe\', \'kind\', \'love\'],\n "in": [\'include\', \'including\', \'inside\', \'into\', \'now\', \'near\', \'nearest\', \'closest\', \'therein\', \'within\'],\n many: [\'all\', \'always\', \'any\', \'anyone\', \'among\', \'area\', \'around\', \'beautiful\', \'entire\', \'environment\', \'environments\', \'environmental\', \'everybody\', \'everyone\', \'everything\', \'audience\', \'total\', \'group\', \'groups\', \'million\', \'millions\', \'others\', \'billion\', \'billions\', \'hundred\', \'hundreds\', \'many\', \'thousand\', \'thousands\', \'world\', \'worlds\', \'outside\', \'reveal\'],\n movement: [\'away\', \'across\', \'ahead\', \'along\', \'far\', \'fast\', \'follow\', \'go\', \'leave\', \'move\', \'movement\', \'through\', \'throughout\', \'toward\', \'travel\', \'turned\', \'passed\'],\n one: [\'single\', \'one\', \'once\', \'first\', \'firstly\', \'only\', \'solo\', \'warned\', \'truly\', \'up\', \'alone\'],\n aggressive: [\'power\', \'powers\', \'powerful\', \'assert\', \'assertive\', \'strong\', \'stronger\', \'strongest\', \'strength\', \'flex\', \'dang\', \'damn\', \'damnit\', \'darn\', \'shucks\', \'doh\', \'drat\', \'angry\', \'angrier\', \'angriest\', \'aggressive\', \'annoyed\', \'annoying\', \'attack\', \'attacking\', \'offense\', \'offensive\', \'battle\'],\n you: [\'you\', \'yall\', "y\'all", \'your\', \'yours\', \'thou\', \'thy\'],\n defense: [\'defense\', \'fear\', \'repulsed\', \'scared\', \'scary\', \'scarier\', \'scariest\', \'fearful\', \'afraid\', \'cower\', \'cowers\', \'cowering\', \'hideous\', \'doomed\', \'terrified\', \'terrify\', \'terrifying\', \'terrifies\', \'spooky\', \'spookier\', \'spookiest\'],\n wave: [\'hello\', \'hi\', \'hiya\', \'howdy\', \'welcome\', \'aloha\', \'heya\', \'hey\', \'bye\', \'goodbye\', \'hola\', \'adios\', \'chao\'],\n self: [\'my\', \'I\', \'myself\', \'self\', "I\'ve", \'Ive\', \'me\', \'mine\', \'own\']\n};\n/**\n * Gesture allows you to play animations on demand on one or more layers from script\n * or ssml. If gesture is played that is a QueueState, the queue will automatically\n * be progressed after a given hold time if a looping queued state is reached. Gesture\n * layers can optionally be automatically disabled when no gesture animation is\n * in progress.\n *\n * @extends AbstractHostFeature\n * @implements SSMLSpeechmarkInterface\n * @implements ManagedAnimationLayerInterface\n */\n\nvar GestureFeature_GestureFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n GestureFeature_inherits(GestureFeature, _AbstractHostFeature$);\n\n var _super = GestureFeature_createSuper(GestureFeature);\n\n /**\n * @constructor\n *\n * @param {core/HostObject} host - Host object that owns the feature.\n * @param {Object=} options - Optional options for the feature.\n * @param {number} [options.holdTime = 3] - Amount of time in seconds that must\n * elapse before advancing a gesture that\'s a {@link QueueState} when the current\n * state in the queue is set to loop infinitely.\n * @param {number} [options.minimumInterval = 0.25] - The minimum amount of time\n * in seconds that must elapse before another gesture can be played.\n * @param {Object} layers - An object that maps layer names to layer options.\n * These are the layers that will be registered as tracked gesture layers. See\n * {@link ManagedAnimationLayerInterface#registerLayer} for more information\n * on expected format for each layer options object.\n */\n function GestureFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$holdTime = _ref.holdTime,\n holdTime = _ref$holdTime === void 0 ? 3 : _ref$holdTime,\n _ref$minimumInterval = _ref.minimumInterval,\n minimumInterval = _ref$minimumInterval === void 0 ? 1 : _ref$minimumInterval,\n _ref$layers = _ref.layers,\n layers = _ref$layers === void 0 ? {} : _ref$layers;\n\n GestureFeature_classCallCheck(this, GestureFeature);\n\n _this = _super.call(this, host);\n _this.holdTime = holdTime;\n _this.minimumInterval = minimumInterval; // Register the gesture layers\n\n Object.entries(layers).forEach(function (_ref2) {\n var _ref3 = GestureFeature_slicedToArray(_ref2, 2),\n name = _ref3[0],\n _ref3$ = _ref3[1],\n options = _ref3$ === void 0 ? {} : _ref3$;\n\n _this.registerLayer(name, options);\n });\n return _this;\n }\n /**\n * Return a valid hold time value. If hold time isn\'t defined for the animation,\n * try to use the hold time for the layer. If that\'s not defined, fall back to\n * the hold time for the feature.\n *\n * @private\n *\n * @param {Object} layer - Managed layer options object.\n * @param {Object} animation - Managed animation options object.\n *\n * @returns {number}\n */\n\n\n GestureFeature_createClass(GestureFeature, [{\n key: "_getHoldTime",\n value: function _getHoldTime(layer, animation) {\n var layerHoldTime = layer.holdTime !== undefined ? layer.holdTime : this.holdTime;\n return animation.holdTime !== undefined ? animation.holdTime : layerHoldTime;\n }\n /**\n * Return a valid minimum interval value. If minimum interval isn\'t defined for\n * the animation, try to use the minimum interval for the layer. If that\'s not\n * defined, fall back to the minimum interval for the feature.\n *\n * @private\n *\n * @param {Object} layer - Managed layer options object.\n * @param {Object} animation - Managed animation options object.\n *\n * @returns {number}\n */\n\n }, {\n key: "_getMinimumInterval",\n value: function _getMinimumInterval(layer, animation) {\n var layerMinimumInterval = layer.minimumInterval !== undefined ? layer.minimumInterval : this.minimumInterval;\n return animation.minimumInterval !== undefined ? animation.minimumInterval : layerMinimumInterval;\n }\n /**\n * Callback for {@link core/AnimationFeature#playNextAnimation} event. If the\n * event is emitted for a managed animation and the new queued state cannot\n * advance on its own, start a new timer promise that will advance the queue\n * once it resolves.\n *\n * @private\n *\n * @param {Object} options - Options object passed from playNextAnimation event.\n * @param {string} layerName - Name of the layer that owns the queue state.\n * @param {string} animationName - Name of the queue state animation.\n * @param {boolean} canAdvance - Whether or not the current state in the queue\n * can advance on its own.\n * @param {boolean} isQueueEnd - Whether the current state in the queue is the last\n * state in the queue.\n */\n\n }, {\n key: "_onNext",\n value: function _onNext(_ref4) {\n var _this2 = this;\n\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName,\n canAdvance = _ref4.canAdvance,\n isQueueEnd = _ref4.isQueueEnd;\n // Exit if this isn\'t a managed layer\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Exit if it isn\'t a managed animation\n\n\n var animation = layer.animations[animationName];\n\n if (animation === undefined) {\n return;\n } // Start a new timer for looping states that aren\'t the end of the queue\n\n\n if (!canAdvance && !isQueueEnd && layer.currentGesture === animationName) {\n var holdTime = this._getHoldTime(layer, animation);\n\n layer.holdTimer.cancel(); // Skip to the next animation right away if hold time is zero\n\n if (holdTime <= 0) {\n this._host.AnimationFeature.playNextAnimation(layerName, animationName);\n } // Wait for the given hold time before progressing\n else {\n layer.holdTimer = core_Utils.wait(holdTime, {\n onFinish: function onFinish() {\n // Advance the queue to the next state\n if (layer.currentGesture === animationName) {\n _this2._host.AnimationFeature.playNextAnimation(layerName, animationName);\n }\n }\n });\n }\n }\n }\n /**\n * Callback for {@link core/AnimationFeature#stopAnimation} event. If the\n * event is emitted for a managed animation cancel the layer\'s stored timers.\n * If the layer is set to auto-disable set its weight to 0.\n *\n * @private\n *\n * @param {Object} options - Options object passed from playNextAnimation event.\n * @param {string} layerName - Name of the layer that owns the stopped animation.\n * @param {string} animationName - Name of the animation that was stopped.\n */\n\n }, {\n key: "_onStop",\n value: function _onStop(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n // Make sure the layer is managed\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Make sure the animation is managed\n\n\n var animation = layer.animations[animationName];\n\n if (animation !== undefined && animationName === layer.currentGesture) {\n layer.currentGesture = null;\n layer.playTimer = null;\n layer.holdTimer.cancel(); // Turn off layer weight\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 0);\n }\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n var layer = this._managedLayers[layerName];\n\n if (layer !== undefined) {\n var animation = layer.animations[animationName]; // Register the animation as active if it is unmanaged\n\n if (animation === undefined) {\n this.registerAnimation(layerName, animationName);\n } // Mark the animation as active if it is managed\n else {\n animation.isActive = true;\n }\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this3 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerLayer", this).call(this, name, GestureFeature_objectSpread(GestureFeature_objectSpread({}, options), {}, {\n holdTimer: core_Deferred.resolve(),\n playTimer: null,\n currentGesture: null\n }));\n\n if (this._managedLayers[name].isActive) {\n this._host.AnimationFeature.getAnimations(name).forEach(function (anim) {\n // Automatically register all animations on the layer\n if (_this3._managedLayers[name].animations[anim] === undefined) {\n _this3.registerAnimation(name, anim, _this3._managedLayers[name].animations[anim]);\n }\n });\n }\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Try to fall back to a default word array\n if (!(options.words instanceof Array) && !(options.words instanceof Set)) {\n options.words = DefaultGestureWords[animationName] || [];\n }\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerAnimation", this).call(this, layerName, animationName, options);\n }\n /**\n * Create an object that maps ssml mark syntax required to play each gesture to\n * the words array associated with each gesture. Words arrays are defined at when\n * the gesture animation is registered. Gestures without associated words will\n * be excluded from the result. The resulting object can be used as an input\n * for {@link TextToSpeechUtils.autoGenerateSSMLMarks} to update a speech string\n * with the markup required to play gestures timed with their associated words.\n *\n * @returns {Object}\n */\n\n }, {\n key: "createGestureMap",\n value: function createGestureMap() {\n var _this4 = this;\n\n var gestureMap = {};\n Object.entries(this._managedLayers).forEach(function (_ref7) {\n var _ref8 = GestureFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animations = _ref8[1].animations;\n\n Object.entries(animations).forEach(function (_ref9) {\n var _ref10 = GestureFeature_slicedToArray(_ref9, 2),\n animationName = _ref10[0],\n _ref10$ = _ref10[1],\n holdTime = _ref10$.holdTime,\n minimumInterval = _ref10$.minimumInterval,\n words = _ref10$.words,\n transitionTime = _ref10$.transitionTime;\n\n // Only store gestures that have any associated words\n if (words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = {\n feature: _this4.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n };\n gestureMap[JSON.stringify(key)] = words;\n }\n });\n });\n return gestureMap;\n }\n /**\n * Create an array that contains ssml mark syntax required to play each gesture\n * that does not have any associated words. The resulting array can be used as\n * an input for {@link TextToSpeechUtils.autoGenerateSSMLMarks} or\n * {@link TextToSpeechUtils.addMarksToUnmarkedSentences} to update a speech\n * string with the markup required to play random gestures at each unmarked\n * sentence in the string.\n *\n * @param {Array.=} layers - An array of names of managed layers to generate\n * marks for. If undefined, use all managed layers.\n *\n * @returns {Array.}\n */\n\n }, {\n key: "createGenericGestureArray",\n value: function createGenericGestureArray(layers) {\n var _this5 = this;\n\n var genericGestures = [];\n layers = layers || Object.keys(this._managedLayers);\n layers.forEach(function (layerName) {\n var layer = _this5._managedLayers[layerName]; // Make sure the layer is managed\n\n if (!layer) {\n return;\n }\n\n Object.entries(layer.animations).forEach(function (_ref11) {\n var _ref12 = GestureFeature_slicedToArray(_ref11, 2),\n animationName = _ref12[0],\n _ref12$ = _ref12[1],\n holdTime = _ref12$.holdTime,\n minimumInterval = _ref12$.minimumInterval,\n words = _ref12$.words,\n transitionTime = _ref12$.transitionTime;\n\n // Only store gestures that don\'t have any associated words\n if (!words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = JSON.stringify({\n feature: _this5.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n });\n\n if (!genericGestures.includes(key)) {\n genericGestures.push(key);\n }\n }\n });\n });\n return genericGestures;\n }\n /**\n * Play a managed gesture animation.\n *\n * @param {string} layerName - The name of the layer that contains the gesture\n * animation.\n * @param {string} animationName - The name of the gesture animation.\n * @param {Object=} options - Optional gesture options.\n * @param {number=} options.holdTime - This option only applies to {@link QueueState}\n * gestures. When a QueueState gesture progresses to a looping state, this option\n * defines how many seconds should elapse before moving the queue forward. If\n * undefined, it will fall back first to the holdTime defined in the options when\n * the gesture animation was registered and then to the holdTime defined on the\n * feature.\n * @param {number=} options.minimumInterval - The minimum amount of time that\n * must have elapsed since the last time a gesture was played.\n */\n\n }, {\n key: "playGesture",\n value: function playGesture(layerName, animationName) {\n var _ref13 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n holdTime = _ref13.holdTime,\n minimumInterval = _ref13.minimumInterval,\n transitionTime = _ref13.transitionTime,\n _ref13$force = _ref13.force,\n force = _ref13$force === void 0 ? false : _ref13$force;\n\n // Make sure the animation is registered\n if (this._managedLayers[layerName] === undefined || this._managedLayers[layerName].animations[animationName] === undefined) {\n this.registerAnimation(layerName, animationName, {\n holdTime: holdTime,\n minimumInterval: minimumInterval,\n transitionTime: transitionTime\n });\n }\n\n var layer = this._managedLayers[layerName];\n var animation = layer.animations[animationName]; // Make sure the animation is active\n\n if (!animation.isActive) {\n // Create warning message based on which object doesn\'t exist yet\n var typeName = layer.isActive ? \'animation\' : \'layer\';\n var message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No ").concat(typeName, " exists with this name yet.");\n console.warn(message);\n return core_Deferred.cancel({\n reason: \'inactive\',\n value: typeName\n });\n } // Check if the gesture is already playing\n\n\n var currentGesture = layer.currentGesture;\n\n if (currentGesture === animationName && !force) {\n var _message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". The gesture is already playing. Use options.force to force the gesture replay, which may result in a hard transition.");\n\n console.warn(_message);\n return core_Deferred.cancel({\n reason: \'playing\',\n value: animationName\n });\n } // Update animation options\n\n\n if (holdTime !== undefined) {\n animation.holdTime = holdTime;\n }\n\n if (minimumInterval !== undefined) {\n animation.minimumInterval = minimumInterval;\n } else {\n minimumInterval = this._getMinimumInterval(layer, animation);\n } // Check the interval\n\n\n if (!force && layer.playTimer !== null && layer.playTimer < minimumInterval) {\n console.warn("Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Minimum interval ").concat(minimumInterval, " has not been met."));\n return core_Deferred.cancel({\n reason: \'minimumInterval\',\n value: minimumInterval - layer.playTimer\n });\n } // Play the animation\n\n\n layer.currentGesture = animationName;\n layer.playTimer = 0;\n layer.holdTimer.cancel();\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 1);\n }\n\n return this._host.AnimationFeature.playAnimation(layerName, animationName, transitionTime);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this6 = this;\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "update", this).call(this, deltaTime); // Increment the timers\n\n\n Object.entries(this._managedLayers).forEach(function (_ref14) {\n var _ref15 = GestureFeature_slicedToArray(_ref14, 2),\n name = _ref15[0],\n options = _ref15[1];\n\n if (options.isActive && !_this6._host.AnimationFeature.getPaused(name)) {\n options.holdTimer.execute(deltaTime);\n\n if (options.playTimer !== null) {\n options.playTimer += deltaTime / 1000;\n }\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n /**\n * @inner\n * @namespace GestureFeature\n */\n var api = GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\n * @memberof GestureFeature\n * @instance\n * @method\n * @see GestureFeature#createGestureMap\n */\n createGestureMap: this.createGestureMap.bind(this),\n\n /**\n * @memberof GestureFeature\n * @instance\n * @method\n * @see GestureFeature#createGenericGestureArray\n */\n createGenericGestureArray: this.createGenericGestureArray.bind(this),\n\n /**\n * @memberof GestureFeature\n * @instance\n * @method\n * @see GestureFeature#playGesture\n */\n playGesture: this.playGesture.bind(this)\n });\n }\n }]);\n\n return GestureFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\nObject.defineProperties(GestureFeature_GestureFeature, {\n DEFAULT_LAYER_OPTIONS: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.DEFAULT_LAYER_OPTIONS), {}, {\n autoDisable: true\n }),\n writable: false\n },\n EVENT_DEPENDENCIES: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES), {}, {\n AnimationFeature: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES.AnimationFeature), {}, {\n playNextAnimation: \'_onNext\',\n stopAnimation: \'_onStop\',\n interruptAnimation: \'_onStop\'\n })\n })\n }\n});\n/* harmony default export */ var core_GestureFeature = (GestureFeature_GestureFeature);\n\n// CONCATENATED MODULE: ./src/core/animpack/AnimationUtils.js\nfunction AnimationUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * A collection of useful animation functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar AnimationUtils_AnimationUtils = /*#__PURE__*/function () {\n function AnimationUtils() {\n AnimationUtils_classCallCheck(this, AnimationUtils);\n }\n\n AnimationUtils_createClass(AnimationUtils, null, [{\n key: "lerp",\n value: function lerp(from, to, factor) {\n console.warn("AnimationUtils.lerp is being deprecated. Use MathUtils.lerp instead.");\n return core_MathUtils.lerp(from, to, factor);\n }\n /**\r\n * Clamp a number between 2 values.\r\n *\r\n * @param {number} value - Value to clamp.\r\n * @param {number} [min=0] - Minumum value.\r\n * @param {number} [max=1] - Maximum value.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n console.warn("AnimationUtils.clamp is being deprecated. Use MathUtils.clamp instead.");\n return core_MathUtils.clamp(value, min, max);\n }\n /**\r\n * Return a deferred promise that can be used to update the value of a numeric\r\n * property of this object over time. Pass delta time in milliseconds to the\r\n * deferred promise\'s execute method in an update loop to animate the property\r\n * towards the target value.\r\n *\r\n * @param {Object} propertyOwner - Object that contains the property to animation.\r\n * @param {string} propertyName - Name of the property to animate.\r\n * @param {number} targetValue - Target value to reach.\r\n * @param {Object=} options - Optional options object\r\n * @param {number} [options.seconds=0] - Number of seconds it will take to reach\r\n * the target value.\r\n * @param {Function} [options.easingFn=Linear.InOut] - Easing function to use for animation.\r\n * @param {Function} [options.onFinish] - Callback to execute once the animation completes.\r\n * The target value is passed as a parameter.\r\n * @param {Function=} options.onProgress - Callback to execute each time the animation\r\n * property is updated during the animation. The property\'s value at the time of\r\n * the update is passed as a parameter.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels the\r\n * animation before completion. The animation property\'s value at the time of\r\n * cancel is passed as a parameter.\r\n * @param {Function=} options.onError - Callback to execute if the animation stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred} Resolves with the property\'s value once it reaches the\r\n * target value.\r\n */\n\n }, {\n key: "interpolateProperty",\n value: function interpolateProperty(propertyOwner, propertyName, targetValue) {\n var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref$seconds = _ref.seconds,\n seconds = _ref$seconds === void 0 ? 0 : _ref$seconds,\n easingFn = _ref.easingFn,\n _onFinish = _ref.onFinish,\n _onProgress = _ref.onProgress,\n _onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure property is an object\n if (!(propertyOwner instanceof Object)) {\n var e = new Error("Cannot interpolate property ".concat(propertyName, ". Property owner must be an object."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n return core_Deferred.reject(e);\n } // Make sure property is numeric\n\n\n if (Number.isNaN(Number(propertyOwner[propertyName]))) {\n var _e = new Error("Cannot interpolate property ".concat(propertyName, ". Property must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e);\n }\n\n return core_Deferred.reject(_e);\n } // Make sure the target value is numeric\n\n\n if (Number.isNaN(Number(targetValue))) {\n var _e2 = new Error("Cannot interpolate property ".concat(propertyName, " to value ").concat(targetValue, ". Target value must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e2);\n }\n\n return core_Deferred.reject(_e2);\n } // Resolve immediately if the target has already been reached\n\n\n var startValue = propertyOwner[propertyName];\n\n if (startValue === targetValue) {\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n\n return core_Deferred.resolve(targetValue);\n } // Default to linear interpolation\n\n\n if (typeof easingFn !== \'function\') {\n if (easingFn !== undefined) {\n console.warn("Invalid property interpolation easingFn. Defaulting to linear interpolation.");\n }\n\n easingFn = Linear.InOut;\n }\n\n var interpolator = core_Utils.wait(seconds, {\n onFinish: function onFinish() {\n propertyOwner[propertyName] = targetValue;\n\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n },\n onCancel: function onCancel() {\n if (typeof _onCancel === \'function\') {\n _onCancel(propertyOwner[propertyName]);\n }\n },\n onProgress: function onProgress(progress) {\n if (propertyOwner[propertyName] !== targetValue) {\n // Calculate the lerp factor\n var easeFactor = easingFn(progress);\n\n if (typeof easeFactor !== \'number\') {\n var _e3 = new Error("Invalid property interpolation easingFn. EasingFn must return a number.");\n\n interpolator.reject(_e3);\n return;\n } // Update the value\n\n\n propertyOwner[propertyName] = core_MathUtils.lerp(startValue, targetValue, easeFactor);\n } // Signal progress\n\n\n if (typeof _onProgress === \'function\') {\n _onProgress(propertyOwner[propertyName]);\n } // Signal completion once time is up\n\n\n if (progress === 1) {\n propertyOwner[propertyName] = targetValue;\n interpolator.resolve(targetValue);\n }\n },\n onError: onError\n });\n return interpolator;\n }\n }]);\n\n return AnimationUtils;\n}();\n\n/* harmony default export */ var animpack_AnimationUtils = (AnimationUtils_AnimationUtils);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractState.js\nfunction AbstractState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractState_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\n * Base class for a state in our animation system.\n *\n * @abstract\n */\n\nvar AbstractState_AbstractState = /*#__PURE__*/function () {\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation state.\n * @param {string=} options.name - Name for the animation state. Names must be\n * unique for the container the state is applied to and should be validated at\n * the container level. If no name is given it will default to the constructor\n * name.\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\n */\n function AbstractState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AbstractState_classCallCheck(this, AbstractState);\n\n this.name = options.name !== undefined ? options.name : this.constructor.name;\n this._weight = options.weight !== undefined ? core_MathUtils.clamp(options.weight, 0, 1) : 0;\n this._internalWeight = this._weight;\n this._paused = false;\n this._promises = {\n finish: core_Deferred.resolve(),\n weight: core_Deferred.resolve(),\n play: core_Deferred.resolve()\n };\n this._playCallbacks = {\n onFinish: undefined,\n onError: undefined,\n onCancel: undefined\n };\n }\n /**\n * Gets whether or not the state is currently paused.\n *\n * @type {number}\n */\n\n\n AbstractState_createClass(AbstractState, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\n * Gets and sets the user defined weight.\n *\n * @type {number}\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n },\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n /**\n * Gets whether or not the weight is currently being animated.\n *\n * @readonly\n * @type {boolean}\n */\n\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {number} weight - The target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target weight.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.weight.cancel();\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.weight;\n }\n /**\n * Gets the internal weight.\n *\n * @readonly\n * @type {number}\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._internalWeight;\n }\n /**\n * Multiplies the user weight by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n }\n /**\n * Update any values that need to be evaluated every frame.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._paused) {\n Object.values(this._promises).forEach(function (promise) {\n promise.execute(deltaTime);\n });\n }\n }\n /**\n * Start playback of the state from the beginning.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n this._promises.play = new core_Deferred(undefined, onFinish, onError, onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n return this._promises.finish;\n }\n /**\n * Pause playback of the state. This prevents pending promises from being executed.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n return true;\n }\n /**\n * Resume playback of the state.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n this._promises.play = new core_Deferred(undefined, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n }\n\n return this._promises.finish;\n }\n /**\n * Cancel playback of the state and cancel any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.cancel();\n });\n return true;\n }\n /**\n * Stop playback of the state and resolve any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.resolve();\n });\n return true;\n }\n /**\n * Cancel any pending promises and remove reference to them.\n */\n\n }, {\n key: "discard",\n value: function discard() {\n this.cancel();\n delete this._promises;\n }\n /**\n * Force the internal weight to 0. Should be called before switching or transitioning\n * to a new state.\n */\n\n }, {\n key: "deactivate",\n value: function deactivate() {\n this.updateInternalWeight(0);\n }\n }]);\n\n return AbstractState;\n}();\n\n/* harmony default export */ var state_AbstractState = (AbstractState_AbstractState);\n// CONCATENATED MODULE: ./src/core/animpack/state/TransitionState.js\nfunction TransitionState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TransitionState_typeof = function _typeof(obj) { return typeof obj; }; } else { TransitionState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TransitionState_typeof(obj); }\n\nfunction TransitionState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TransitionState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TransitionState_createClass(Constructor, protoProps, staticProps) { if (protoProps) TransitionState_defineProperties(Constructor.prototype, protoProps); if (staticProps) TransitionState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TransitionState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TransitionState_get = Reflect.get; } else { TransitionState_get = function _get(target, property, receiver) { var base = TransitionState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TransitionState_get(target, property, receiver || target); }\n\nfunction TransitionState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TransitionState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TransitionState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TransitionState_setPrototypeOf(subClass, superClass); }\n\nfunction TransitionState_setPrototypeOf(o, p) { TransitionState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TransitionState_setPrototypeOf(o, p); }\n\nfunction TransitionState_createSuper(Derived) { var hasNativeReflectConstruct = TransitionState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TransitionState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TransitionState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TransitionState_possibleConstructorReturn(this, result); }; }\n\nfunction TransitionState_possibleConstructorReturn(self, call) { if (call && (TransitionState_typeof(call) === "object" || typeof call === "function")) { return call; } return TransitionState_assertThisInitialized(self); }\n\nfunction TransitionState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TransitionState_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; } }\n\nfunction TransitionState_getPrototypeOf(o) { TransitionState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TransitionState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Class for smooth transitioning between states on an animation layer.\r\n *\r\n * @extends AbstractState\r\n */\n\nvar TransitionState_TransitionState = /*#__PURE__*/function (_AbstractState) {\n TransitionState_inherits(TransitionState, _AbstractState);\n\n var _super = TransitionState_createSuper(TransitionState);\n\n function TransitionState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n TransitionState_classCallCheck(this, TransitionState);\n\n _this = _super.call(this, options);\n _this._to = null;\n _this._from = [];\n _this._weightPromise = core_Deferred.resolve();\n return _this;\n }\n\n TransitionState_createClass(TransitionState, [{\n key: "internalWeight",\n get: function get() {\n // Find the combined weight of all sub-states\n var totalWeight = 0;\n\n if (this._to) {\n totalWeight += this._to.weight;\n }\n\n this._from.forEach(function (state) {\n totalWeight += state.weight;\n });\n\n return totalWeight * this._internalWeight;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._from.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n\n if (this._to) {\n this._to.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Update sub-states the transition is controlling and start new weight\r\n * animations on each one. This should be called each time the current state of\r\n * an animation layer gets updated to a new value and a transition time greater\r\n * that zero is specified.\r\n *\r\n * @param {Array.} [currentStates=[]] - States whose weight values\r\n * will be animated to 0.\r\n * @param {AbstractState=} targetState - State whose weight will be animated\r\n * to 1.\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "configure",\n value: function configure() {\n var currentStates = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var targetState = arguments.length > 1 ? arguments[1] : undefined;\n var transitionTime = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var onComplete = arguments.length > 4 ? arguments[4] : undefined;\n\n // Deactivate any states that aren\'t in the new configuration\n if (this._to === targetState || currentStates.includes(this._to)) {\n this._to = null;\n }\n\n this._from = this._from.filter(function (state) {\n return state !== targetState && !currentStates.includes(state);\n });\n this.deactivate();\n this._from = currentStates;\n this._to = targetState;\n this.reset(transitionTime, easingFn, onComplete);\n }\n /**\r\n * Start new weight animations state the transition controls. This should be called\r\n * if an animation is played with a transition time greater than zero and a transtion\r\n * to that animation was already in progress.\r\n *\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "reset",\n value: function reset(transitionTime, easingFn, onComplete) {\n var _this3 = this;\n\n // Stop any pending promises\n this._weightPromise.cancel(); // Start tweening weight to 0 for the current states\n\n\n var weightPromises = this._from.map(function (state) {\n return state.setWeight(0, transitionTime, easingFn);\n }); // Start tweening weight to 1 for the target state\n\n\n if (this._to) {\n weightPromises.push(this._to.setWeight(1, transitionTime, easingFn));\n this.name = this._to.name;\n } else {\n this.name = null;\n }\n\n this._weightPromise = core_Deferred.all(weightPromises, function () {\n _this3._from.forEach(function (state) {\n state.cancel();\n state.deactivate();\n });\n\n if (typeof onComplete === \'function\') {\n onComplete();\n }\n });\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.play(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, onFinish, onError, onCancel);\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.pause();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "pause", this).call(this);\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n }\n\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.resume(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n return this._promises.finish;\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.cancel();\n }\n\n this._weightPromise.cancel();\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.stop();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "stop", this).call(this);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "update", this).call(this, deltaTime);\n\n this._from.forEach(function (state) {\n state.update(deltaTime);\n });\n\n if (this._to) {\n this._to.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "discard", this).call(this);\n\n this._weightPromise.cancel();\n\n delete this._weightPromise;\n this._to = null;\n this._from.length = 0;\n }\n }, {\n key: "deactivate",\n value: function deactivate() {\n if (this._to) {\n this._to.deactivate();\n }\n\n this._from.forEach(function (state) {\n state.deactivate();\n });\n }\n }]);\n\n return TransitionState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_TransitionState = (TransitionState_TransitionState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationPlayerInterface.js\nfunction AnimationPlayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationPlayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationPlayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationPlayerInterface_typeof(obj); }\n\nfunction AnimationPlayerInterface_toConsumableArray(arr) { return AnimationPlayerInterface_arrayWithoutHoles(arr) || AnimationPlayerInterface_iterableToArray(arr) || AnimationPlayerInterface_unsupportedIterableToArray(arr) || AnimationPlayerInterface_nonIterableSpread(); }\n\nfunction AnimationPlayerInterface_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction AnimationPlayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AnimationPlayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AnimationPlayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction AnimationPlayerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AnimationPlayerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AnimationPlayerInterface_arrayLikeToArray(arr); }\n\nfunction AnimationPlayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AnimationPlayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationPlayerInterface_get = Reflect.get; } else { AnimationPlayerInterface_get = function _get(target, property, receiver) { var base = AnimationPlayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationPlayerInterface_get(target, property, receiver || target); }\n\nfunction AnimationPlayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationPlayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationPlayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationPlayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationPlayerInterface_setPrototypeOf(o, p) { AnimationPlayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationPlayerInterface_setPrototypeOf(o, p); }\n\nfunction AnimationPlayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationPlayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationPlayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationPlayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationPlayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationPlayerInterface_possibleConstructorReturn(self, call) { if (call && (AnimationPlayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationPlayerInterface_assertThisInitialized(self); }\n\nfunction AnimationPlayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationPlayerInterface_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; } }\n\nfunction AnimationPlayerInterface_getPrototypeOf(o) { AnimationPlayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationPlayerInterface_getPrototypeOf(o); }\n\nfunction AnimationPlayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationPlayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationPlayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationPlayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationPlayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/* eslint-disable no-useless-constructor */\n\n\n/**\n * Class factory interface for controlling playback of a collection of animations.\n * One animation can be played at any given time, crossfading between animations\n * will result in playing a {@link TransitionState}.\n *\n * @interface\n */\n\nvar AnimationPlayerInterface_AnimationPlayerInterface = /*#__PURE__*/function () {\n function AnimationPlayerInterface() {\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerInterface);\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerInterface, [{\n key: "paused",\n get:\n /**\n * Gets whether or not the player is updating states.\n *\n * @readonly\n * @type {boolean}\n */\n function get() {\n return this._paused;\n }\n /**\n * Gets and sets the default number of seconds it takes to transition to a new\n * animation.\n *\n * @type {number}\n */\n\n }, {\n key: "transitionTime",\n get: function get() {},\n set: function set(seconds) {}\n /**\n * Gets and sets the default easing function to use when transitioning and\n * setting weights.\n *\n * @type {Function}\n */\n\n }, {\n key: "easingFn",\n get: function get() {},\n set: function set(fn) {}\n /**\n * Gets the state the layer is currently in control of.\n *\n * @readonly\n * @type {AbstractState}\n */\n\n }, {\n key: "currentState",\n get: function get() {}\n /**\n * Gets the name of the state the layer is currently in control of.\n *\n * @readonly\n * @type {string}\n */\n\n }, {\n key: "currentAnimation",\n get: function get() {}\n /**\n * Gets whether or not the layer is currently transitioning to a new animation.\n *\n * @readonly\n * @type {boolean}\n */\n\n }, {\n key: "isTransitioning",\n get: function get() {}\n /**\n * Update the layer\'s current state to a new value. If transitionTime is defined\n * and greater than zero, perform a smooth blend between any states that currently\n * have non-zero weight values and the new state.\n *\n * @private\n *\n * @param {(string|null)} name - Name of the state to transition to.\n * @param {string} playMethod - Name of the operation being prepared for, to be\n * used in error messaging.\n * @param {number=} transitionTime - Amount of time in seconds it will take to\n * switch to the new state.\n * @param {Function=} easingFn - Easing function to use when transitioning to a\n * new state over time.\n * @param {Function=} onError - Function to execute if an error is encountered.\n */\n\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {}\n /**\n * Start playback an animation from the beginning.\n *\n * @param {string} name - Name of the animation to play.\n * @param {number=} transitionTime - Amount of time it will take before the\n * new state has full influence for the layer.\n * @param {Function=} easingFn - Easing function to use for blending if transitionTime\n * is greater than zero.\n * @param {Function=} onFinish - Function to execute when the animation finishes.\n * @param {Function=} onError - Function to execute if the animation encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n * @param {Function=} onNext - Function to execute if an animation queue is\n * played and it advances to the next animation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\n * Cancel playback of the current animation.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {}\n /**\n * Pause playback of the current animation.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {}\n /**\n * Resume playback of an animation.\n *\n * @param {string=} name - Name of the animation to resume playback for. Default\n * is the layer\'s current animation name.\n * @param {number=} transitionTime - Amount of time it will take before the\n * new state has full influence for the layer.\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n * @param {Function=} onNext - Function to execute if an animation queue is\n * played and it advances to the next animation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\n * Stop playback of the current animation.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {}\n /**\n * Update the current animation.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {}\n /**\n * Discard the transition state.\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\n * Creates a class that implements {@link AnimationPlayerInterface} and extends\n * a specified base class.\n *\n * @param {Class} [BaseClass = class{}] - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationPlayerInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n AnimationPlayerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n var AnimationPlayerMixin = /*#__PURE__*/function (_BaseClass) {\n AnimationPlayerInterface_inherits(AnimationPlayerMixin, _BaseClass);\n\n var _super = AnimationPlayerInterface_createSuper(AnimationPlayerMixin);\n\n function AnimationPlayerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerMixin);\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._transitionState = new state_TransitionState();\n _this._states = _this._states !== undefined ? _this._states : new Map();\n _this._currentState = null;\n _this._paused = false;\n _this._transitionTime = Number(options.transitionTime) >= 0 ? Number(options.transitionTime) : 0;\n _this._easingFn = typeof options.easingFn === \'function\' ? options.easingFn : undefined;\n return _this;\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerMixin, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n }, {\n key: "transitionTime",\n get: function get() {\n return this._transitionTime;\n },\n set: function set(seconds) {\n seconds = Number(seconds);\n\n if (!(seconds >= 0)) {\n throw new Error("Cannot set transition time for ".concat(this.constructor.name, " to ").concat(seconds, ". Seconds must be a numeric value greather than or equal to zero."));\n }\n\n this._transitionTime = seconds;\n }\n }, {\n key: "easingFn",\n get: function get() {\n return this._easingFn;\n },\n set: function set(fn) {\n this._easingFn = fn;\n }\n }, {\n key: "currentState",\n get: function get() {\n return this._currentState;\n }\n }, {\n key: "currentAnimation",\n get: function get() {\n if (this._currentState) {\n return this._currentState.name;\n }\n\n return null;\n }\n }, {\n key: "isTransitioning",\n get: function get() {\n return this._currentState === this._transitionState;\n }\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {\n var _this2 = this;\n\n if (name !== null && !this._states.has(name)) {\n var e = new Error("Cannot ".concat(playMethod, " animation ").concat(name, ". No animation exists with this name."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n throw e;\n }\n\n var targetState = name !== null ? this._states.get(name) : null; // Make sure the new state isn\'t already playing\n\n if (this.currentAnimation !== name) {\n // Switch to the new state immediately\n if (transitionTime <= 0) {\n // Cancel the current state and set its weight to 0\n if (this._currentState) {\n this._currentState.cancel();\n\n this._currentState.weight = 0;\n\n this._currentState.deactivate();\n }\n\n this._currentState = targetState;\n } // Blend to the new state over time\n else {\n // Make sure to transition out of any states with non-zero weight\n var currentStates = AnimationPlayerInterface_toConsumableArray(this._states.values()).filter(function (s) {\n return s !== targetState && (s.weight || s.weightPending);\n }); // Update the transition state with new inputs\n\n\n this._transitionState.configure(currentStates, targetState, transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n\n this._currentState = this._transitionState;\n }\n } else if (playMethod === \'play\') {\n this._currentState.cancel();\n\n if (this._currentState === this._transitionState) {\n this._transitionState.reset(transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n }\n } // Update weight for the new current state so it has full influence for the player\n\n\n this._currentState.weight = 1;\n\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'play\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.play(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {\n if (this._currentState) {\n return this._currentState.pause();\n } else {\n return false;\n }\n }\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n if (name === undefined && this._currentState) {\n name = this._currentState.name;\n }\n\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'resume\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.resume(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {\n if (this._currentState) {\n return this._currentState.cancel();\n } else {\n return false;\n }\n }\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {\n if (this._currentState) {\n return this._currentState.stop();\n } else {\n return false;\n }\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this).call(this, deltaTime);\n }\n\n if (this._currentState) {\n this._currentState.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this).call(this);\n }\n\n this._transitionState.discard();\n\n delete this._transitionState;\n }\n }]);\n\n return AnimationPlayerMixin;\n }(BaseClass);\n\n return AnimationPlayerMixin;\n }\n }]);\n\n return AnimationPlayerInterface;\n}();\n\n/* harmony default export */ var animpack_AnimationPlayerInterface = (AnimationPlayerInterface_AnimationPlayerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/StateContainerInterface.js\nfunction StateContainerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { StateContainerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { StateContainerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return StateContainerInterface_typeof(obj); }\n\nfunction StateContainerInterface_toConsumableArray(arr) { return StateContainerInterface_arrayWithoutHoles(arr) || StateContainerInterface_iterableToArray(arr) || StateContainerInterface_unsupportedIterableToArray(arr) || StateContainerInterface_nonIterableSpread(); }\n\nfunction StateContainerInterface_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction StateContainerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return StateContainerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return StateContainerInterface_arrayLikeToArray(o, minLen); }\n\nfunction StateContainerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction StateContainerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return StateContainerInterface_arrayLikeToArray(arr); }\n\nfunction StateContainerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction StateContainerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) StateContainerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction StateContainerInterface_setPrototypeOf(o, p) { StateContainerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return StateContainerInterface_setPrototypeOf(o, p); }\n\nfunction StateContainerInterface_createSuper(Derived) { var hasNativeReflectConstruct = StateContainerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = StateContainerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = StateContainerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return StateContainerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction StateContainerInterface_possibleConstructorReturn(self, call) { if (call && (StateContainerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return StateContainerInterface_assertThisInitialized(self); }\n\nfunction StateContainerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction StateContainerInterface_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; } }\n\nfunction StateContainerInterface_getPrototypeOf(o) { StateContainerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return StateContainerInterface_getPrototypeOf(o); }\n\nfunction StateContainerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction StateContainerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction StateContainerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) StateContainerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) StateContainerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/**\n * Class factory interface for manipulating a collection of {@link AbstractState}.\n *\n * @interface\n */\n\nvar StateContainerInterface_StateContainerInterface = /*#__PURE__*/function () {\n function StateContainerInterface() {\n StateContainerInterface_classCallCheck(this, StateContainerInterface);\n }\n\n StateContainerInterface_createClass(StateContainerInterface, [{\n key: "getState",\n value:\n /**\n * Return the state with the given name.\n *\n * @param {string} name - Name of the state.\n *\n * @returns {AbstractState}\n */\n function getState(name) {}\n /**\n * Gets an array of the names of all states in the container.\n *\n * @type {Array.}\n */\n\n }, {\n key: "getStateNames",\n value: function getStateNames() {}\n /**\n * Add a new state to be controlled by the container. States are stored keyed\n * by their name property, which must be unique. If it isn\'t, a number will\n * be added or incremented until a unique key is generated.\n *\n * @param {AbstractState} state - State to add to the container.\n *\n * @returns {string} - Unique name of the state.\n */\n\n }, {\n key: "addState",\n value: function addState(state) {}\n /**\n * Removes a state with the given name from the container.\n *\n * @param {string} name - Name of the state to remove.\n *\n * @returns {boolean} - Whether or not a state was removed.\n */\n\n }, {\n key: "removeState",\n value: function removeState(name) {}\n /**\n * Renames a state with the given name in the container. Name must be unique\n * to the container, if it isn\'t the name will be incremented until it is unique.\n *\n * @param {string} currentName - Name of the state to rename.\n * @param {string} newName - Name to update the state with.\n *\n * @returns {string} - Updated name for the state.\n */\n\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {}\n /**\n * Discards all states.\n */\n\n }, {\n key: "discardStates",\n value: function discardStates() {}\n /**\n * Creates a class that implements {@link StateContainerInterface} and extends\n * a specified base class.\n *\n * @param {Class} [BaseClass = class{}] - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link StateContainerInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n StateContainerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n /**\n * This mixin adds functionality for manipulating uniquely-named animation states in\n * a map.\n */\n var StateContainerMixin = /*#__PURE__*/function (_BaseClass) {\n StateContainerInterface_inherits(StateContainerMixin, _BaseClass);\n\n var _super = StateContainerInterface_createSuper(StateContainerMixin);\n\n function StateContainerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n StateContainerInterface_classCallCheck(this, StateContainerMixin);\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._states = _this._states !== undefined ? _this._states : new Map();\n return _this;\n }\n\n StateContainerInterface_createClass(StateContainerMixin, [{\n key: "getState",\n value: function getState(name) {\n return this._states.get(name);\n }\n }, {\n key: "getStateNames",\n value: function getStateNames() {\n return StateContainerInterface_toConsumableArray(this._states.keys());\n }\n }, {\n key: "addState",\n value: function addState(state) {\n // Make sure the state is not already in this container\n if (StateContainerInterface_toConsumableArray(this._states.values()).includes(state)) {\n console.warn("Cannot add animation to state ".concat(this.name, ". Animation was already added."));\n return state.name;\n } // Make sure the state name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(state.name, StateContainerInterface_toConsumableArray(this._states.keys()));\n\n if (state.name !== uniqueName) {\n console.warn("Animation name ".concat(state.name, " is not unique for state ").concat(this.name, ". New animation will be added with name ").concat(uniqueName, "."));\n state.name = uniqueName;\n }\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n // Check if the state is in this container\n if (!this._states || !this._states.has(name)) {\n console.warn("Did not remove animation ".concat(name, " from state ").concat(this.name, ". No animation exists with this name."));\n return false;\n }\n\n this._states.get(name).discard();\n\n this._states["delete"](name);\n\n return true;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n // Make sure the state is in this container\n if (!this._states || !this._states.has(currentName)) {\n throw new Error("Cannot rename animation ".concat(currentName, " in ").concat(this.name, ". No animation exists with this name."));\n }\n\n var state = this._states.get(currentName); // Exit if the names are the same\n\n\n if (currentName === newName) {\n return currentName;\n } // Make sure the name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(newName, StateContainerInterface_toConsumableArray(this._states.keys()).filter(function (s) {\n return s.name !== currentName;\n }));\n\n if (newName !== uniqueName) {\n console.warn("Animation name ".concat(newName, " is not unique in state ").concat(this.name, ". Animation will be renamed to ").concat(uniqueName, "."));\n newName = uniqueName;\n }\n\n state.name = newName;\n\n this._states["delete"](currentName);\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "discardStates",\n value: function discardStates() {\n this._states.forEach(function (state) {\n state.discard();\n });\n\n delete this._states;\n }\n }]);\n\n return StateContainerMixin;\n }(BaseClass);\n\n return StateContainerMixin;\n }\n }]);\n\n return StateContainerInterface;\n}();\n\n/* harmony default export */ var state_StateContainerInterface = (StateContainerInterface_StateContainerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/QueueState.js\nfunction QueueState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { QueueState_typeof = function _typeof(obj) { return typeof obj; }; } else { QueueState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return QueueState_typeof(obj); }\n\nfunction QueueState_toConsumableArray(arr) { return QueueState_arrayWithoutHoles(arr) || QueueState_iterableToArray(arr) || QueueState_unsupportedIterableToArray(arr) || QueueState_nonIterableSpread(); }\n\nfunction QueueState_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction QueueState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return QueueState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return QueueState_arrayLikeToArray(o, minLen); }\n\nfunction QueueState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction QueueState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return QueueState_arrayLikeToArray(arr); }\n\nfunction QueueState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction QueueState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction QueueState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction QueueState_createClass(Constructor, protoProps, staticProps) { if (protoProps) QueueState_defineProperties(Constructor.prototype, protoProps); if (staticProps) QueueState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction QueueState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { QueueState_get = Reflect.get; } else { QueueState_get = function _get(target, property, receiver) { var base = QueueState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return QueueState_get(target, property, receiver || target); }\n\nfunction QueueState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = QueueState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction QueueState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) QueueState_setPrototypeOf(subClass, superClass); }\n\nfunction QueueState_setPrototypeOf(o, p) { QueueState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return QueueState_setPrototypeOf(o, p); }\n\nfunction QueueState_createSuper(Derived) { var hasNativeReflectConstruct = QueueState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = QueueState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = QueueState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return QueueState_possibleConstructorReturn(this, result); }; }\n\nfunction QueueState_possibleConstructorReturn(self, call) { if (call && (QueueState_typeof(call) === "object" || typeof call === "function")) { return call; } return QueueState_assertThisInitialized(self); }\n\nfunction QueueState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction QueueState_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; } }\n\nfunction QueueState_getPrototypeOf(o) { QueueState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return QueueState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\n * Class for playing an ordered array of animation states in sequence.\n *\n * @extends AbstractState\n * @implements @AnimationPlayerInterface\n */\n\nvar QueueState = /*#__PURE__*/function (_AnimationPlayerInter) {\n QueueState_inherits(QueueState, _AnimationPlayerInter);\n\n var _super = QueueState_createSuper(QueueState);\n\n /**\n * @constructor\n *\n * @param {Object} [options={}] - Options for the state.\n * @param {boolean} [options.autoAdvance=true] - Whether to autmatically advance\n * to the next state in the queue as each state completes.\n * @param {Array.} [queueStates=[]] - Array of states to be played\n * in order.\n */\n function QueueState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var queueStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n QueueState_classCallCheck(this, QueueState);\n\n _this = _super.call(this, options);\n queueStates.forEach(function (state) {\n _this.addState(state);\n });\n _this._queue = _this._states.keys();\n _this._done = true;\n return _this;\n }\n /**\n * Gets whether the animation queue has reached the end.\n */\n\n\n QueueState_createClass(QueueState, [{\n key: "done",\n get: function get() {\n return this._done;\n }\n /**\n * Gets the internal weight.\n *\n * @readonly\n * @type {number}\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._currentState ? this._currentState.internalWeight * this._internalWeight : 0;\n }\n /**\n * Restart the queue iterator.\n *\n * @private\n */\n\n }, {\n key: "_reset",\n value: function _reset() {\n this._queue = this._states.keys();\n\n var _this$_queue$next = this._queue.next(),\n value = _this$_queue$next.value,\n done = _this$_queue$next.done;\n\n this._done = done;\n return value || null;\n }\n /**\n * Multiplies the user weight by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\n * Start the next animation in the queue.\n *\n * @param {Function=} onNext - Function to execute each time an animation completes\n * and the queue moves to the next animation.\n * @param {boolean} [wrap=false] - Whether or not to start the queue from the\n * beginning again if the end has been reached.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "next",\n value: function next(onNext) {\n var _this2 = this;\n\n var wrap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n // Move the queue forward\n var _this$_queue$next2 = this._queue.next(),\n name = _this$_queue$next2.value,\n done = _this$_queue$next2.done;\n\n this._done = done;\n this._paused = false; // The queue has reached the end\n\n if (done) {\n // Start the queue over\n if (wrap) {\n return this.play(this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel, onNext);\n } // Stop the queue\n else {\n this._promises.finish.resolve();\n\n return this._promises.finish;\n }\n } // Signal the next animation is starting\n\n\n if (typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: this.getState(name).loopCount !== Infinity && !isQueueEnd,\n isQueueEnd: isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._transitionTime, this._easingFn, function () {\n if (!_this2._paused && !_this2.isTransitioning) {\n _this2.next(onNext);\n }\n }, this._playCallbacks.onError);\n return this._promises.finish;\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n var _this3 = this;\n\n var name = this._reset();\n\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n\n if (this._done) {\n this._promises.finish.resolve();\n } else {\n // Signal the next animation is starting\n if (name !== this.currentAnimation && typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: name ? this.getState(name).loopCount !== Infinity && !isQueueEnd : true,\n isQueueEnd: !name || isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._currentState ? this._transitionTime : 0, this._easingFn, function () {\n if (!_this3._paused && !_this3.isTransitioning) {\n _this3.next(onNext);\n }\n }, onError);\n }\n\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n var paused = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "pause", this).call(this);\n\n this.pauseAnimation();\n return paused;\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n var _this4 = this;\n\n if (this._done) {\n return this.play(onFinish, onError, onCancel, onNext);\n } else {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, function () {\n if (!_this4._paused && !_this4.isTransitioning) {\n _this4.next(onNext);\n }\n }, onError);\n return this._promises.finish;\n }\n }\n }, {\n key: "cancel",\n value: function cancel() {\n var canceled = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "cancel", this).call(this);\n\n if (this._currentState) {\n this._currentState.cancel();\n }\n\n return canceled;\n }\n }, {\n key: "stop",\n value: function stop() {\n var stopped = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "stop", this).call(this);\n\n this.stopAnimation();\n this._done = true;\n return stopped;\n }\n }, {\n key: "discard",\n value: function discard() {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return QueueState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_QueueState = (QueueState);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractBlendState.js\nfunction AbstractBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractBlendState_typeof(obj); }\n\nfunction AbstractBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractBlendState_get = Reflect.get; } else { AbstractBlendState_get = function _get(target, property, receiver) { var base = AbstractBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractBlendState_get(target, property, receiver || target); }\n\nfunction AbstractBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractBlendState_setPrototypeOf(o, p) { AbstractBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractBlendState_setPrototypeOf(o, p); }\n\nfunction AbstractBlendState_createSuper(Derived) { var hasNativeReflectConstruct = AbstractBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractBlendState_possibleConstructorReturn(self, call) { if (call && (AbstractBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractBlendState_assertThisInitialized(self); }\n\nfunction AbstractBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractBlendState_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; } }\n\nfunction AbstractBlendState_getPrototypeOf(o) { AbstractBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\n * Base class for a state that blends a collection of {@link AbstractState}.\n *\n * @abstract\n * @implements StateContainerInterface\n */\n\nvar AbstractBlendState_AbstractBlendState = /*#__PURE__*/function (_StateContainerInterf) {\n AbstractBlendState_inherits(AbstractBlendState, _StateContainerInterf);\n\n var _super = AbstractBlendState_createSuper(AbstractBlendState);\n\n function AbstractBlendState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n AbstractBlendState_classCallCheck(this, AbstractBlendState);\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this, options].concat(args));\n blendStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\n * Gets the sum of internal weights of the sub-states.\n *\n * @readonly\n * @type {number}\n */\n\n\n AbstractBlendState_createClass(AbstractBlendState, [{\n key: "internalWeight",\n get: function get() {\n var blendWeights = 0;\n\n this._states.forEach(function (state) {\n blendWeights += state.internalWeight;\n });\n\n return blendWeights;\n }\n /**\n * Returns the weight of a state controlled by the container.\n *\n * @param {string} name - Name of the state to return the weight from.\n *\n * @returns {number} - Weight of the state.\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot get weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n return state.weight;\n }\n /**\n * Sets the weight of a state controlled by the container.\n *\n * @param {string} name - Name of the state to set the weight of.\n * @param {number} weight - Weight value to set on the state.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, weight) {\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot set weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n weight = core_MathUtils.clamp(weight);\n return state.setWeight(weight, seconds, easingFn);\n }\n /**\n * Multiplies the weight of each sub-state by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n }\n /**\n * Update any values of the sub-states that need to be evaluated every frame.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "update", this).call(this, deltaTime);\n\n this._states.forEach(function (state) {\n state.update(deltaTime);\n });\n }\n /**\n * Start playback of the sub-states from the beginning.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "play", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.play());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\n * Pause playback of the sub-states. This prevents pending promises from being executed.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._states.forEach(function (state) {\n state.pause();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "pause", this).call(this);\n }\n /**\n * Resume playback of the sub-states.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "resume", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.resume());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\n * Cancel playback of the sub-states and cancel any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._states.forEach(function (state) {\n state.cancel();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "cancel", this).call(this);\n }\n /**\n * Stop playback of the sub-states and resolve any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._states.forEach(function (state) {\n state.stop();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "stop", this).call(this);\n }\n /**\n * Discards all sub-state resources.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return AbstractBlendState;\n}(state_StateContainerInterface.Mixin(state_AbstractState));\n\n/* harmony default export */ var state_AbstractBlendState = (AbstractBlendState_AbstractBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/FreeBlendState.js\nfunction FreeBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FreeBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { FreeBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FreeBlendState_typeof(obj); }\n\nfunction FreeBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FreeBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FreeBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) FreeBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) FreeBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction FreeBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { FreeBlendState_get = Reflect.get; } else { FreeBlendState_get = function _get(target, property, receiver) { var base = FreeBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return FreeBlendState_get(target, property, receiver || target); }\n\nfunction FreeBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FreeBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FreeBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FreeBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction FreeBlendState_setPrototypeOf(o, p) { FreeBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FreeBlendState_setPrototypeOf(o, p); }\n\nfunction FreeBlendState_createSuper(Derived) { var hasNativeReflectConstruct = FreeBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FreeBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FreeBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FreeBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction FreeBlendState_possibleConstructorReturn(self, call) { if (call && (FreeBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return FreeBlendState_assertThisInitialized(self); }\n\nfunction FreeBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FreeBlendState_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; } }\n\nfunction FreeBlendState_getPrototypeOf(o) { FreeBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FreeBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * Class for blending N number of blend states.\n *\n * @extends AbstractBlendState\n */\n\nvar FreeBlendState = /*#__PURE__*/function (_AbstractBlendState) {\n FreeBlendState_inherits(FreeBlendState, _AbstractBlendState);\n\n var _super = FreeBlendState_createSuper(FreeBlendState);\n\n /**\n * @constructor\n *\n * @param {Object} [options={}] - Options for the container state.\n * @param {Array.} [blendStates=[]] - Blend states to be controlled by\n * this container.\n */\n function FreeBlendState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n FreeBlendState_classCallCheck(this, FreeBlendState);\n\n return _super.call(this, options, blendStates);\n }\n\n FreeBlendState_createClass(FreeBlendState, [{\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this = this;\n\n FreeBlendState_get(FreeBlendState_getPrototypeOf(FreeBlendState.prototype), "updateInternalWeight", this).call(this, factor); // Determine the total active weight of blend states\n\n\n var sumWeights = 0;\n\n this._states.forEach(function (state) {\n sumWeights += state.weight;\n }); // Ensure the sum of blend state internal weights does not exceed container internal weight\n\n\n factor /= Math.max(sumWeights, 1); // Sum of blend state internal weights should not exceed container internal weight\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(factor * _this._weight);\n });\n }\n }]);\n\n return FreeBlendState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_FreeBlendState = (FreeBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend1dState.js\nfunction Blend1dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend1dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend1dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend1dState_typeof(obj); }\n\nfunction Blend1dState_toConsumableArray(arr) { return Blend1dState_arrayWithoutHoles(arr) || Blend1dState_iterableToArray(arr) || Blend1dState_unsupportedIterableToArray(arr) || Blend1dState_nonIterableSpread(); }\n\nfunction Blend1dState_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction Blend1dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend1dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend1dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend1dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend1dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend1dState_arrayLikeToArray(arr); }\n\nfunction Blend1dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend1dState_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; }\n\nfunction Blend1dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend1dState_ownKeys(Object(source), true).forEach(function (key) { Blend1dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend1dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend1dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend1dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend1dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend1dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend1dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend1dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend1dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend1dState_get = Reflect.get; } else { Blend1dState_get = function _get(target, property, receiver) { var base = Blend1dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend1dState_get(target, property, receiver || target); }\n\nfunction Blend1dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend1dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend1dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend1dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend1dState_setPrototypeOf(o, p) { Blend1dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend1dState_setPrototypeOf(o, p); }\n\nfunction Blend1dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend1dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend1dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend1dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend1dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend1dState_possibleConstructorReturn(self, call) { if (call && (Blend1dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend1dState_assertThisInitialized(self); }\n\nfunction Blend1dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend1dState_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; } }\n\nfunction Blend1dState_getPrototypeOf(o) { Blend1dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend1dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\n * Class for blending N number of blend states based on a single\n * parameter.\n *\n * @extends AbstractBlendState\n */\n\nvar Blend1dState_Blend1dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend1dState_inherits(Blend1dState, _AbstractBlendState);\n\n var _super = Blend1dState_createSuper(Blend1dState);\n\n /**\n * @constructor\n *\n * @param {Object} [options] - Options for the container state\n * @param {Array.} [blendStates=[]] - Blend states to be\n * controlled by this container.\n * @param {Array.} [blendThresholds=[]] - Threshold values for activating\n * each blend state.\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\n * each blend state should be phase matched.\n */\n function Blend1dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend1dState_classCallCheck(this, Blend1dState);\n\n _this = _super.call(this, options, blendStates);\n _this._blendValue = 0;\n _this._promises = Blend1dState_objectSpread(Blend1dState_objectSpread({}, _this._promises), {}, {\n blendValue: core_Deferred.resolve()\n }); // Validate there are no duplicate thresholds\n\n var nonZeroDifferentSize = blendStates.length !== 0 && blendStates.length !== blendThresholds.length;\n\n if (nonZeroDifferentSize) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds count does not match blendStates count."));\n }\n\n var containsDuplicates = new Set(blendThresholds).size !== blendThresholds.length;\n\n if (containsDuplicates) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds contains duplicate values"));\n } // Initialize the thresholds map\n\n\n _this._thresholds = [];\n\n Blend1dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n value: blendThresholds[index],\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._sortThresholds();\n\n _this._forceNoThresholdDupes = true;\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\n * Gets and sets the blend parameter value.\n */\n\n\n Blend1dState_createClass(Blend1dState, [{\n key: "blendValue",\n get: function get() {\n return this._blendValue;\n },\n set: function set(value) {\n this._blendValue = value;\n }\n /**\n * Gets whether or not the blend value is currently being animated.\n */\n\n }, {\n key: "blendValuePending",\n get: function get() {\n return this._promises.blendValue && this._promises.blendValue.pending;\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {null} name - Unused parameter.\n * @param {number} weight - The target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target weight.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n\n this._promises.blendValue.cancel();\n\n this._promises.blendValue = animpack_AnimationUtils.interpolateProperty(this, \'blendValue\', value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises.blendValue;\n }\n /**\n * Gets the user defined weight.\n *\n * @returns {number}\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight() {\n return this.blendValue;\n }\n }, {\n key: "addState",\n value: function addState(state) {\n var thresholdValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var phaseMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n this._thresholds = this._thresholds || []; // Make sure there is not already a state with this threshold\n\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === thresholdValue;\n });\n\n if (this._forceNoThresholdDupes && sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(thresholdValue, " for state ").concat(state.name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "addState", this).call(this, state);\n\n this._thresholds.push({\n value: thresholdValue,\n name: state.name,\n phaseMatch: phaseMatch || false\n });\n\n this._sortThresholds();\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n var removed = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "removeState", this).call(this, name);\n\n if (removed) {\n var index = this._thresholds.findIndex(function (threshold) {\n return threshold.name === name;\n });\n\n this._thresholds.splice(index, 1);\n }\n\n return removed;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n newName = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "renameState", this).call(this, currentName, newName);\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === currentName;\n });\n\n threshold.name = newName;\n return newName;\n }\n /**\n * Gets the threshold value of a blend with the corresponding name.\n *\n * @param {string} name - Name of the blend to get the threshold of.\n *\n * @returns {number} Threhold value.\n */\n\n }, {\n key: "getBlendThreshold",\n value: function getBlendThreshold(name) {\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot get blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n return threshold.value;\n }\n /**\n * Sets the threshold value of a blend with the corresponding name.\n *\n * @param {string} name - Name of the blend to set the threshold.\n * @param {number} value - Value of the threshold to set.\n *\n * @returns {number} Set threshold value.\n */\n\n }, {\n key: "setBlendThreshold",\n value: function setBlendThreshold(name, value) {\n // Make sure there is not already a state with this threshold\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === value;\n });\n\n if (sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(value, " for state ").concat(name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot set blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n threshold.value = value;\n\n this._sortThresholds();\n\n return threshold.value;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n this._states.forEach(function (state) {\n if (state.weight !== 0) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\n * Updates the blend weights based on their corresponding threshold values\n * and the current blendValue. Additionally, sets a lead phase state if the\n * conditions for phase-matching have been satisfied.\n *\n * @private\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (this._thresholds.length === 0) return;\n\n if (this._thresholds.length === 1) {\n var state = this._states.get(this._thresholds[0].name);\n\n state.setWeight(1);\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null; // Find the first threshold that is greater than or equal to the parameter value\n\n var targetIndex = this._thresholds.findIndex(function (threshold) {\n return threshold.value >= _this4._blendValue;\n });\n\n if (targetIndex === 0 || targetIndex === -1) {\n // Give one state full influence\n targetIndex = targetIndex === -1 ? this._thresholds.length - 1 : 0;\n\n var _state = this._states.get(this._thresholds[targetIndex].name);\n\n _state.setWeight(1);\n } else {\n // Linear interpolate influence between two states\n var thresholdA = this._thresholds[targetIndex - 1];\n var thresholdB = this._thresholds[targetIndex];\n var factorB = (this.blendValue - thresholdA.value) / (thresholdB.value - thresholdA.value);\n var factorA = 1 - factorB;\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(factorA);\n stateB.setWeight(factorB); // Set phase-matching if needed\n\n if (thresholdA.phaseMatch && thresholdB.phaseMatch) {\n this._phaseLeadState = factorA > factorB ? stateA : stateB;\n }\n }\n }\n /**\n * Sorts the thresholds from low to high based on value.\n *\n * @private\n */\n\n }, {\n key: "_sortThresholds",\n value: function _sortThresholds() {\n this._thresholds.sort(function (a, b) {\n return a.value - b.value;\n });\n }\n }]);\n\n return Blend1dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend1dState = (Blend1dState_Blend1dState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend2dState.js\nfunction Blend2dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend2dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend2dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend2dState_typeof(obj); }\n\nfunction Blend2dState_toConsumableArray(arr) { return Blend2dState_arrayWithoutHoles(arr) || Blend2dState_iterableToArray(arr) || Blend2dState_unsupportedIterableToArray(arr) || Blend2dState_nonIterableSpread(); }\n\nfunction Blend2dState_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction Blend2dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend2dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend2dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend2dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend2dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend2dState_arrayLikeToArray(arr); }\n\nfunction Blend2dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend2dState_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; }\n\nfunction Blend2dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend2dState_ownKeys(Object(source), true).forEach(function (key) { Blend2dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend2dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend2dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend2dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend2dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend2dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend2dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend2dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend2dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend2dState_get = Reflect.get; } else { Blend2dState_get = function _get(target, property, receiver) { var base = Blend2dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend2dState_get(target, property, receiver || target); }\n\nfunction Blend2dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend2dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend2dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend2dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend2dState_setPrototypeOf(o, p) { Blend2dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend2dState_setPrototypeOf(o, p); }\n\nfunction Blend2dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend2dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend2dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend2dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend2dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend2dState_possibleConstructorReturn(self, call) { if (call && (Blend2dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend2dState_assertThisInitialized(self); }\n\nfunction Blend2dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend2dState_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; } }\n\nfunction Blend2dState_getPrototypeOf(o) { Blend2dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend2dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n\n\n\n/**\n * Class for blending N number of blend states based on two\n * paramters.\n *\n * @extends AbstractBlendState\n */\n\nvar Blend2dState_Blend2dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend2dState_inherits(Blend2dState, _AbstractBlendState);\n\n var _super = Blend2dState_createSuper(Blend2dState);\n\n /**\n * @constructor\n *\n * @param {Object} [options] - Options for the container state\n * @param {Array.} [blendStates=[]] - Blend states to be\n * controlled by this container.\n * @param {Array.>} [blendThresholds=[]] - Threshold values for activating\n * each blend state.\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\n * each blend state should be phase matched.\n */\n function Blend2dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend2dState_classCallCheck(this, Blend2dState);\n\n _this = _super.call(this, options, blendStates);\n\n if (blendStates.length !== blendThresholds.length) {\n throw new Error("Cannot create Blend2dState with blendStates ".concat(blendStates, " and blendThresholds ").concat(blendThresholds, ". Count of blendStates must match count of blendThresholds."));\n }\n\n blendThresholds.slice(0, blendThresholds.length - 1).forEach(function (threshold, index) {\n blendThresholds.slice(index + 1).forEach(function (otherThreshold) {\n if (threshold[0] === otherThreshold[0] && threshold[1] === otherThreshold[1]) {\n throw new Error("Cannot create Blend2dState with blendThresholds ".concat(blendThresholds, ". No duplicate values allowed in blendThresholds."));\n }\n });\n });\n _this._blendValueX = 0;\n _this._blendValueY = 0;\n _this._promises = Blend2dState_objectSpread(Blend2dState_objectSpread({}, _this._promises), {}, {\n blendValueX: core_Deferred.resolve(),\n blendValueY: core_Deferred.resolve()\n });\n _this._thresholds = [];\n\n Blend2dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._vertices = blendThresholds;\n\n if (_this._vertices.length >= 3) {\n _this._triangles = core_MathUtils.getDelaunayTriangulation(_this._vertices);\n }\n\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {string} name - Name of blend weight to update.\n * @param {number} weight - Target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target value.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n\n Blend2dState_createClass(Blend2dState, [{\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var property = "blendValue".concat(name.toUpperCase());\n\n if (property !== \'blendValueX\' && property !== \'blendValueY\') {\n throw new Error("Cannot set blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for setBlendWeight"));\n }\n\n this._promises[property].cancel();\n\n this._promises[property] = animpack_AnimationUtils.interpolateProperty(this, property, value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises[property];\n }\n /**\n * Gets the user defined weight.\n *\n * @param {string} name - Name of blend weight.\n *\n * @returns {number}\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n var property = name.toUpperCase();\n\n if (property !== \'X\' && property !== \'Y\') {\n throw new Error("Cannot get blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for getBlendWeight"));\n }\n\n return property === \'X\' ? this._blendValueX : this._blendValueY;\n }\n /**\n * Gets and sets the x blend weight.\n */\n\n }, {\n key: "blendValueX",\n get: function get() {\n return this._blendValueX;\n },\n set: function set(value) {\n this._blendValueX = value;\n }\n /**\n * Gets and sets the y blend weight.\n */\n\n }, {\n key: "blendValueY",\n get: function get() {\n return this._blendValueY;\n },\n set: function set(value) {\n this._blendValueY = value;\n }\n /**\n * Gets whether or not the x blend value is currently being animated.\n */\n\n }, {\n key: "blendValueXPending",\n get: function get() {\n return this._promises.blendValueX && this._promises.blendValueX.pending;\n }\n /**\n * Gets whether or not the y blend value is currently being animated.\n */\n\n }, {\n key: "blendValueYPending",\n get: function get() {\n return this._promises.blendValueY && this._promises.blendValueY.pending;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend2dState_get(Blend2dState_getPrototypeOf(Blend2dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n Blend2dState_toConsumableArray(this._states.values()).forEach(function (state, index) {\n if (state.weight !== 0 && _this3._thresholds[index].phaseMatch) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\n * Updates the blend weights based on their corresponding threshold values\n * and the current [x,y] blendValue. Additionally, sets a lead phase state if the\n * conditions for phase-matching have been satisfied.\n *\n * @private\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (!this._vertices || this._vertices.length === 0) return;\n\n if (this._vertices.length === 1) {\n Blend2dState_toConsumableArray(this._states.values())[0].weight = 1;\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null;\n var p = [this._blendValueX, this._blendValueY];\n\n if (this._vertices.length === 2) {\n this._setInfluenceClosestPointOnLine(p);\n } else {\n var triangle = this._triangles.find(function (triangle) {\n return core_MathUtils.isPointInTriangle(_this4._vertices[triangle[0]], _this4._vertices[triangle[1]], _this4._vertices[triangle[2]], p);\n });\n\n if (triangle) {\n this._setInfluenceTriangle(triangle, p);\n } else {\n this._setInfluenceClosestPointInTriangles(p);\n }\n }\n }\n /**\n * Sets blend weights for states corresponding to a\n * triangle of thresholds and a given [x,y] blendValues.\n *\n * @param {Array.>} triangle - Set of triangluated indices\n * that correspond to blend thresholds.\n * @param {Array.} p - Given [x,y] blendValue.\n *\n * @private\n */\n\n }, {\n key: "_setInfluenceTriangle",\n value: function _setInfluenceTriangle(triangle, p) {\n var areaA = core_MathUtils.triangleArea(this._vertices[triangle[1]], this._vertices[triangle[2]], p);\n var areaB = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[2]], p);\n var areaC = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[1]], p);\n var totalArea = areaA + areaB + areaC;\n var weightA = areaA / totalArea;\n var weightB = areaB / totalArea;\n var weightC = areaC / totalArea;\n var thresholdA = this._thresholds[triangle[0]];\n var thresholdB = this._thresholds[triangle[1]];\n var thresholdC = this._thresholds[triangle[2]];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n var stateC = this._states.get(thresholdC.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n stateC.setWeight(weightC);\n\n this._setPhaseLeadState([stateA, stateB, stateC], [thresholdA.phaseMatch, thresholdB.phaseMatch, thresholdC.phaseMatch]);\n }\n /**\n * Determines the closest point within a triangle of\n * thresholds based on the current [x,y] blendValues and\n * then sets blend weights for the corresponding states.\n *\n * @param {Array.} p - Given [x,y] blendValue.\n *\n * @private\n */\n\n }, {\n key: "_setInfluenceClosestPointInTriangles",\n value: function _setInfluenceClosestPointInTriangles(p) {\n var _this5 = this;\n\n var globalClosestPoint = null;\n var globalMinDist = Number.POSITIVE_INFINITY;\n var closestTriangle = -1;\n\n this._triangles.forEach(function (triangle, index) {\n var pointA = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[0]], _this5._vertices[triangle[1]], p);\n var pointB = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[1]], _this5._vertices[triangle[2]], p);\n var pointC = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[2]], _this5._vertices[triangle[0]], p);\n var distA = core_MathUtils.distanceSquared(pointA, p);\n var distB = core_MathUtils.distanceSquared(pointB, p);\n var distC = core_MathUtils.distanceSquared(pointC, p);\n var localClosestPoint = pointC;\n var localMinDist = distC;\n\n if (distA < localMinDist) {\n localClosestPoint = pointA;\n localMinDist = distA;\n }\n\n if (distB < localMinDist) {\n localClosestPoint = pointB;\n localMinDist = distB;\n }\n\n if (localMinDist < globalMinDist) {\n globalMinDist = localMinDist;\n globalClosestPoint = Blend2dState_toConsumableArray(localClosestPoint);\n closestTriangle = index;\n }\n });\n\n this._setInfluenceTriangle(this._triangles[closestTriangle], globalClosestPoint);\n }\n /**\n * Determines the closest point on the line formed between the\n * two blend thresholds based on the current [x,y] blendValues and\n * then sets blend weights for the corresponding states.\n *\n * @param {Array.} p - Given [x,y] blendValue.\n *\n * @private\n */\n\n }, {\n key: "_setInfluenceClosestPointOnLine",\n value: function _setInfluenceClosestPointOnLine(p) {\n var closestPoint = core_MathUtils.closestPointOnLine(this._vertices[[0]], this._vertices[[1]], p);\n var distA = core_MathUtils.distanceSquared(this._vertices[0], closestPoint);\n var distB = core_MathUtils.distanceSquared(this._vertices[1], closestPoint);\n var weightA = distB / (distA + distB);\n var weightB = distA / (distA + distB);\n var thresholdA = this._thresholds[0];\n var thresholdB = this._thresholds[1];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n\n this._setPhaseLeadState([stateA, stateB], [thresholdA.phaseMatch, thresholdB.phaseMatch]);\n }\n /**\n * Sets a lead phase state if the conditions\n * for phase-matching are satisfied.\n *\n * @param {Array.} states - States to\n * check phase-matching criteria.\n * @param {Array.} phaseMatched - List of phase-match booleans.\n *\n * @private\n */\n\n }, {\n key: "_setPhaseLeadState",\n value: function _setPhaseLeadState(states, phaseMatched) {\n var _this6 = this;\n\n var max = 0;\n states.forEach(function (state, index) {\n if (phaseMatched[index] && state.weight > max) {\n _this6._phaseLeadState = state;\n max = state.weight;\n }\n });\n }\n }]);\n\n return Blend2dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend2dState = (Blend2dState_Blend2dState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationLayer.js\nfunction AnimationLayer_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationLayer_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationLayer_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationLayer_typeof(obj); }\n\nfunction AnimationLayer_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationLayer_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationLayer_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationLayer_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationLayer_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationLayer_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationLayer_get = Reflect.get; } else { AnimationLayer_get = function _get(target, property, receiver) { var base = AnimationLayer_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationLayer_get(target, property, receiver || target); }\n\nfunction AnimationLayer_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationLayer_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationLayer_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationLayer_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationLayer_setPrototypeOf(o, p) { AnimationLayer_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationLayer_setPrototypeOf(o, p); }\n\nfunction AnimationLayer_createSuper(Derived) { var hasNativeReflectConstruct = AnimationLayer_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationLayer_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationLayer_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationLayer_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationLayer_possibleConstructorReturn(self, call) { if (call && (AnimationLayer_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationLayer_assertThisInitialized(self); }\n\nfunction AnimationLayer_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationLayer_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; } }\n\nfunction AnimationLayer_getPrototypeOf(o) { AnimationLayer_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationLayer_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\n * Enum for types of {@link AnimationLayer} blending.\n *\n * @readonly\n * @enum {string}\n */\n\nvar LayerBlendModes = {\n Override: \'Override\',\n Additive: \'Additive\'\n};\n/**\n * The default blending mode {@link AnimationLayer}.\n *\n * @readonly\n * @type {string}\n */\n\nvar DefaultLayerBlendMode = \'Override\';\n/**\n * Checks if a given blendMode is present in the values of {@link LayerBlendModes}.\n * If it is, return the original value, otherwise return {@link DefaultLayerBlendMode}.\n *\n * @param {string} blendMode - The name of the type of blending.\n *\n * @returns {(string|DefaultLayerBlendMode)}\n */\n\nfunction validateBlendMode(blendMode) {\n if (Array.from(Object.values(LayerBlendModes)).includes(blendMode)) {\n return blendMode;\n } else {\n return DefaultLayerBlendMode;\n }\n}\n/**\n * Class for managing a set of animations where only one state can be active at\n * any given time.\n *\n * @implements AnimationPlayerInterface\n * @implements StateContainerInterface\n */\n\nvar AnimationLayer_AnimationLayer = /*#__PURE__*/function (_AnimationPlayerInter) {\n AnimationLayer_inherits(AnimationLayer, _AnimationPlayerInter);\n\n var _super = AnimationLayer_createSuper(AnimationLayer);\n\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation layer.\n * @param {string} options.name - Name of the layer. Names must be unique to the\n * animation feature that contains the layer.\n * @param {LayerBlendModes} [options.blendMode=DefaultLayerBlendMode] -\n * Type of blending to use for all states controlled by the layer.\n * @param {number} [options.weight=1] - The amount of influence the layer\'s current\n * animation has over the result for the host.\n * @param {number} [options.transitionTime=0] - The default amount of time to use when\n * playing and resuming animations.\n * @param {Function=} options.easingFn - The default easing function to use when\n * transitioning between animations and setting layer weight.\n */\n function AnimationLayer() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationLayer_classCallCheck(this, AnimationLayer);\n\n _this = _super.call(this, options);\n _this.name = options.name === undefined ? \'AnimationLayer\' : options.name;\n _this._blendMode = Array.from(Object.values(LayerBlendModes)).includes(options.blendMode) ? options.blendMode : DefaultLayerBlendMode;\n _this._promises = {\n weight: core_Deferred.resolve()\n };\n _this._weightPaused = false;\n _this.weight = typeof options.weight === \'number\' ? options.weight : 1;\n _this._internalWeight = _this._weight;\n return _this;\n }\n /**\n * Gets the type of blending used for states controlled by the layer.\n *\n * @readonly\n * @type {string}\n */\n\n\n AnimationLayer_createClass(AnimationLayer, [{\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n /**\n * Gets and sets the amount of influence the layer\'s current animation has over\n * the result for the host.\n *\n * @type {number}\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n }\n /**\n * Gets whether or not the layer\'s weight value is currently being animated.\n *\n * @readonly\n * @type {boolean}\n */\n ,\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\n * Pause the current animation state and any interpolation happening on the layer\'s\n * weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n this._weightPaused = true;\n return this.pauseAnimation() || this.weightPending;\n }\n /**\n * Resume the current animation state and any interpolation happening on the layer\'s\n * weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n this._weightPaused = false;\n var isWeightActive = this.weightPending;\n\n if (this._currentState) {\n return this.resumeAnimation() || isWeightActive;\n } else {\n return isWeightActive;\n }\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {number} weight - The target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target weight.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.weightPending) {\n this._promises.weight.cancel();\n }\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn !== undefined ? easingFn : this._easingFn\n });\n return this._promises.weight;\n }\n /**\n * Pause any interpolation happening on the layer\'s weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pauseWeight",\n value: function pauseWeight() {\n this._weightPaused = true;\n return this.weightPending;\n }\n /**\n * Resume any interpolation happening on the layer\'s weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "resumeWeight",\n value: function resumeWeight() {\n this._weightPaused = false;\n return this.weightPending;\n }\n /**\n * Multiplies the user weight by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\n * Returns the names of blend states in an animation.\n *\n * @param {string} animationName - Name of the animation.\n *\n * @returns {Array.} - Names of blend states.\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(animationName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getStateNames();\n }\n\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\n * Update the weight for a blend state of an animation.\n *\n * @param {string} animationName - Name of the animation containing the blend state\n * to update.\n * @param {string} blendName - Name of the blend state to update.\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\n * in the 0-1 range.\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\n * Default is zero and will set immediately.\n * @param {Function=} easingFn - Easing function to use while interpolating the new\n * weight. Default is Easing.Linear.InOut.\n *\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\n * the target value.\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(animationName, blendName, weight) {\n var seconds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var easingFn = arguments.length > 4 ? arguments[4] : undefined;\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.setBlendWeight(blendName, weight, seconds, easingFn);\n }\n\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\n * Returns the weight for a blend state of an animation.\n *\n * @param {string} animationName - Name of the animation containing the blend state\n * to update.\n * @param {string} blendName - Name of the blend state to retrieve the weight of.\n *\n * @returns {number} - Weight of the blend state.\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(animationName, blendName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getBlendWeight(blendName);\n }\n\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\n * Update any weight interpolators and the current animation.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "update", this).call(this, deltaTime);\n\n if (!this._paused && !this._weightPaused) {\n this._promises.weight.execute(deltaTime);\n }\n }\n /**\n * Cancel any pending promises and discard states controlled by the layer.\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "discard", this).call(this);\n\n this.discardStates();\n\n this._promises.weight.cancel();\n\n delete this._promises;\n }\n }]);\n\n return AnimationLayer;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin()));\n\n/* harmony default export */ var animpack_AnimationLayer = (AnimationLayer_AnimationLayer);\n// CONCATENATED MODULE: ./src/core/animpack/state/SingleState.js\nfunction SingleState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SingleState_typeof = function _typeof(obj) { return typeof obj; }; } else { SingleState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SingleState_typeof(obj); }\n\nfunction SingleState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SingleState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SingleState_createClass(Constructor, protoProps, staticProps) { if (protoProps) SingleState_defineProperties(Constructor.prototype, protoProps); if (staticProps) SingleState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SingleState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SingleState_setPrototypeOf(subClass, superClass); }\n\nfunction SingleState_setPrototypeOf(o, p) { SingleState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SingleState_setPrototypeOf(o, p); }\n\nfunction SingleState_createSuper(Derived) { var hasNativeReflectConstruct = SingleState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SingleState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SingleState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SingleState_possibleConstructorReturn(this, result); }; }\n\nfunction SingleState_possibleConstructorReturn(self, call) { if (call && (SingleState_typeof(call) === "object" || typeof call === "function")) { return call; } return SingleState_assertThisInitialized(self); }\n\nfunction SingleState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SingleState_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; } }\n\nfunction SingleState_getPrototypeOf(o) { SingleState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SingleState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\n * Class for playing a single animation clip.\n *\n * @extends AbstractState\n * @alias core/SingleState\n */\n\nvar SingleState_SingleState = /*#__PURE__*/function (_AbstractState) {\n SingleState_inherits(SingleState, _AbstractState);\n\n var _super = SingleState_createSuper(SingleState);\n\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation state.\n * @param {string=} options.name - Name for the animation state. Names must be\n * unique for the layer the state is applied to.\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\n * animation.\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\n * repeat before finishing.\n * @param {string} [options.blendMode=DefaultLayerBlendMode] - Type of\n * blending the animation should use.\n */\n function SingleState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n SingleState_classCallCheck(this, SingleState);\n\n _this = _super.call(this, options);\n _this._timeScale = options.timeScale !== undefined ? options.timeScale : 1;\n _this._promises.timeScale = core_Deferred.resolve();\n _this._loopCount = options.loopCount !== undefined ? options.loopCount : Infinity;\n _this._blendMode = validateBlendMode(options.blendMode);\n return _this;\n }\n /**\n * Gets and sets the normalized playing time of the current animation\n *\n * @type {number}\n */\n\n\n SingleState_createClass(SingleState, [{\n key: "normalizedTime",\n get: function get() {\n return 0;\n },\n set: function set(time) {}\n /**\n * Gets and sets the a factor to scale animation playback speed with.\n *\n * @type {number}\n */\n\n }, {\n key: "timeScale",\n get: function get() {\n return this._timeScale;\n },\n set: function set(timeScale) {\n this._timeScale = timeScale;\n }\n /**\n * Gets whether or not the timeScale is currently being animated.\n *\n * @readonly\n * @type {boolean}\n */\n\n }, {\n key: "timeScalePending",\n get: function get() {\n return this._promises.timeScale.pending;\n }\n /**\n * Updates the timeScale value over time.\n *\n * @param {number} weight - The target timeScale value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target timeScale.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setTimeScale",\n value: function setTimeScale(timeScale) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.timeScale.cancel();\n\n this._promises.timeScale = animpack_AnimationUtils.interpolateProperty(this, \'timeScale\', timeScale, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.timeScale;\n }\n /**\n * Gets and sets the number of times the animation will repeat before finishing.\n *\n * @type {number}\n */\n\n }, {\n key: "loopCount",\n get: function get() {\n return this._loopCount;\n },\n set: function set(loopCount) {\n this._loopCount = loopCount;\n }\n /**\n * Gets the type of blending used for the animation.\n *\n * @readonly\n * @type {string}\n */\n\n }, {\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n }]);\n\n return SingleState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_SingleState = (SingleState_SingleState);\n// CONCATENATED MODULE: ./src/core/animpack/state/RandomAnimationState.js\nfunction RandomAnimationState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { RandomAnimationState_typeof = function _typeof(obj) { return typeof obj; }; } else { RandomAnimationState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return RandomAnimationState_typeof(obj); }\n\nfunction RandomAnimationState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction RandomAnimationState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction RandomAnimationState_createClass(Constructor, protoProps, staticProps) { if (protoProps) RandomAnimationState_defineProperties(Constructor.prototype, protoProps); if (staticProps) RandomAnimationState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction RandomAnimationState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { RandomAnimationState_get = Reflect.get; } else { RandomAnimationState_get = function _get(target, property, receiver) { var base = RandomAnimationState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return RandomAnimationState_get(target, property, receiver || target); }\n\nfunction RandomAnimationState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = RandomAnimationState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction RandomAnimationState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) RandomAnimationState_setPrototypeOf(subClass, superClass); }\n\nfunction RandomAnimationState_setPrototypeOf(o, p) { RandomAnimationState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return RandomAnimationState_setPrototypeOf(o, p); }\n\nfunction RandomAnimationState_createSuper(Derived) { var hasNativeReflectConstruct = RandomAnimationState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = RandomAnimationState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = RandomAnimationState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return RandomAnimationState_possibleConstructorReturn(this, result); }; }\n\nfunction RandomAnimationState_possibleConstructorReturn(self, call) { if (call && (RandomAnimationState_typeof(call) === "object" || typeof call === "function")) { return call; } return RandomAnimationState_assertThisInitialized(self); }\n\nfunction RandomAnimationState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction RandomAnimationState_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; } }\n\nfunction RandomAnimationState_getPrototypeOf(o) { RandomAnimationState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return RandomAnimationState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\n * Class for playing random animations at random intervals within this state.\n *\n * @extends AbstractState\n * @implements AnimationPlayerInterface\n * @implements StateContainerInterface\n */\n\nvar RandomAnimationState_RandomAnimationState = /*#__PURE__*/function (_AnimationPlayerInter) {\n RandomAnimationState_inherits(RandomAnimationState, _AnimationPlayerInter);\n\n var _super = RandomAnimationState_createSuper(RandomAnimationState);\n\n /**\n * @constructor\n *\n * @param {Object} [options={}] - Options for the container state.\n * @param {number} [options.playInterval=3] - The base animation playback interval.\n * @param {Array.} [subStates=[]] - states to be randomly picked to play\n */\n function RandomAnimationState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var subStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n RandomAnimationState_classCallCheck(this, RandomAnimationState);\n\n _this = _super.call(this, options);\n _this._playInterval = options.playInterval ? options.playInterval : 3;\n subStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\n * Gets and sets the base animation play interval\n *\n * @type {float}\n */\n\n\n RandomAnimationState_createClass(RandomAnimationState, [{\n key: "playInterval",\n get: function get() {\n return this._playInterval;\n },\n set: function set(playInterval) {\n this._playInterval = playInterval;\n }\n /**\n * Reset the internal timer for animation play interval\n *\n * @private\n */\n\n }, {\n key: "_resetTimer",\n value: function _resetTimer() {\n var _this2 = this;\n\n var playTimer = core_Utils.getRandomFloat(this._playInterval / 4, this._playInterval * 2);\n\n var onFinish = function onFinish() {\n _this2.playRandomAnimation(_this2._playCallbacks.onError);\n };\n\n this._promises.timer = core_Utils.wait(playTimer, {\n onFinish: onFinish\n });\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\n * Pick a random animation and utilize AnimationPlayerInterface to play that animation\n *\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n */\n\n }, {\n key: "playRandomAnimation",\n value: function playRandomAnimation(onError) {\n this._resetTimer();\n\n var states = this.getStateNames();\n\n if (this._currentState) {\n states.splice(states.indexOf(this._currentState.name), 1);\n }\n\n var randomState = states[core_Utils.getRandomInt(0, states.length)];\n this.playAnimation(randomState, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this.playRandomAnimation(onError);\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "pause",\n value: function pause() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "pause", this).call(this) && this.pauseAnimation();\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n if (this._currentState) {\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "cancel", this).call(this) && this.cancelAnimation();\n }\n }, {\n key: "stop",\n value: function stop() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "stop", this).call(this) && this.stopAnimation();\n }\n }, {\n key: "discard",\n value: function discard() {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return RandomAnimationState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_RandomAnimationState = (RandomAnimationState_RandomAnimationState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeature.js\nfunction AnimationFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeature_typeof(obj); }\n\nfunction AnimationFeature_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; }\n\nfunction AnimationFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeature_ownKeys(Object(source), true).forEach(function (key) { AnimationFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationFeature_get = Reflect.get; } else { AnimationFeature_get = function _get(target, property, receiver) { var base = AnimationFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationFeature_get(target, property, receiver || target); }\n\nfunction AnimationFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeature_setPrototypeOf(o, p) { AnimationFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeature_setPrototypeOf(o, p); }\n\nfunction AnimationFeature_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeature_possibleConstructorReturn(self, call) { if (call && (AnimationFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeature_assertThisInitialized(self); }\n\nfunction AnimationFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeature_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; } }\n\nfunction AnimationFeature_getPrototypeOf(o) { AnimationFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n\n\n\n\n/**\r\n * Enum for animation state classes.\r\n *\r\n * @readonly\r\n * @enum {Class}\r\n */\n\nvar AnimationTypes = {\n single: state_SingleState,\n freeBlend: state_FreeBlendState,\n queue: state_QueueState,\n randomAnimation: state_RandomAnimationState,\n blend1d: state_Blend1dState,\n blend2d: state_Blend2dState\n};\n/**\r\n * Feature for managing animations on an object.\r\n *\r\n * @extends AbstractHostFeature\r\n * @alias core/AnimationFeature\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.addLayer=onAddLayerEvent] - Message that is emitted after\r\n * [addLayer]{@link core/AnimationFeature#addLayer} has been successfully executed.\r\n * An object representing the name of the layer that was added and its index in\r\n * the layer stack with the signature {name: string, index: number} is supplied\r\n * as an argument to listener functions.\r\n * @property {string} [EVENTS.removeLayer=onRemoveLayerEvent] - Message that is\r\n * emitted after [removeLayer]{@link core/AnimationFeature#removeLayer} has been\r\n * successfully executed. An object representing the name of the layer that was\r\n * removed and its index in the layer stack with the signature {name: string, index: number}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.renameLayer=onRenameLayerEvent] - Message that is\r\n * emitted after [renameLayer]{@link core/AnimationFeature#renameLayer} has been\r\n * successfully executed. An object representing the original name of the layer\r\n * that was renamed and its updated name with the signature {oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.addAnimation=onAddAnimationEvent] - Message that is\r\n * emitted after [addAnimation]{@link core/AnimationFeature#addAnimation} has been\r\n * successfully executed. An object representing the name of the layer that the\r\n * animation was added to and the name of the animation that was added with the\r\n * signature {layerName: string, animationName: string} is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.removeAnimation=onRemovedAnimationEvent] - Message\r\n * that is emitted after [removeAnimation]{@link core/AnimationFeature#removeAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that the animation was removed from and the name of the animation that was removed\r\n * with the signature {layerName: string, animationName: string} is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.renameAnimation=onRenameAnimationEvent] - Message\r\n * that is emitted after [renameAnimation]{@link core/AnimationFeature#renameAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that contains the animation that was renamed, the original name of the animation\r\n * that was renamed and its updated name with the signature {layerName: string, oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link core/AnimationFeature#playAnimation}. An object representing\r\n * the name of the layer contains the animation that was played and the name of\r\n * the animation that was played with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link core/AnimationFeature#pauseAnimation}. An object representing\r\n * the name of the layer contains the animation that was paused and the name of\r\n * the animation that was paused with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link core/AnimationFeature#resumeAnimation}. An object representing\r\n * the name of the layer contains the animation that was resumed and the name of\r\n * the animation that was resumed with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link core/AnimationFeature#playAnimation}\r\n * or [resume]{@link core/AnimationFeature#resumeAnimation} are executed for a new speech.\r\n * An object representing the name of the layer contains the animation that was\r\n * interrupted and the name of the animation that was interrupted with the signature\r\n * {layerName: string, animationName: string} is supplied as an argument to listener\r\n * functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link core/AnimationFeature#stopAnimation} and when a speech reaches\r\n * the end of playback. An object representing\r\n * the name of the layer contains the animation that was stopped and the name of\r\n * the animation that was stopped with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n */\n\nvar AnimationFeature_AnimationFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AnimationFeature_inherits(AnimationFeature, _AbstractHostFeature);\n\n var _super = AnimationFeature_createSuper(AnimationFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object that owns the feature.\r\n */\n function AnimationFeature(host) {\n var _this;\n\n AnimationFeature_classCallCheck(this, AnimationFeature);\n\n _this = _super.call(this, host);\n _this._layers = [];\n _this._layerMap = {};\n _this._paused = false;\n return _this;\n }\n /**\r\n * Make sure a supplied layer index is within the range of layers.\r\n *\r\n * @private\r\n *\r\n * @param {number} index\r\n * @param {boolean} [existing=true] - Whether the index represents and existing\r\n * layer or a new layer to be added.\r\n *\r\n * @returns {number=}\r\n */\n\n\n AnimationFeature_createClass(AnimationFeature, [{\n key: "_validateIndex",\n value: function _validateIndex(index) {\n var existing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n // Index is invalid if there are no layers and we\'re checking for an existing layer index\n if (this._layers.length === 0 && existing) {\n return undefined;\n }\n\n var lastIndex = existing ? this._layers.length - 1 : this._layers.length; // Count from the end of the array for negative indices\n\n if (index < 0) {\n index = lastIndex + index + 1;\n }\n\n if (index < 0 || index > lastIndex) {\n return undefined;\n } else {\n return index;\n }\n }\n /**\r\n * Re-evaluate internal weight values of layers starting from the top of the\r\n * stack. Override layers\' weights affect the values of all layers lower in the\r\n * stack.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_updateInternalWeights",\n value: function _updateInternalWeights() {\n var numLayers = this._layers.length;\n var weightMultiplier = 1; // Update internal weight values on layers in reverse order\n\n for (var i = numLayers - 1; i >= 0; i--) {\n var layer = this._layers[i];\n layer.updateInternalWeight(weightMultiplier); // If the layer is override, update the multiplier with the remainder of the full weight\n\n if (layer.blendMode === LayerBlendModes.Override && layer.currentState) {\n weightMultiplier *= 1 - layer.currentState.internalWeight;\n }\n }\n }\n /**\r\n * Return a new instance of a SingleState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the SingleState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n *\r\n * @returns {core/SingleState}\r\n */\n\n }, {\n key: "_createSingleState",\n value: function _createSingleState(options) {\n return new state_SingleState(options);\n }\n /**\r\n * Return a new instance of a FreeBlendState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the FreeBlendState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n *\r\n * @returns {FreeBlendState}\r\n */\n\n }, {\n key: "_createFreeBlendState",\n value: function _createFreeBlendState(options) {\n var _this2 = this;\n\n var _options$blendStateOp = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp === void 0 ? [] : _options$blendStateOp;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this2._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_FreeBlendState(options, blendStates);\n }\n /**\r\n * Return a new instance of a QueueState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the QueueState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {number=} options.transitionTime - The amount of time it takes to transition\r\n * between queued states.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.queueOptions] - Array of options used to create the\r\n * queue states for this container.\r\n *\r\n * @returns {QueueState}\r\n */\n\n }, {\n key: "_createQueueState",\n value: function _createQueueState(options) {\n var _this3 = this;\n\n var _options$queueOptions = options.queueOptions,\n queueOptions = _options$queueOptions === void 0 ? [] : _options$queueOptions;\n var queueStates = queueOptions.map(function (queueOption) {\n return _this3._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({\n transitionTime: options.transitionTime\n }, queueOption), {}, {\n blendMode: options.blendMode\n }));\n });\n return new state_QueueState(options, queueStates);\n }\n /**\r\n * Return a new instance of a Blend1dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.} [options.blendThresholds] - Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend1dState",\n value: function _createBlend1dState(options) {\n var _this4 = this;\n\n var _options$blendStateOp2 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp2 === void 0 ? [] : _options$blendStateOp2;\n var _options$blendThresho = options.blendThresholds,\n blendThresholds = _options$blendThresho === void 0 ? [] : _options$blendThresho;\n var _options$blendMatchPh = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh === void 0 ? [] : _options$blendMatchPh;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this4._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend1dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a Blend2dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.>} [options.blendThresholds] - Array of Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend2dState",\n value: function _createBlend2dState(options) {\n var _this5 = this;\n\n var _options$blendStateOp3 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp3 === void 0 ? [] : _options$blendStateOp3;\n var _options$blendThresho2 = options.blendThresholds,\n blendThresholds = _options$blendThresho2 === void 0 ? [] : _options$blendThresho2;\n var _options$blendMatchPh2 = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh2 === void 0 ? [] : _options$blendMatchPh2;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this5._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend2dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a RandomAnimationState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the RandomAnimationState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.playInterval=3] - The base animation playback interval.\r\n * @param {Array.} [options.subStateOptions] - Array of options used to create the\r\n * sub states for this container.\r\n *\r\n * @returns {RandomAnimationState}\r\n */\n\n }, {\n key: "_createRandomAnimationState",\n value: function _createRandomAnimationState(options) {\n var _this6 = this;\n\n var _options$subStateOpti = options.subStateOptions,\n subStateOptions = _options$subStateOpti === void 0 ? [] : _options$subStateOpti;\n var subStates = [];\n subStateOptions.forEach(function (subStateOptions) {\n subStates.push(_this6._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, subStateOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_RandomAnimationState(options, subStates);\n }\n /**\r\n * Make sure the layer with the given name exists and return a unique version\r\n * of the animation name supplied for that layer.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer to check against.\r\n * @param {string} animationName - Name of the animation to validate.\r\n *\r\n * @returns {string} Validated animation name.\r\n */\n\n }, {\n key: "_validateNewAnimation",\n value: function _validateNewAnimation(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot add animation to layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the animationName is unique\n\n\n var name = core_Utils.getUniqueName(animationName, layer.getStateNames());\n\n if (name !== animationName) {\n console.warn("Animation name ".concat(animationName, " is not unique for layer ").concat(layer.name, ". Animation will be renamed to ").concat(name, "."));\n }\n\n return name;\n }\n /**\r\n * Gets whether or not all animations are paused.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\r\n * Gets an array of names of animation layers.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "layers",\n get: function get() {\n return this._layers.map(function (layer) {\n return layer.name;\n });\n }\n /**\r\n * Create and store a new animation layer.\r\n *\r\n * @param {string} [name=\'NewLayer\'] - Name for the layer.\r\n * @param {Object} [options={}] - Options to pass to {@link AnimationLayer#constructor}\r\n * @param {index=} index - Index to insert the new layer at. If none is provided\r\n * it will be added to the end of the stack.\r\n *\r\n * @returns {number} Index of the new layer.\r\n */\n\n }, {\n key: "addLayer",\n value: function addLayer() {\n var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \'NewLayer\';\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var index = arguments.length > 2 ? arguments[2] : undefined;\n var numLayers = this._layers.length;\n var layerIndex = index; // Make sure the given index is within the range of layers\n\n if (index === undefined || index === -1) {\n layerIndex = this._layers.length;\n } else {\n layerIndex = this._validateIndex(index, false);\n\n if (layerIndex === undefined) {\n // Insert at the beginning if the user passed in a negative index\n if (index < 0) {\n layerIndex = 0;\n } // Otherwise append to the end\n else {\n layerIndex = this._layers.length;\n }\n\n console.warn("Index ".concat(index, " is invalid for host ").concat(this._host.id, ". New layer will be added at the closest valid index: ").concat(layerIndex, "."));\n }\n } // Make sure the layer name is unique\n\n\n var layerName = core_Utils.getUniqueName(name, Object.keys(this._layerMap));\n\n if (name !== layerName) {\n console.warn("Layer name ".concat(name, " is not unique. New layer will be added with the name ").concat(layerName, "."));\n }\n\n var layer = new animpack_AnimationLayer(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, options), {}, {\n name: layerName\n }));\n this._layerMap[layerName] = layer;\n\n if (layerIndex === numLayers) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n } // Notify that a layer has been added to the feature\n\n\n var eventData = {\n name: layerName,\n index: layerIndex\n };\n this.emit(this.constructor.EVENTS.addLayer, eventData);\n return eventData;\n }\n /**\r\n * Remove an animation layer from the stack. Animations on this layer will no\r\n * longer be evaluated.\r\n *\r\n * @param {string} name - Name for the layer to remove.\r\n *\r\n * @returns {boolean} Whether or not removal was successful.\r\n */\n\n }, {\n key: "removeLayer",\n value: function removeLayer(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not remove layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n layer.discard();\n\n var index = this._layers.indexOf(layer);\n\n this._layers.splice(index, 1);\n\n delete this._layerMap[name]; // Notify that a layer has been removed from the feature\n\n this.emit(this.constructor.EVENTS.removeLayer, {\n name: name,\n index: index\n });\n return true;\n }\n /**\r\n * Re-order the layer stack so that the layer with the given name is positioned\r\n * at the given index.\r\n *\r\n * @param {string} name - Name of the layer to move.\r\n * @param {number} index - New index to position the layer at.\r\n *\r\n * @returns {number} The new index of the layer\r\n */\n\n }, {\n key: "moveLayer",\n value: function moveLayer(name, index) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the index falls in the range of existing layers\n\n\n var layerIndex = this._validateIndex(index, true);\n\n var lastIndex = this._layers.length - 1;\n\n if (layerIndex === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, " to index ").concat(index, ". Index must be in the 0 - ").concat(lastIndex, " range."));\n }\n\n var currentIndex = this._layers.indexOf(layer);\n\n if (currentIndex === layerIndex) {\n return;\n } // Remove from the current position\n\n\n this._layers.splice(currentIndex, 1); // Insert at the new position\n\n\n if (layerIndex === lastIndex) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n }\n\n return layerIndex;\n }\n /**\r\n * Update the name of a layer. Names must be unique, if the new name is not\r\n * unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} currentName - Current name of the layer.\r\n * @param {string} newName - New name to set on the layer.\r\n *\r\n * @returns {string} The new name of the layer\r\n */\n\n }, {\n key: "renameLayer",\n value: function renameLayer(currentName, newName) {\n // Make sure the name is valid\n var layer = this._layerMap[currentName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename layer ".concat(currentName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the layer name is unique\n\n\n var name = core_Utils.getUniqueName(newName, Object.keys(this._layerMap));\n\n if (name !== newName) {\n console.warn("Layer name ".concat(newName, " is not unique. Layer will be renamed to ").concat(name, "."));\n }\n\n delete this._layerMap[currentName];\n this._layerMap[name] = layer;\n layer.name = name; // Notify that a layer has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameLayer, {\n oldName: currentName,\n newName: name\n });\n return name;\n }\n /**\r\n * Return the weight of an animation layer.\r\n *\r\n * @param {string} name - Name of the layer to return weight from.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getLayerWeight",\n value: function getLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot get weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.weight;\n }\n /**\r\n * Update the weight of an animation layer.\r\n *\r\n * @param {string} name - The name of the layer to update.\r\n * @param {number} weight - The weight value to set on the layer. This number\r\n * should be in the 0-1 range.\r\n * @param {number=} seconds - The number of seconds it should take to reach the\r\n * new weight. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while interpolating\r\n * the weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} A promise that will resolve once the layer\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setLayerWeight",\n value: function setLayerWeight(name, weight, seconds, easingFn) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot set weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setWeight(weight, seconds, easingFn);\n }\n /**\r\n * Returns the names of blend states in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n *\r\n * @returns {Array.} - Names of blend states.\r\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(layerName, animationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend names on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendNames(animationName);\n }\n /**\r\n * Update the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\r\n * in the 0-1 range.\r\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\r\n * Default is zero and will set immediately.\r\n * @param {Function=} easingFn - Easing function to use while interpolating the new\r\n * weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(layerName, animationName, blendName, weight, seconds, easingFn) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot set blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setAnimationBlendWeight(animationName, blendName, weight, seconds, easingFn);\n }\n /**\r\n * Returns the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n *\r\n * @returns {number} - Weight of the blend state.\r\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(layerName, animationName, blendName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendWeight(animationName, blendName);\n }\n /**\r\n * Pause weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation to pause.\r\n */\n\n }, {\n key: "pauseLayerWeight",\n value: function pauseLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pauseWeight();\n }\n /**\r\n * Resume weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value.\r\n */\n\n }, {\n key: "resumeLayerWeight",\n value: function resumeLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resumeWeight();\n }\n /**\r\n * Pause current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animation to pause.\r\n */\n\n }, {\n key: "pauseLayer",\n value: function pauseLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pause();\n }\n /**\r\n * Resume current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value\r\n * and it\'s current animation finishes playing.\r\n */\n\n }, {\n key: "resumeLayer",\n value: function resumeLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resume();\n }\n /**\r\n * Return whether or not the animation layer with the given name is currently\r\n * transitioning between animations.\r\n *\r\n * @param {string} layerName - Name of the layer to check.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getTransitioning",\n value: function getTransitioning(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get transitioning on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.isTransitioning;\n }\n /**\r\n * Return an array of the names of all states the layer with the given name controls.\r\n *\r\n * @param {string} layerName - Name of the layer to search.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "getAnimations",\n value: function getAnimations(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animations on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getStateNames();\n }\n /**\r\n * Return the name of the state currently active on the layer with the given name.\r\n * Return null if there is no current animation for the layer.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {(string|null)}\r\n */\n\n }, {\n key: "getCurrentAnimation",\n value: function getCurrentAnimation(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get current animation on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentAnimation;\n }\n /**\r\n * Return whether or not a layer with the given name is currently playing an\r\n * animation and that animation is paused.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getPaused",\n value: function getPaused(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get paused on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentState && layer.currentState.paused;\n }\n /**\r\n * Return the type name of the given animation. @see AnimationTypes.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation to check.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getAnimationType",\n value: function getAnimationType(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animation type on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var state = layer.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Get animation type for animation ".concat(animationName, " on layer ").concat(layerName, " from host ").concat(this._host.id, ". No animation exists with this name."));\n }\n\n var constructor = state.constructor;\n return Object.keys(AnimationTypes).find(function (typeName) {\n return AnimationTypes[typeName] === constructor;\n });\n }\n /**\r\n * Add a new animation to an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to add the animation to.\r\n * @param {string} animationName - Name to use when calling the animation.\r\n * @param {Object=} options - Options to pass to the constructor for the new\r\n * SingleState animation.\r\n *\r\n * @returns {string} - The name of the animation that was added\r\n */\n\n }, {\n key: "addAnimation",\n value: function addAnimation(layerName, animationName) {\n var animationType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : AnimationTypes.single;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n options.name = this._validateNewAnimation(layerName, animationName); // Make sure the animation type is valid\n\n if (!Object.values(AnimationTypes).includes(animationType)) {\n throw new Error("Cannot add animation ".concat(animationName, " to layer ").concat(layerName, " on host ").concat(this._host.id, ". Invalid animation type."));\n }\n\n var layer = this._layerMap[layerName];\n options.blendMode = layer.blendMode;\n options.transitionTime = layer.transitionTime;\n var state = this["_create".concat(animationType.name)](options);\n var name = layer.addState(state); // Notify that an animation has been added to the feature\n\n this.emit(this.constructor.EVENTS.addAnimation, {\n layerName: layerName,\n animationName: name\n });\n return name;\n }\n /**\r\n * Remove an animation from an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to remove the animation from.\r\n * @param {string} name - Name of the animation to remove.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "removeAnimation",\n value: function removeAnimation(layerName, animationName) {\n // Make sure the name is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot remove animation from layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var removed = layer.removeState(animationName); // Notify that an animation has been removed from the feature\n\n if (removed === true) {\n this.emit(this.constructor.EVENTS.removeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }\n\n return removed;\n }\n /**\r\n * Update the name of an animation. Names must be unique on each layer, if the new\r\n * name is not unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation that\r\n * will be renamed,\r\n * @param {string} currentAnimationName - Current name of the animation.\r\n * @param {string} newAnimationName - New name to set on the animation.\r\n *\r\n * @returns {string} - The new name of the animation\r\n */\n\n }, {\n key: "renameAnimation",\n value: function renameAnimation(layerName, currentAnimationName, newAnimationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename animation ".concat(currentAnimationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var name = layer.renameState(currentAnimationName, newAnimationName); // Notify that an animation has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameAnimation, {\n layerName: layerName,\n oldName: currentAnimationName,\n newName: name\n });\n return name;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from the beginning.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation state to play.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(layerName, animationName, seconds, easingFn) {\n var _this7 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that a new animation has begun\n\n\n this.emit(this.constructor.EVENTS.playAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.playAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this7.emit(_this7.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this7.emit(_this7.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref) {\n var name = _ref.name,\n canAdvance = _ref.canAdvance,\n isQueueEnd = _ref.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this7.emit(_this7.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Play the next animation in the queue of a QueueState animation.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the queue animation.\r\n * @param {string=} animationName - Name of the animation queue animation. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the queue animation if it\'s not already currently playing. Default is zero\r\n * and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * to the queue animation if it isn\'t already playing. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the last animation in the queue finishes\r\n * playing.\r\n */\n\n }, {\n key: "playNextAnimation",\n value: function playNextAnimation(layerName, animationName, transitionTime, easingFn) {\n var _this8 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n if (animationName === undefined) {\n animationName = layer.currentAnimation;\n }\n\n var animation = layer.getState(layer.currentAnimation);\n\n if (animation === null) {\n var _e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No animation exists with name ").concat(animationName, ".");\n\n return core_Deferred.reject(_e);\n } else if (this.getAnimationType(layerName, animationName) !== \'queue\') {\n var _e2 = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". ").concat(animationName, " is not a queue state.");\n\n return core_Deferred.reject(_e2);\n }\n\n var onNext = function onNext(_ref2) {\n var name = _ref2.name,\n canAdvance = _ref2.canAdvance,\n isQueueEnd = _ref2.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this8.emit(_this8.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n }; // Make the queue animation current if it wasn\'t already\n\n\n if (layer.currentAnimation === null) {\n layer.resumeAnimation(animation.name, transitionTime, easingFn, undefined, undefined, undefined, onNext);\n }\n\n return animation.next(onNext, true);\n }\n /**\r\n * Pause the current animation on a layer.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully paused.\r\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not pause animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n var paused = layer.pauseAnimation(); // Notify that an animation was paused\n\n if (paused) {\n var animationName = layer.currentAnimation;\n this.emit(this.constructor.EVENTS.pauseAnimation, {\n layerName: name,\n animationName: animationName\n });\n }\n\n return paused;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from where it\r\n * last left off.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string=} animationName - Name of the animation state to resume. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(layerName, animationName, seconds, easingFn) {\n var _this9 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot resume animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that an animation was resumed\n\n\n this.emit(this.constructor.EVENTS.resumeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.resumeAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this9.emit(_this9.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this9.emit(_this9.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref3) {\n var name = _ref3.name,\n canAdvance = _ref3.canAdvance,\n isQueueEnd = _ref3.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this9.emit(_this9.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Stop the current animation on a layer. Stop rewinds the animation to the\r\n * beginning and prevents it from progressing forward.\r\n *\r\n * @param {string} name - Name of the layer that contains the animation.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully stopped.\r\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not stop animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n return layer.stopAnimation();\n }\n /**\r\n * Pause current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to pause.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n var paused = false;\n\n this._layers.forEach(function (l) {\n if (l.pause()) {\n paused = true;\n }\n });\n\n return paused;\n }\n /**\r\n * Resume current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to resume.\r\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n var resumed = false;\n\n this._layers.forEach(function (l) {\n if (l.resume()) {\n resumed = true;\n }\n });\n\n return resumed;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see AnimationFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this10 = this;\n\n /**\r\n * @inner\r\n * @namespace AnimationFeature\r\n */\n var api = AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#paused\r\n */\n paused: {\n get: function get() {\n return _this10.paused;\n }\n },\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#layers\r\n */\n layers: {\n get: function get() {\n return _this10.layers;\n }\n }\n });\n Object.assign(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addLayer\r\n */\n addLayer: this.addLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeLayer\r\n */\n removeLayer: this.removeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#moveLayer\r\n */\n moveLayer: this.moveLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameLayer\r\n */\n renameLayer: this.renameLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getLayerWeight\r\n */\n getLayerWeight: this.getLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setLayerWeight\r\n */\n setLayerWeight: this.setLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayerWeight\r\n */\n pauseLayerWeight: this.pauseLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayerWeight\r\n */\n resumeLayerWeight: this.resumeLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayer\r\n */\n pauseLayer: this.pauseLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayer\r\n */\n resumeLayer: this.resumeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getTransitioning\r\n */\n getTransitioning: this.getTransitioning.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimations\r\n */\n getAnimations: this.getAnimations.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getCurrentAnimation\r\n */\n getCurrentAnimation: this.getCurrentAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getPaused\r\n */\n getPaused: this.getPaused.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationType\r\n */\n getAnimationType: this.getAnimationType.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addAnimation\r\n */\n addAnimation: this.addAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeAnimation\r\n */\n removeAnimation: this.removeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameAnimation\r\n */\n renameAnimation: this.renameAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendNames\r\n */\n getAnimationBlendNames: this.getAnimationBlendNames.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendWeight\r\n */\n getAnimationBlendWeight: this.getAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setAnimationBlendWeight\r\n */\n setAnimationBlendWeight: this.setAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playAnimation\r\n */\n playAnimation: this.playAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playNextAnimation\r\n */\n playNextAnimation: this.playNextAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseAnimation\r\n */\n pauseAnimation: this.pauseAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeAnimation\r\n */\n resumeAnimation: this.resumeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#stopAnimation\r\n */\n stopAnimation: this.stopAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resume\r\n */\n resume: this.resume.bind(this)\n });\n }\n /**\r\n * Update each animation layer.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._layers.length) {\n return;\n }\n\n if (this._paused) {\n deltaTime = 0;\n } // Re-evaluate internal weights for layers\n\n\n this._updateInternalWeights(); // Update layers\n\n\n this._layers.forEach(function (layer) {\n layer.update(deltaTime);\n });\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "update", this).call(this, deltaTime);\n }\n }, {\n key: "discard",\n value: function discard() {\n this._layers.forEach(function (layer) {\n layer.discard();\n });\n\n delete this._layers;\n delete this._layerMap;\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "discard", this).call(this);\n }\n }]);\n\n return AnimationFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperty(AnimationFeature_AnimationFeature, \'EVENTS\', {\n value: AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, Object.getPrototypeOf(core_AbstractHostFeature).EVENTS), {}, {\n addLayer: \'onAddLayerEvent\',\n removeLayer: \'onRemoveLayerEvent\',\n renameLayer: \'onRenameLayerEvent\',\n addAnimation: \'onAddAnimationEvent\',\n removeAnimation: \'onRemovedAnimationEvent\',\n renameAnimation: \'onRenameAnimationEvent\',\n playAnimation: \'onPlayEvent\',\n playNextAnimation: \'onNextEvent\',\n pauseAnimation: \'onPauseEvent\',\n resumeAnimation: \'onResumeEvent\',\n interruptAnimation: \'onInterruptEvent\',\n stopAnimation: \'onStopEvent\'\n })\n});\n/* harmony default export */ var animpack_AnimationFeature = (AnimationFeature_AnimationFeature);\n// CONCATENATED MODULE: ./src/core/PointOfInterestFeature.js\nfunction PointOfInterestFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { PointOfInterestFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { PointOfInterestFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return PointOfInterestFeature_typeof(obj); }\n\nfunction PointOfInterestFeature_slicedToArray(arr, i) { return PointOfInterestFeature_arrayWithHoles(arr) || PointOfInterestFeature_iterableToArrayLimit(arr, i) || PointOfInterestFeature_unsupportedIterableToArray(arr, i) || PointOfInterestFeature_nonIterableRest(); }\n\nfunction PointOfInterestFeature_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction PointOfInterestFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction PointOfInterestFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction PointOfInterestFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction PointOfInterestFeature_toConsumableArray(arr) { return PointOfInterestFeature_arrayWithoutHoles(arr) || PointOfInterestFeature_iterableToArray(arr) || PointOfInterestFeature_unsupportedIterableToArray(arr) || PointOfInterestFeature_nonIterableSpread(); }\n\nfunction PointOfInterestFeature_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction PointOfInterestFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return PointOfInterestFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return PointOfInterestFeature_arrayLikeToArray(o, minLen); }\n\nfunction PointOfInterestFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction PointOfInterestFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return PointOfInterestFeature_arrayLikeToArray(arr); }\n\nfunction PointOfInterestFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction PointOfInterestFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction PointOfInterestFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction PointOfInterestFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) PointOfInterestFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) PointOfInterestFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction PointOfInterestFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { PointOfInterestFeature_get = Reflect.get; } else { PointOfInterestFeature_get = function _get(target, property, receiver) { var base = PointOfInterestFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return PointOfInterestFeature_get(target, property, receiver || target); }\n\nfunction PointOfInterestFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = PointOfInterestFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction PointOfInterestFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) PointOfInterestFeature_setPrototypeOf(subClass, superClass); }\n\nfunction PointOfInterestFeature_setPrototypeOf(o, p) { PointOfInterestFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return PointOfInterestFeature_setPrototypeOf(o, p); }\n\nfunction PointOfInterestFeature_createSuper(Derived) { var hasNativeReflectConstruct = PointOfInterestFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = PointOfInterestFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = PointOfInterestFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return PointOfInterestFeature_possibleConstructorReturn(this, result); }; }\n\nfunction PointOfInterestFeature_possibleConstructorReturn(self, call) { if (call && (PointOfInterestFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return PointOfInterestFeature_assertThisInitialized(self); }\n\nfunction PointOfInterestFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction PointOfInterestFeature_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; } }\n\nfunction PointOfInterestFeature_getPrototypeOf(o) { PointOfInterestFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return PointOfInterestFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/* eslint-disable no-unused-vars */\n\n\n\n\n\n\n\n/**\n * Enum for axis directions.\n *\n * @readonly\n * @enum {Class}\n */\n\nvar AxisMap = {\n PositiveX: [1, 0, 0],\n NegativeX: [-1, 0, 0],\n PositiveY: [0, 1, 0],\n NegativeY: [0, -1, 0],\n PositiveZ: [0, 0, 1],\n NegativeZ: [0, 0, -1]\n};\nvar FaceTargetTypes = {\n EyeCenter: 0,\n EyeLeft: 1,\n EyeRight: 2,\n Mouth: 3\n}; // Average distance between pupils is .064m, golden ratio says that the distance\n// from center of the pupils to the center of the mouth should be about the same.\n\nvar FaceVectors = [[0, 0, 0], [-.032, 0, 0], [.032, 0, 0], [0, -.064, 0]]; // Time ranges to use when choosing a new random wait time between saccades\n\nvar MicroSaccadeWaitRanges = {\n "default": [0.8, 1.75],\n postMacro: [0.6, 1.3125]\n};\nvar MacroSaccadeWaitRanges = {\n "default": [5.0, 8.0],\n mouthTarget: [0.2, 0.75],\n // Look away from a mouth target the fastest\n eyeTarget: [1.5, 4.0]\n}; // Minimum angle in degrees the eye direction must change to trigger a blink animation\n\nvar BlinkThreshold = 35; // Maximum number of milliseconds to use for calculating look speed\n\nvar MaxDelta = 100 / 3;\n/**\n * PointOfInterest controls the gaze direction of the host. Given one or more\n * animations of type Blend2dState, it calculates the angles between the lookTracker\n * object (generally a joint in the host\'s skeleton) and the lookTarget (the object\n * the host should look at) and drives the managed Blend2dStates\' X and Y blend\n * values using the result. You can optionally add saccadic movement to any managed\n * animation to help make the host\'s eyes appear alive when focused on the same\n * point for exteded periods of time. If blink animations are specified, a blink\n * will be played during large changes in gaze direction.\n *\n * @extends AbstractHostFeature\n * @alias core/PointOfInterestFeature\n * @implements SSMLSpeechmarkInterface\n * @implements ManagedAnimationLayerInterface\n */\n\nvar PointOfInterestFeature_PointOfInterestFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n PointOfInterestFeature_inherits(PointOfInterestFeature, _AbstractHostFeature$);\n\n var _super = PointOfInterestFeature_createSuper(PointOfInterestFeature);\n\n /**\n * @constructor\n *\n * @param {core/HostObject} host - Host that owns the feature.\n * @param {Object=} options - Options for the feature.\n * @param {Object=} target - 3D transformation node that the host should try to\n * look at.\n * @param {Object} options.lookTracker - 3D transformation node that represents\n * the direction the host is currently looking during animation.\n * @param {Object=} options.scene - Engine-specific scene object that contains\n * the host. This object must be defined if using \'setTargetByName\' or \'SetTargetById\'\n * methods.\n * @param {Object=} lookOptions - Options for the look animation layers.\n * @param {number} [lookOptions.blendTime=0.1] - Default amount of time it will\n * take to manipulate the weights of the look layers.\n * @param {number} [lookOptions.easingFn=Quadratic.InOut] - Default easing function\n * to use when manipulating look layer weights.\n * @param {Array.} [lookOptions.layers=[]] - An array of layer options\n * objects to register as look layers.\n * @param {Object=} blinkOptions - Options for the blink animation layers.\n * @param {number} [blinkOptions.blendTime=0.075] - Default amount of time it\n * will take to manipulate the weights of the blink layers.\n * @param {number} [blinkOptions.easingFn=Quadratic.InOut] - Default easing function\n * to use when manipulating blink layer weights.\n * @param {Array.} [blinkOptions.layers=[]] - An array of layer options\n * objects to register as blink layers.\n */\n function PointOfInterestFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n target = _ref.target,\n lookTracker = _ref.lookTracker,\n scene = _ref.scene;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n lookBlendTime = _ref2$blendTime === void 0 ? 0.1 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n lookEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n lookLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var _ref3 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref3$blendTime = _ref3.blendTime,\n blinkBlendTime = _ref3$blendTime === void 0 ? 0.075 : _ref3$blendTime,\n _ref3$easingFn = _ref3.easingFn,\n blinkEasingFn = _ref3$easingFn === void 0 ? Quadratic.InOut : _ref3$easingFn,\n _ref3$layers = _ref3.layers,\n blinkLayers = _ref3$layers === void 0 ? [] : _ref3$layers;\n\n PointOfInterestFeature_classCallCheck(this, PointOfInterestFeature);\n\n _this = _super.call(this, host);\n\n if (!_this.constructor._validateTransformObject(lookTracker)) {\n throw new Error("Cannot initialize PointOfInterestFeature on host ".concat(_this._host.id, ". LookTracker must be defined as a valid transformation object."));\n }\n\n _this._lookTracker = lookTracker;\n _this._scene = scene;\n _this._target = target || null;\n _this._prevTargetPos = [0, 0, 0];\n _this._isTargetMoving = false;\n _this._lookLayers = _this._lookLayers || {};\n _this._trackingConfigs = _this._trackingConfigs || [];\n _this._blinkLayers = _this._blinkLayers || {}; // Register the look layers\n\n lookLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation,\n maxSpeed = _ref4.maxSpeed,\n reference = _ref4.reference,\n forwardAxis = _ref4.forwardAxis,\n hasSaccade = _ref4.hasSaccade,\n blendTime = _ref4.blendTime,\n easingFn = _ref4.easingFn;\n\n _this.registerLookLayer(name, {\n animation: animation,\n maxSpeed: maxSpeed,\n reference: reference,\n forwardAxis: forwardAxis,\n hasSaccade: hasSaccade,\n blendTime: blendTime !== undefined ? blendTime : lookBlendTime,\n easingFn: easingFn !== undefined ? easingFn : lookEasingFn\n });\n }); // Register the blink layers\n\n blinkLayers.forEach(function (_ref5) {\n var name = _ref5.name,\n animation = _ref5.animation,\n blendTime = _ref5.blendTime,\n easingFn = _ref5.easingFn;\n\n _this.registerBlinkLayer(name, {\n animation: animation,\n blendTime: blendTime !== undefined ? blendTime : blinkBlendTime,\n easingFn: easingFn !== undefined ? easingFn : blinkEasingFn\n });\n });\n return _this;\n }\n /**\n * Gets and sets the target object the host should look at.\n *\n * @type {Object|null}\n */\n\n\n PointOfInterestFeature_createClass(PointOfInterestFeature, [{\n key: "target",\n get: function get() {\n return this._target;\n },\n set: function set(target) {\n this._target = target || null;\n }\n /**\n * Return a vector representing the global position of an object. Should be\n * overloaded for each rendering engine implementation.\n *\n * @private\n *\n * @param {any} _obj - Engine-specific 3D transform object.\n *\n * @returns {Array.} - An array consisting of three numbers representing\n * x, y and z coordinates.\n */\n\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref6) {\n var name = _ref6.name;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the look animation\n\n\n if (this._lookLayers[name] !== undefined) {\n this._registerLookAnimation(name, this._lookLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref7) {\n var layerName = _ref7.layerName,\n animationName = _ref7.animationName;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the look animation\n\n\n if (this._lookLayers[layerName] === animationName) {\n this._registerLookAnimation(layerName, animationName);\n }\n }\n /**\n * Ensure that registered look animations are Blend2dStates.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the look animation.\n * @param {string} animationName - Name of the animation.\n */\n\n }, {\n key: "_registerLookAnimation",\n value: function _registerLookAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (AnimationTypes[this._host.AnimationFeature.getAnimationType(layerName, animationName)] !== AnimationTypes.blend2d) {\n // Warn and deactivate if the registered state is not blend2d\n console.warn("Cannot register Point of Interest look animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Look animations must be of type \'blend2d\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }\n /**\n * Check if the given object is not of an engine-specific type. Should\n * be overloaded for each rendering engine implementation.\n *\n * @private\n *\n * @param {any} obj - Object to validate.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "_addTrackingConfig",\n value:\n /**\n * Check if the given configuration object has already been stored as a tracking\n * config. If it has, return the stored configuration. Otherwise, store and\n * return it.\n *\n * @private\n *\n * @param {Object} config - Object containing tracker, reference and forwardAxis\n * properties.\n *\n * @returns {Object}\n */\n function _addTrackingConfig(config) {\n var trackingConfig = this._trackingConfigs.find(function (c) {\n return c.reference === config.reference && c.forwardAxis === config.forwardAxis;\n });\n\n if (trackingConfig) {\n return trackingConfig;\n } else {\n config.angles = {\n h: 0,\n v: 0\n };\n config.prevAngles = {\n h: 0,\n v: 0\n };\n\n this._trackingConfigs.push(config);\n\n return config;\n }\n }\n /**\n * Return the distance between the look tracker and the look target.\n *\n * @private\n *\n * @returns {number}\n */\n\n }, {\n key: "_getTargetDistance",\n value: function _getTargetDistance() {\n // Find the vector between the global positions of tracker and target\n var sourcePosition = this.constructor._getWorldPosition(this._lookTracker);\n\n var targetPosition = this.constructor._getWorldPosition(this._target);\n\n var lookVector = [targetPosition[0] - sourcePosition[0], targetPosition[1] - sourcePosition[1], targetPosition[2] - sourcePosition[2]];\n return core_MathUtils.getVectorMagnitude(lookVector);\n }\n /**\n * Reset all stored tracking angles to 0.\n *\n * @private\n */\n\n }, {\n key: "_resetLookAngles",\n value: function _resetLookAngles() {\n this._trackingConfigs.forEach(function (_ref8) {\n var angles = _ref8.angles;\n angles.h = 0;\n angles.v = 0;\n });\n }\n /**\n * Store the difference in horizontal and vertical rotation for the tracker\'s\n * reference rotation and the direction of the target from the tracker.\n *\n * @private\n */\n\n }, {\n key: "_setLookAngles",\n value: function _setLookAngles() {\n var _this2 = this;\n\n // Get the current positions of the tracker and target objects\n var targetPos = this.constructor._getWorldPosition(this._target);\n\n var trackerPos = this.constructor._getWorldPosition(this._lookTracker); // Check if the target has moved\n\n\n this._isTargetMoving = core_MathUtils.getVectorMagnitude([targetPos[0] - this._prevTargetPos[0], targetPos[1] - this._prevTargetPos[1], targetPos[2] - this._prevTargetPos[2]]) > 0;\n Object.assign(this._prevTargetPos, targetPos); // Calculate the horizontal and vertical angles to rotate to the target\n\n var targetSpherical = core_MathUtils.cartesianToSpherical(targetPos[0] - trackerPos[0], targetPos[1] - trackerPos[1], targetPos[2] - trackerPos[2]);\n\n var targetAngles = this.constructor._sphericalToBlendValue(targetSpherical[1], targetSpherical[2]); // Calculate angles relative to the reference objects\n\n\n this._trackingConfigs.forEach(function (_ref9) {\n var reference = _ref9.reference,\n forwardAxis = _ref9.forwardAxis,\n angles = _ref9.angles;\n\n // Calculate the horizontal and vertical angles to rotate to the direction of the tracker\n var refDirection = _this2.constructor._getObjectDirection(reference, forwardAxis);\n\n var refSpherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(refDirection));\n\n var refAngles = _this2.constructor._sphericalToBlendValue(refSpherical[1], refSpherical[2]); // Store the difference\n\n\n angles.h = targetAngles.h - refAngles.h;\n angles.v = targetAngles.v - refAngles.v;\n });\n }\n /**\n * Return the horizontal and vertical angles it would require to simulate looking\n * at the given type of face target\n *\n * @private\n *\n * @param {number} targetType - Integer representing the FaceTargetType.\n *\n * @returns {Object}- An object with signature {r: number, h: number, v: number}\n * where \'r\' represents radius, h represents the horizontal/azimuthal angle and\n * v represents the vertical/polar angle.\n */\n\n }, {\n key: "_getFaceTargetAngles",\n value: function _getFaceTargetAngles(targetType) {\n // No offset when the target is the center of the eyes\n if (targetType === 0) {\n return {\n h: 0,\n v: 0\n };\n } // Build a vector to the face target type using the current distance to the target\n\n\n var distance = this._getTargetDistance(this._lookTracker);\n\n var faceVector = PointOfInterestFeature_toConsumableArray(FaceVectors[targetType]);\n\n faceVector[2] = distance;\n var spherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(faceVector)); // Make sure values are clamped within the range of motion of the human eye, in case the target is very close\n\n var blendValues = this.constructor._sphericalToBlendValue(spherical[1], spherical[2]);\n\n blendValues.h = core_MathUtils.clamp(blendValues.h, -35, 35);\n blendValues.v = core_MathUtils.clamp(blendValues.v, -25, 30);\n return blendValues;\n }\n /**\n * Updated the stored speed and duration variables for a layer based on the\n * change in horizontal and vertical angles of the tracker.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer to store values on.\n * @param {number} h - Change in horizontal angle, in degrees.\n * @param {number} v - Change in vertical angle, in degrees.\n */\n\n }, {\n key: "_updateLayerSpeed",\n value: function _updateLayerSpeed(layerName, h, v) {\n var layer = this._managedLayers[layerName]; // From "Realistic Avatar and head Animation Using a Neurobiological Model of Visual Attention", Itti, Dhavale, Pighin\n\n layer.maxHSpeed = 473 * (1 - Math.exp(-h / 7.8));\n layer.maxVSpeed = 473 * (1 - Math.exp(-v / 7.8)); // From "Eyes Alive", Lee, Badler\n\n var D0 = 0.025;\n var d = 0.00235;\n layer.hDuration = D0 + d * h;\n layer.vDuration = D0 + d * v;\n }\n /**\n * Set the microSaccade object with new randomized values.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n */\n\n }, {\n key: "_setMicroSaccade",\n value: function _setMicroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var microSaccade = layer.microSaccade;\n\n if (this._target) {\n // Micro movements should be smaller when focused on a target\n microSaccade.h = core_Utils.getRandomFloat(.01, .15);\n microSaccade.v = core_Utils.getRandomFloat(.01, .15);\n } else {\n // Microsaccades. Encyclopedia of Neuroscience. (2009) Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-29678-2_3492\n microSaccade.h = core_Utils.getRandomFloat(.01, .3);\n microSaccade.v = core_Utils.getRandomFloat(.01, .3);\n }\n\n this._updateLayerSpeed(layerName, microSaccade.h, microSaccade.v); // Restart the timer\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n }\n /**\n * Set the macroSaccade object with new randomized values.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n */\n\n }, {\n key: "_setMacroSaccade",\n value: function _setMacroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var macroSaccade = layer.macroSaccade;\n var macroSaccadeWaitRange; // Increase random value range when not focused on a target\n\n if (!this._target) {\n macroSaccadeWaitRange = MacroSaccadeWaitRanges["default"]; // Normal human horizontal eye rotation limit is about 35 degrees\n\n var hLimit = core_Utils.getRandomFloat(.143, .286);\n var hFactor = core_Utils.getRandomFloat(-hLimit, hLimit);\n macroSaccade.h = hFactor * 35; // Normal human vertical eye rotation limit is about 25 degrees upward and 30 degrees downward\n\n var vLimit = core_Utils.getRandomFloat(.093, .186);\n var vFactor = core_Utils.getRandomFloat(-vLimit, vLimit);\n macroSaccade.v = vFactor > 0 ? vFactor * 25 : vFactor * 30;\n } // Pick a new face target\n else {\n // Social triangle - saccade between eyes and mouth, weighted to look at eyes more often\n switch (layer.saccadeTarget) {\n case 1:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeRight : FaceTargetTypes.Mouth;\n break;\n\n case 2:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.Mouth;\n break;\n\n case 3:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.mouthTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n\n case 0:\n default:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n }\n\n var _this$_getFaceTargetA = this._getFaceTargetAngles(layer.saccadeTarget),\n h = _this$_getFaceTargetA.h,\n v = _this$_getFaceTargetA.v;\n\n macroSaccade.h = h;\n macroSaccade.v = v;\n }\n\n this._updateLayerSpeed(layerName, macroSaccade.h, macroSaccade.v); // Restart the timers\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges.postMacro)));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n /**\n * Start a new wait timer that will set a new micro saccade movement when it\n * resolves.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\n * will be triggered.\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\n * will be triggered.\n */\n\n }, {\n key: "_initializeMicroTimer",\n value: function _initializeMicroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this3 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.microSaccadeTimer) {\n layer.microSaccadeTimer.cancel();\n }\n\n layer.microSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this3._setMicroSaccade(layerName);\n }\n });\n }\n /**\n * Start a new wait timer that will set a new macro saccade movement when it\n * resolves.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\n * will be triggered.\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\n * will be triggered.\n */\n\n }, {\n key: "_initializeMacroTimer",\n value: function _initializeMacroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this4 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.macroSaccadeTimer) {\n layer.macroSaccadeTimer.cancel();\n }\n\n layer.macroSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this4._setMacroSaccade(layerName);\n }\n });\n }\n /**\n * Sets a new target to look at.\n *\n * @param {Object|null} target - The new target to look at.\n */\n\n }, {\n key: "setTarget",\n value: function setTarget(target) {\n this.target = target;\n }\n /**\n * Finds an object given its name and sets it as the new target to look at.\n * Should be overloaded for each rendering engine implementation.\n *\n * @param {string} target - Name to search for.\n */\n\n }, {\n key: "setTargetByName",\n value: function setTargetByName(name) {\n if (!name) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using name ".concat(name, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\n * Finds an object given its id and sets it as the new target to look at.\n * Should be overloaded for each rendering engine implementation.\n *\n * @param {string|number} target - Id to search for.\n */\n\n }, {\n key: "setTargetById",\n value: function setTargetById(id) {\n if (!id) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using id ".concat(id, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\n * Start keeping track of an animation layer that owns a blend2d animation with\n * blendWeights corresponding to horizontal and vertical look angles.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation = \'look\'] - Name of the animation on the\n * layer whose blendWeights will be driven based on the angle between the lookTracker\n * and the lookTarget. This animation must be of type blend2d.\n * @param {number} [options.maxSpeed = 25] - The maximum speed at which the blend2d\n * blendWeights can be manipulated.\n * @param {string} [options.forwardAxis = \'PositiveZ\'] - Axis pointing from the\n * front of the lookReference object. Valid options are \'PositiveX\', \'NegativeX\',\n * \'PositiveY\', \'NegativeY\', \'PositiveZ\', \'NegativeZ\'.\n * @param {Object=} options.lookReference - 3D transformation node that the lookTracker\n * rotation limits should be calculated relative to. Defaults to the host owner.\n * @param {number} [options.hasSaccade = false] - Whether or not to include\n * saccadic motion onto the blendWeight animation. This should only be set to\n * true for blend2d animations representing eye animation.\n * @param {number=} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating layer weight.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating layer weight.\n */\n\n }, {\n key: "registerLookLayer",\n value: function registerLookLayer(layerName) {\n var _ref10 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref10$animation = _ref10.animation,\n animation = _ref10$animation === void 0 ? \'look\' : _ref10$animation,\n _ref10$maxSpeed = _ref10.maxSpeed,\n maxSpeed = _ref10$maxSpeed === void 0 ? 25 : _ref10$maxSpeed,\n reference = _ref10.reference,\n _ref10$forwardAxis = _ref10.forwardAxis,\n forwardAxis = _ref10$forwardAxis === void 0 ? \'PositiveZ\' : _ref10$forwardAxis,\n _ref10$hasSaccade = _ref10.hasSaccade,\n hasSaccade = _ref10$hasSaccade === void 0 ? false : _ref10$hasSaccade,\n _ref10$blendTime = _ref10.blendTime,\n blendTime = _ref10$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref10$blendTime,\n easingFn = _ref10.easingFn;\n\n // Validate reference object\n reference = reference || this._host.owner;\n\n if (!this.constructor._validateTransformObject(reference)) {\n throw new Error("Cannot initialize register look layer ".concat(layerName, " for PointOfInterestFeature on host ").concat(this._host.id, ". Reference must be defined as a valid transformation object."));\n } // Find vector associated with axis string\n\n\n forwardAxis = AxisMap[forwardAxis] !== undefined ? AxisMap[forwardAxis] : AxisMap.PositiveZ; // Store tracking configuration\n\n var trackingConfig = this._addTrackingConfig({\n reference: reference,\n forwardAxis: forwardAxis\n }); // Register the layer and animation\n\n\n this.registerLayer(layerName, {\n trackingConfig: trackingConfig,\n maxSpeed: maxSpeed,\n maxHSpeed: undefined,\n maxVSpeed: undefined,\n hDuration: undefined,\n vDuration: undefined,\n hVelocity: [0, 0],\n vVelocity: [0, 0],\n hasSaccade: hasSaccade,\n blendTime: blendTime,\n easingFn: easingFn,\n microSaccade: {\n h: 0,\n v: 0\n },\n macroSaccade: {\n h: 0,\n v: 0\n },\n saccadeTarget: FaceTargetTypes.EyeCenter,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._lookLayers[layerName] = animation; // Validate the look animation\n\n this._registerLookAnimation(layerName, animation); // Initialize saccade timers\n\n\n if (hasSaccade) {\n var macroSaccadeWaitRange = this._target ? MacroSaccadeWaitRanges.eyeTarget : MacroSaccadeWaitRanges["default"];\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n }\n /**\n * Start keeping track of an animation layer that owns a blink animation. Blink\n * animations can be of any type, but if it is of type randomAnimation then a\n * it will be randomized each time a blink is called.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation = \'blink\'] - Name of the blink animation\n * on the layer.\n * @param {number} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating the layer\'s weight.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating the layer\'s weight.\n */\n\n }, {\n key: "registerBlinkLayer",\n value: function registerBlinkLayer(layerName) {\n var _ref11 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref11$animation = _ref11.animation,\n animation = _ref11$animation === void 0 ? \'blink\' : _ref11$animation,\n _ref11$blendTime = _ref11.blendTime,\n blendTime = _ref11$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref11$blendTime,\n easingFn = _ref11.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._blinkLayers[layerName] = animation;\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this5 = this;\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "update", this).call(this, deltaTime); // Update the look angles\n\n\n if (this._target) {\n this._setLookAngles();\n } else {\n this._resetLookAngles();\n }\n\n var deltaSeconds = Math.min(deltaTime, MaxDelta) / 1000;\n var triggerBlink = false; // Set look blend values\n\n Object.entries(this._lookLayers).forEach(function (_ref12) {\n var _ref13 = PointOfInterestFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n var options = _this5._managedLayers[layerName]; // Increment the saccade timers\n\n if (options.isActive && options.hasSaccade) {\n options.microSaccadeTimer.execute(deltaTime);\n options.macroSaccadeTimer.execute(deltaTime);\n } // Set the blend values\n\n\n if (options.animations[animName].isActive) {\n var currentH = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'X\');\n\n var currentV = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'Y\');\n\n var targetH = options.trackingConfig.angles.h;\n var targetV = options.trackingConfig.angles.v; // Check if the look angle has changed enough to trigger a blink\n\n if (_this5._isTargetMoving && !triggerBlink) {\n var prevTargetH = options.trackingConfig.prevAngles.h;\n var prevTargetV = options.trackingConfig.prevAngles.v;\n var changeAmount = core_MathUtils.toDegrees(core_MathUtils.getAngleBetween([prevTargetH, prevTargetV], [targetH, targetV]));\n\n if (changeAmount >= BlinkThreshold) {\n triggerBlink = true;\n }\n }\n\n options.trackingConfig.prevAngles.h = targetH;\n options.trackingConfig.prevAngles.v = targetV; // Add in the saccade movement\n\n if (options.hasSaccade) {\n core_MathUtils.dampValue(0, options.macroSaccade.h + options.macroSaccade.h, options.hVelocity, options.hDuration, options.maxHSpeed);\n targetH += options.hVelocity[0];\n core_MathUtils.dampValue(0, options.macroSaccade.v + options.macroSaccade.v, options.vVelocity, options.vDuration, options.maxVSpeed);\n targetV += options.vVelocity[0];\n } // Clamp to max speed\n\n\n var factor = core_MathUtils.clamp(deltaSeconds * options.maxSpeed, 0, 1);\n targetH = core_MathUtils.lerp(currentH, targetH, factor);\n targetV = core_MathUtils.lerp(currentV, targetV, factor); // Update the blend values\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'X\', targetH);\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'Y\', targetV);\n }\n });\n\n if (!triggerBlink || !this._isTargetMoving) {\n return;\n } // Execute blink\n\n\n Object.entries(this._blinkLayers).forEach(function (_ref14) {\n var _ref15 = PointOfInterestFeature_slicedToArray(_ref14, 2),\n layerName = _ref15[0],\n animName = _ref15[1];\n\n var animation = _this5._managedLayers[layerName].animations[animName];\n\n if (animation.isActive) {\n _this5._host.AnimationFeature.playAnimation(layerName, animName);\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\n * @inner\n * @namespace PointOfInterestFeature\n */\n var api = PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @see core/PointOfInterestFeature#target\n */\n target: {\n get: function get() {\n return _this6.target;\n },\n set: function set(target) {\n _this6.target = target;\n }\n }\n });\n Object.assign(api, {\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#registerLookLayer\n */\n registerLookLayer: this.registerLookLayer.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#registerBlinkLayer\n */\n registerBlinkLayer: this.registerBlinkLayer.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#setTarget\n */\n setTarget: this.setTarget.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#setTargetByName\n */\n setTargetByName: this.setTargetByName.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#setTargetById\n */\n setTargetById: this.setTargetById.bind(this)\n });\n return api;\n }\n }], [{\n key: "_getWorldPosition",\n value: function _getWorldPosition(obj) {\n return [0, 0, 0];\n }\n /**\n * Return a matrix representing the global transformation matrix of an object.\n * Should be overloaded for each rendering engine implementation.\n *\n * @private\n *\n * @param {any} obj - Engine-specific 3D transform object.\n *\n * @returns {Array.} - An array consisting of 16 numbers representing\n * the 3d transformation.\n */\n\n }, {\n key: "_getWorldMatrix",\n value: function _getWorldMatrix(obj) {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n }\n /**\n * Rotate the given local direction vector by the object\'s world rotation matrix.\n *\n * @private\n *\n * @param {any} obj - Engine-specific 3D transform object.\n * @param {Array.} forwardVector - Unit vector representing the local\n * forward direction of the object.\n *\n * @returns {Array.}\n */\n\n }, {\n key: "_getObjectDirection",\n value: function _getObjectDirection(obj) {\n var forwardVector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : AxisMap.PositiveZ;\n var rotation = core_MathUtils.getRotationMatrix(this._getWorldMatrix(obj));\n return core_MathUtils.rotateVector(forwardVector, rotation);\n }\n /**\n * Calculate horizontal and vertical look angles in degrees given spherical theta\n * and phi angles in radians.\n *\n * @param {number} theta - Vertical/polar angle in radians where 0 points directly\n * along positive Y axis.\n * @param {number} phi - Horizontal/azimuthal angle in radians.\n *\n * @returns {Object} - An object with the signature {h: number, v: number} where\n * h represents horizontal rotation in degrees and v represents vertical rotation\n * in degrees.\n */\n\n }, {\n key: "_sphericalToBlendValue",\n value: function _sphericalToBlendValue(theta, phi) {\n var h = core_MathUtils.toDegrees(phi); // Offset the vertical angle so 0 is pointing forward instead of up\n\n var v = core_MathUtils.toDegrees(theta) - 90; // Convert vertical angle to -180, 180 range\n\n return {\n h: h,\n v: v\n };\n }\n }, {\n key: "_validateTransformObject",\n value: function _validateTransformObject(obj) {\n return obj instanceof Object;\n }\n }]);\n\n return PointOfInterestFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_PointOfInterestFeature = (PointOfInterestFeature_PointOfInterestFeature);\n\n// CONCATENATED MODULE: ./src/three.js/PointOfInterestFeature.js\nfunction three_js_PointOfInterestFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { three_js_PointOfInterestFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { three_js_PointOfInterestFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return three_js_PointOfInterestFeature_typeof(obj); }\n\nfunction three_js_PointOfInterestFeature_toConsumableArray(arr) { return three_js_PointOfInterestFeature_arrayWithoutHoles(arr) || three_js_PointOfInterestFeature_iterableToArray(arr) || three_js_PointOfInterestFeature_unsupportedIterableToArray(arr) || three_js_PointOfInterestFeature_nonIterableSpread(); }\n\nfunction three_js_PointOfInterestFeature_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction three_js_PointOfInterestFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return three_js_PointOfInterestFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return three_js_PointOfInterestFeature_arrayLikeToArray(o, minLen); }\n\nfunction three_js_PointOfInterestFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction three_js_PointOfInterestFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return three_js_PointOfInterestFeature_arrayLikeToArray(arr); }\n\nfunction three_js_PointOfInterestFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction three_js_PointOfInterestFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction three_js_PointOfInterestFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction three_js_PointOfInterestFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) three_js_PointOfInterestFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) three_js_PointOfInterestFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction three_js_PointOfInterestFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { three_js_PointOfInterestFeature_get = Reflect.get; } else { three_js_PointOfInterestFeature_get = function _get(target, property, receiver) { var base = three_js_PointOfInterestFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return three_js_PointOfInterestFeature_get(target, property, receiver || target); }\n\nfunction three_js_PointOfInterestFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = three_js_PointOfInterestFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction three_js_PointOfInterestFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) three_js_PointOfInterestFeature_setPrototypeOf(subClass, superClass); }\n\nfunction three_js_PointOfInterestFeature_setPrototypeOf(o, p) { three_js_PointOfInterestFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return three_js_PointOfInterestFeature_setPrototypeOf(o, p); }\n\nfunction three_js_PointOfInterestFeature_createSuper(Derived) { var hasNativeReflectConstruct = three_js_PointOfInterestFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = three_js_PointOfInterestFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = three_js_PointOfInterestFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return three_js_PointOfInterestFeature_possibleConstructorReturn(this, result); }; }\n\nfunction three_js_PointOfInterestFeature_possibleConstructorReturn(self, call) { if (call && (three_js_PointOfInterestFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return three_js_PointOfInterestFeature_assertThisInitialized(self); }\n\nfunction three_js_PointOfInterestFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction three_js_PointOfInterestFeature_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; } }\n\nfunction three_js_PointOfInterestFeature_getPrototypeOf(o) { three_js_PointOfInterestFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return three_js_PointOfInterestFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * @extends core/PointOfInterestFeature\n * @alias three.js/PointOfInterestFeature\n */\n\nvar three_js_PointOfInterestFeature_PointOfInterestFeature = /*#__PURE__*/function (_CorePointOfInterestF) {\n three_js_PointOfInterestFeature_inherits(PointOfInterestFeature, _CorePointOfInterestF);\n\n var _super = three_js_PointOfInterestFeature_createSuper(PointOfInterestFeature);\n\n function PointOfInterestFeature() {\n three_js_PointOfInterestFeature_classCallCheck(this, PointOfInterestFeature);\n\n return _super.apply(this, arguments);\n }\n\n three_js_PointOfInterestFeature_createClass(PointOfInterestFeature, [{\n key: "_validateTransformObject",\n value: function _validateTransformObject(obj) {\n return obj instanceof THREE.Object3D;\n }\n }, {\n key: "setTargetByName",\n value: function setTargetByName(name) {\n three_js_PointOfInterestFeature_get(three_js_PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "setTargetByName", this).call(this, name);\n\n if (!name) {\n return;\n }\n\n this.target = this._scene.getObjectByName(name);\n }\n }, {\n key: "setTargetById",\n value: function setTargetById(id) {\n three_js_PointOfInterestFeature_get(three_js_PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "setTargetByName", this).call(this, id);\n\n if (!id) {\n return;\n }\n\n this.target = this._scene.getObjectById(id);\n }\n }], [{\n key: "_getWorldPosition",\n value: function _getWorldPosition(obj) {\n obj.updateWorldMatrix(true, false);\n return obj.matrixWorld.elements.slice(12, 15);\n }\n }, {\n key: "_getWorldMatrix",\n value: function _getWorldMatrix(obj) {\n obj.updateWorldMatrix(true, false);\n return three_js_PointOfInterestFeature_toConsumableArray(obj.matrixWorld.elements);\n }\n }]);\n\n return PointOfInterestFeature;\n}(core_PointOfInterestFeature);\n\n/* harmony default export */ var three_js_PointOfInterestFeature = (three_js_PointOfInterestFeature_PointOfInterestFeature);\n\n// CONCATENATED MODULE: ./src/three.js/HostEnvironment.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n// eslint-disable-next-line import/prefer-default-export\nvar env = \'three\';\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechUtils.js\nfunction TextToSpeechUtils_toConsumableArray(arr) { return TextToSpeechUtils_arrayWithoutHoles(arr) || TextToSpeechUtils_iterableToArray(arr) || TextToSpeechUtils_unsupportedIterableToArray(arr) || TextToSpeechUtils_nonIterableSpread(); }\n\nfunction TextToSpeechUtils_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction TextToSpeechUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction TextToSpeechUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return TextToSpeechUtils_arrayLikeToArray(arr); }\n\nfunction TextToSpeechUtils_slicedToArray(arr, i) { return TextToSpeechUtils_arrayWithHoles(arr) || TextToSpeechUtils_iterableToArrayLimit(arr, i) || TextToSpeechUtils_unsupportedIterableToArray(arr, i) || TextToSpeechUtils_nonIterableRest(); }\n\nfunction TextToSpeechUtils_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction TextToSpeechUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return TextToSpeechUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return TextToSpeechUtils_arrayLikeToArray(o, minLen); }\n\nfunction TextToSpeechUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction TextToSpeechUtils_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction TextToSpeechUtils_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction TextToSpeechUtils_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechUtils_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechUtils_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechUtils_typeof(obj); }\n\nfunction TextToSpeechUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * A collection of useful text-to-speech functions.\n *\n * @hideconstructor\n */\n\nvar TextToSpeechUtils_TextToSpeechUtils = /*#__PURE__*/function () {\n function TextToSpeechUtils() {\n TextToSpeechUtils_classCallCheck(this, TextToSpeechUtils);\n }\n\n TextToSpeechUtils_createClass(TextToSpeechUtils, null, [{\n key: "autoGenerateSSMLMarks",\n value:\n /**\n * Returns a new string with SSML marks inserted based on\n * matches between the input string and the input map. The\n * word matches are case-insensitive. Words within existing\n * SSML tags will not be affected. Input text will be surrounded\n * by tags if needed.\n *\n * @param {string} text - Input string.\n * @param {object} map - Input object that maps mark keys\n * to arrays of words. Example:\n *\n * {\n * \'mark:sad\' : [\'sad\', \'blue\', \'down\'],\n * \'mark:happy\' : [\'joy\', \'glad\', \'great\'],\n * \'mark:no\' : [\'no\', \'nah\', \'nay\', \'sure\']\n * }\n * @param {Array.} [randomMarks = []] - If there are sentences that don\'t\n * match any words from the map object, marks from this array will be randomly\n * chosen and inserted.\n *\n * @returns {string} - Updated input string.\n */\n function autoGenerateSSMLMarks(text, map) {\n var _this = this;\n\n var randomMarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (TextToSpeechUtils_typeof(map) !== \'object\' || map === null) {\n throw new Error("Cannot generate SSML marks for text \\"".concat(text, "\\" because map is not an object."));\n } // process the input map into an internal format\n\n\n var internalMap = this._processInputMap(map);\n\n var speakTags = [\'\', \'\'];\n var ssmlMarkRegex = //;\n var ssmlTagRegex = /<[^>]*>/g; // Identify any existing SSML tags\n\n var existingTags = [];\n var result = ssmlTagRegex.exec(text);\n\n while (result !== null) {\n existingTags.push({\n start: result.index,\n end: result.index + result[0].length,\n text: result[0]\n });\n result = ssmlTagRegex.exec(text);\n }\n\n var chunks = [];\n var index = 0;\n var ssmlMarkResult;\n var duplicateMarkToCheck = [];\n existingTags.forEach(function (existingTag) {\n var substr = text.slice(index, existingTag.start);\n\n if (substr !== \'\') {\n // auto-mark non-tag text\n chunks.push(_this._insertMarks(substr, internalMap, duplicateMarkToCheck));\n duplicateMarkToCheck = [];\n }\n\n ssmlMarkResult = ssmlMarkRegex.exec(existingTag.text);\n\n if (ssmlMarkResult !== null) {\n var markText = ssmlMarkResult[1];\n duplicateMarkToCheck.push(markText);\n } else if (!speakTags.includes(existingTag.text)) {\n chunks.push(existingTag.text);\n } // advance the index\n\n\n index = existingTag.end;\n });\n chunks.push(this._insertMarks(text.slice(index), internalMap, duplicateMarkToCheck));\n var markedText = chunks.join(\'\');\n\n if (randomMarks && randomMarks.length > 0) {\n // add random marks to any unmarked sentences\n markedText = this.addMarksToUnmarkedSentences(markedText, randomMarks);\n }\n\n return TextToSpeechUtils.validateText(markedText);\n }\n /**\n * Returns a new string with a random SSML mark inserted at each sentence that\n * does not already contain an SSML mark.\n *\n * @param {string} text - Input string.\n * @param {Array.} marks - Any array of random SSML marks to choose from\n * when modifying the text.\n *\n * @returns {string}\n */\n\n }, {\n key: "addMarksToUnmarkedSentences",\n value: function addMarksToUnmarkedSentences(text, marks) {\n if (!marks || marks.length === 0) return text;\n var ssmlMarkRegex = //g;\n var ssmlTagRegex = /<[^>]*>/g; // Find the indices of any marks in the text\n\n var markIndices = [];\n var markResult = ssmlMarkRegex.exec(text);\n\n while (markResult !== null) {\n markIndices.push(markResult.index);\n markResult = ssmlMarkRegex.exec(text);\n } // Find all SSML tags in the text\n\n\n var existingTags = [];\n var ssmlResult = ssmlTagRegex.exec(text);\n\n while (ssmlResult !== null) {\n existingTags.push({\n start: ssmlResult.index,\n end: ssmlResult.index + ssmlResult[0].length,\n text: ssmlResult[0]\n });\n ssmlResult = ssmlTagRegex.exec(text);\n } // Create a copy of the text with all SSML marks replaces with whitespace\n\n\n var cleanedText = text.slice();\n existingTags.forEach(function (existingSsml) {\n var whitespace = new Array(existingSsml.text.length + 1).join(\' \');\n cleanedText = [cleanedText.slice(0, existingSsml.start), whitespace, cleanedText.slice(existingSsml.end)].join(\'\');\n });\n\n var sentenceEndIndices = this._getSentenceEnds(cleanedText); // Only insert random marks into sentences that don\'t already have any\n\n\n var prevIndex = 0;\n var targetIndices = sentenceEndIndices.filter(function (index) {\n var containsMark = markIndices.findIndex(function (markIndex) {\n return prevIndex <= markIndex && index > markIndex;\n }) !== -1;\n prevIndex = index;\n return !containsMark;\n });\n\n var randomMarkedText = this._insertRandomMarksAt(text, targetIndices, marks);\n\n return randomMarkedText;\n }\n /**\n * Generate a version of given text that is enclosed by Polly ssml speak tags.\n *\n * @param {string} text - The text to validate.\n *\n * @returns {string} - Updated input string.\n */\n\n }, {\n key: "validateText",\n value: function validateText(text) {\n if (!text) {\n text = \'\';\n } else {\n text = text.replace(/(^\\s*<\\s*speak\\s*)>\\s*|(^\\s*)/, \'\').replace(/(\\s*<\\s*\\/\\s*speak\\s*>\\s*$|\\s*$)/, \'\');\n }\n\n return text;\n }\n /**\n * Parse an input string and insert SSML marks based on\n * word matches in a map.\n *\n * @private\n *\n * @param {string} text - Input string.\n * @param {Array.} [indices = []] - An array of indices in the text input\n * where random marks should be inserted.\n * @param {Array.} [marks = []] - An array of mark strings to choose\n * from when inserting random marks.\n *\n * @returns {string} - Updated input string.\n */\n\n }, {\n key: "_insertRandomMarksAt",\n value: function _insertRandomMarksAt(text) {\n var indices = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var marks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (!marks || marks.length === 0 || !indices || indices.length === 0) {\n return text;\n }\n\n var offset = 0;\n indices.forEach(function (index) {\n var randomMark = "");\n text = [text.slice(0, index + offset), randomMark, text.slice(index + offset)].join(\'\');\n offset += randomMark.length;\n });\n return text;\n }\n /**\n * Parses a string of text and returns an array containing the indices\n * of the last character in a sentence that is not in the following list:\n * (\'.\', \'?\', \'!\')\n *\n * @private\n *\n * @param {string} text - Text to process for end of sentence\n * indices.\n *\n * @returns {Array.} - Array of end of sentence indices.\n */\n\n }, {\n key: "_getSentenceEnds",\n value: function _getSentenceEnds(text) {\n var sentenceRegex = /[^.!?]+[.!?]+/g;\n var endSentenceRegex = /[.!?]+/;\n var result = sentenceRegex.exec(text);\n var sentenceEnds = [];\n\n while (result !== null) {\n // find the last non-punctuation character\n var punctResult = endSentenceRegex.exec(result[0]);\n sentenceEnds.push(result.index + result[0].length - punctResult[0].length);\n result = sentenceRegex.exec(text);\n }\n\n return sentenceEnds;\n }\n /**\n * Parse an input string and insert SSML marks based on\n * word matches in a map.\n *\n * @private\n *\n * @param {string} text - Input string.\n * @param {Map} map - Mapping of words to mark values that\n * will be inserted as the value for a mark\'s \'name\' attribute.\n * @param {Array} duplicatesToCheck - A list of mark values to check for duplicate against the first word\n *\n * @returns {string} - Updated input string.\n */\n\n }, {\n key: "_insertMarks",\n value: function _insertMarks(text, map, duplicatesToCheck) {\n if (text === \'\') return text;\n var wordRegex = /\\w+|\\s+|[^\\s\\w]+/g;\n var lowerCaseWord;\n var checkDuplicate = true;\n var markedWords = text.match(wordRegex).map(function (word) {\n lowerCaseWord = word.toLowerCase();\n\n if (map.has(lowerCaseWord)) {\n var marks = map.get(lowerCaseWord).map(function (mark) {\n if (checkDuplicate) {\n checkDuplicate = false;\n return duplicatesToCheck.includes(mark) ? \'\' : "");\n } else {\n return "");\n }\n });\n return "".concat(marks.join(\'\')).concat(word);\n } else {\n checkDuplicate = false;\n return word;\n }\n });\n var existingMarks = duplicatesToCheck.map(function (mark) {\n return "");\n });\n return "".concat(existingMarks.join(\'\')).concat(markedWords.join(\'\'));\n }\n /**\n * Processes an input object for mapping an array\n * of words to specific mark keys. Converts the input\n * map into a Map with a more efficient format for\n * performing mark injection.\n *\n * @private\n *\n * @param {object} map - Input object that maps mark keys\n * to arrays of words.\n *\n * @returns {Map} - Map for internal use.\n */\n\n }, {\n key: "_processInputMap",\n value: function _processInputMap(map) {\n var internalMap = new Map();\n var list = [];\n Object.entries(map).forEach(function (_ref) {\n var _ref2 = TextToSpeechUtils_slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n if (!Array.isArray(value)) {\n throw new Error("Cannot generate SSML marks from map \\"".concat(map, "\\" because value for key \'").concat(key, "\' is not an array."));\n }\n\n value.forEach(function (word) {\n var lowerCaseWord = word.toLowerCase();\n list = internalMap.get(lowerCaseWord);\n\n if (list !== undefined && !list.includes(key)) {\n internalMap.set(lowerCaseWord, [].concat(TextToSpeechUtils_toConsumableArray(list), [key]));\n } else {\n internalMap.set(lowerCaseWord, [key]);\n }\n });\n });\n return internalMap;\n }\n }]);\n\n return TextToSpeechUtils;\n}();\n\n/* harmony default export */ var awspack_TextToSpeechUtils = (TextToSpeechUtils_TextToSpeechUtils);\n// CONCATENATED MODULE: ./src/core/awspack/AbstractSpeech.js\nfunction AbstractSpeech_toConsumableArray(arr) { return AbstractSpeech_arrayWithoutHoles(arr) || AbstractSpeech_iterableToArray(arr) || AbstractSpeech_unsupportedIterableToArray(arr) || AbstractSpeech_nonIterableSpread(); }\n\nfunction AbstractSpeech_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction AbstractSpeech_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractSpeech_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractSpeech_arrayLikeToArray(o, minLen); }\n\nfunction AbstractSpeech_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractSpeech_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractSpeech_arrayLikeToArray(arr); }\n\nfunction AbstractSpeech_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractSpeech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractSpeech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractSpeech_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractSpeech_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractSpeech_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Class that can play back audio generated by AWS Polly and synchronized emit\r\n * speechmark messages.\r\n *\r\n * @abstract\r\n */\n\nvar AbstractSpeech_AbstractSpeech = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/TextToSpeechFeature} speaker - The feature that owns the Speech and\r\n * will emit speechmark messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n */\n function AbstractSpeech(speaker, text) {\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n AbstractSpeech_classCallCheck(this, AbstractSpeech);\n\n this._speaker = speaker;\n this._text = text;\n this._speechmarks = speechmarks;\n this._speechmarkOffset = 0;\n\n this._reset();\n }\n /**\r\n * Reset tracking properties.\r\n *\r\n * @private\r\n *\r\n * @param {number} [currentTime=0] - Time to use for _startTime.\r\n */\n\n\n AbstractSpeech_createClass(AbstractSpeech, [{\n key: "_reset",\n value: function _reset() {\n var currentTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this._startTime = currentTime;\n this._localTime = 0;\n this._pauseTime = 0;\n this._playing = false;\n this._markIter = this._speechmarks.values();\n\n var _this$_markIter$next = this._markIter.next(),\n value = _this$_markIter$next.value,\n done = _this$_markIter$next.done;\n\n this._currentMark = value;\n this._endTime = this._speechmarks.length ? this._speechmarks[this._speechmarks.length - 1].time : 0;\n this._done = done;\n this._promise = null;\n }\n /**\r\n * Create a new promise that will stop playback and emit messages for this speech.\r\n *\r\n * @param {Function=} onFinish - Funciton to execute once the speech stops.\r\n * @param {onError=} onError - Function to execute if the speech encounters an\r\n * error.\r\n * @param {Function=} onInterrupt - Function to execute if the speech is canceled.\r\n *\r\n * @returns {Deferred}\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_createPromise",\n value: function _createPromise(onFinish, onError, onInterrupt) {\n var _this = this;\n\n var onResolve = function onResolve(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n if (typeof onFinish === \'function\') {\n onFinish(value);\n }\n };\n\n var onReject = function onReject(e) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n console.error("".concat(_this.constructor.name, " encountered an unexpected error: ").concat(e));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n };\n\n var onCancel = function onCancel(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n if (typeof onInterrupt === \'function\') {\n onInterrupt(value);\n }\n };\n\n this._promise = new core_Deferred(undefined, onResolve, onReject, onCancel);\n return this._promise;\n }\n /**\r\n * Return whether or not the speech has reached it\'s end.\r\n *\r\n * @private\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._done && this._localTime >= this._endTime;\n }\n /**\r\n * Gets the playback state of the audio.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "playing",\n get: function get() {\n return this._playing;\n }\n /**\r\n * Gets the text of the speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n }, {\n key: "text",\n get: function get() {\n return this._text;\n }\n /**\r\n * Gets a shallow copy of the speechmarks array for the speech.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "speechmarks",\n get: function get() {\n return AbstractSpeech_toConsumableArray(this._speechmarks);\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset / 1000;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset * 1000; // Store as milliseconds\n }\n /**\r\n * Emit speechmark messages as they are encountered in sync with audio.\r\n *\r\n * @param {number} currentTime - Current global time when update was called.\r\n */\n\n }, {\n key: "update",\n value: function update(currentTime) {\n if (!this._playing) {\n return;\n } // Update local audio time\n\n\n this._localTime = currentTime - this._startTime;\n\n if (!this._done) {\n // Emit speechmark messages for marks up to the current time\n while (!this._done && this._currentMark.time + this._speechmarkOffset <= this._localTime) {\n this._speaker.emit(this._speaker.constructor.EVENTS[this._currentMark.type], {\n speech: this,\n mark: this._currentMark\n });\n\n var _this$_markIter$next2 = this._markIter.next(),\n value = _this$_markIter$next2.value,\n done = _this$_markIter$next2.done;\n\n this._currentMark = value;\n this._done = done;\n }\n } // End playback\n\n\n if (this._checkFinished()) {\n this.stop();\n\n this._reset();\n }\n }\n /**\r\n * Play the speech from the beginning.\r\n *\r\n * @param {number} currentTime - Current global time when play was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._reset(currentTime);\n\n this._playing = true;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.play, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.play, this);\n\n return this._createPromise(onFinish, onError, onInterrupt);\n }\n /**\r\n * Pause the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when pause was called.\r\n */\n\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._playing = false;\n this._pauseTime = currentTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.pause, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.pause, this);\n }\n /**\r\n * Resume the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when resume was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n // Play from the beginning if the speech hasn\'t played yet\n if (!this._promise) {\n this._reset(currentTime);\n\n this._createPromise(onFinish, onError, onInterrupt);\n }\n\n this._playing = true;\n this._startTime += currentTime - this._pauseTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.resume, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.resume, this);\n\n return this._promise;\n }\n /**\r\n * Cancels playback of the speech at the current time. Cancel the speech promise.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n if (this._promise) {\n this._promise.cancel();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n /**\r\n * Stop the speech and reset time to the beginning. Resolve the speech promise.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._promise) {\n this._promise.resolve();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n }]);\n\n return AbstractSpeech;\n}();\n\n/* harmony default export */ var awspack_AbstractSpeech = (AbstractSpeech_AbstractSpeech);\n// CONCATENATED MODULE: ./src/core/awspack/Speech.js\nfunction Speech_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Speech_typeof = function _typeof(obj) { return typeof obj; }; } else { Speech_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Speech_typeof(obj); }\n\nfunction Speech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Speech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Speech_createClass(Constructor, protoProps, staticProps) { if (protoProps) Speech_defineProperties(Constructor.prototype, protoProps); if (staticProps) Speech_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Speech_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Speech_get = Reflect.get; } else { Speech_get = function _get(target, property, receiver) { var base = Speech_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Speech_get(target, property, receiver || target); }\n\nfunction Speech_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Speech_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Speech_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Speech_setPrototypeOf(subClass, superClass); }\n\nfunction Speech_setPrototypeOf(o, p) { Speech_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Speech_setPrototypeOf(o, p); }\n\nfunction Speech_createSuper(Derived) { var hasNativeReflectConstruct = Speech_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Speech_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Speech_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Speech_possibleConstructorReturn(this, result); }; }\n\nfunction Speech_possibleConstructorReturn(self, call) { if (call && (Speech_typeof(call) === "object" || typeof call === "function")) { return call; } return Speech_assertThisInitialized(self); }\n\nfunction Speech_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Speech_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; } }\n\nfunction Speech_getPrototypeOf(o) { Speech_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Speech_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Audio\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement/Audio\r\n */\n\n/**\r\n * @extends AbstractSpeech\r\n * @alias core/Speech\r\n */\n\nvar Speech = /*#__PURE__*/function (_AbstractSpeech) {\n Speech_inherits(Speech, _AbstractSpeech);\n\n var _super = Speech_createSuper(Speech);\n\n /**\r\n * @constructor\r\n *\r\n * @param {TextToSpeech} speaker - The owner of the Speech that will emit speechmark\r\n * messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n * @param {Object} audioConfig - Object containing audio and url.\r\n * @param {external:Audio} audioConfig.audio - Playable audio object.\r\n */\n function Speech(speaker, text) {\n var _this;\n\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var audioConfig = arguments.length > 3 ? arguments[3] : undefined;\n\n Speech_classCallCheck(this, Speech);\n\n _this = _super.call(this, speaker, text, speechmarks);\n _this._audio = audioConfig.audio; // Keep track of whether the audio has finished playing through\n\n _this._audio.onended = function () {\n _this._audioFinished = true;\n };\n\n _this._audioFinished = true;\n return _this;\n }\n\n Speech_createClass(Speech, [{\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._audioFinished && Speech_get(Speech_getPrototypeOf(Speech.prototype), "_checkFinished", this).call(this);\n }\n /**\r\n * Gets the playable audio for the speech.\r\n *\r\n * @readonly\r\n * @type {external:Audio}\r\n */\n\n }, {\n key: "audio",\n get: function get() {\n return this._audio;\n }\n /**\r\n * Gets the audio volume for the speech.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._audio.volume;\n }\n /**\r\n * Sets the audio volume for the speech.\r\n */\n ,\n set: function set(volume) {\n this._audio.volume = volume;\n }\n /**\r\n * Set the audio\'s current local time and play it.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_playAudio",\n value: function _playAudio() {\n var _this2 = this;\n\n if (this._speechmarkOffset < 0) {\n this._audio.currentTime = this._speechmarkOffset;\n setTimeout(function () {\n if (_this2._playing) {\n _this2._audio.currentTime = (_this2._localTime + _this2._speechmarkOffset) / 1000;\n\n _this2._audio.play();\n }\n }, -this._speechmarkOffset);\n } else {\n this._audio.currentTime = 0;\n\n this._audio.play();\n }\n }\n /**\r\n * Pause the audio once it is playable.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_pauseAudio",\n value: function _pauseAudio() {\n var _this3 = this;\n\n this._audio.play().then(function () {\n if (!_this3._playing) {\n _this3._audio.pause();\n }\n });\n }\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._playAudio();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "play", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "pause", this).call(this, currentTime);\n }\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._audio.play();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "resume", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._pauseAudio();\n\n this._audio.currentTime = 0;\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "stop", this).call(this);\n }\n }]);\n\n return Speech;\n}(awspack_AbstractSpeech);\n\n/* harmony default export */ var awspack_Speech = (Speech);\n// CONCATENATED MODULE: ./src/three.js/awspack/Speech.js\nfunction awspack_Speech_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { awspack_Speech_typeof = function _typeof(obj) { return typeof obj; }; } else { awspack_Speech_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return awspack_Speech_typeof(obj); }\n\nfunction awspack_Speech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction awspack_Speech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction awspack_Speech_createClass(Constructor, protoProps, staticProps) { if (protoProps) awspack_Speech_defineProperties(Constructor.prototype, protoProps); if (staticProps) awspack_Speech_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction awspack_Speech_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { awspack_Speech_get = Reflect.get; } else { awspack_Speech_get = function _get(target, property, receiver) { var base = awspack_Speech_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return awspack_Speech_get(target, property, receiver || target); }\n\nfunction awspack_Speech_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = awspack_Speech_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction awspack_Speech_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) awspack_Speech_setPrototypeOf(subClass, superClass); }\n\nfunction awspack_Speech_setPrototypeOf(o, p) { awspack_Speech_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return awspack_Speech_setPrototypeOf(o, p); }\n\nfunction awspack_Speech_createSuper(Derived) { var hasNativeReflectConstruct = awspack_Speech_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = awspack_Speech_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = awspack_Speech_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return awspack_Speech_possibleConstructorReturn(this, result); }; }\n\nfunction awspack_Speech_possibleConstructorReturn(self, call) { if (call && (awspack_Speech_typeof(call) === "object" || typeof call === "function")) { return call; } return awspack_Speech_assertThisInitialized(self); }\n\nfunction awspack_Speech_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction awspack_Speech_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; } }\n\nfunction awspack_Speech_getPrototypeOf(o) { awspack_Speech_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return awspack_Speech_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Threejs Audio object\r\n * @external "THREE.Audio"\r\n * @see https://threejs.org/docs/#api/en/audio/Audio\r\n */\n\n/**\r\n * Threejs PositionalAudio object\r\n * @external "THREE.PositionalAudio"\r\n * @see https://threejs.org/docs/#api/en/audio/PositionalAudio\r\n */\n\n/**\r\n * @extends core/Speech\r\n * @alias three.js/Speech\r\n */\n\nvar Speech_Speech = /*#__PURE__*/function (_CoreSpeech) {\n awspack_Speech_inherits(Speech, _CoreSpeech);\n\n var _super = awspack_Speech_createSuper(Speech);\n\n /**\r\n * @constructor\r\n *\r\n * @param {three.js/TextToSpeechFeature} speaker - The owner of the Speech that\r\n * will emit speechmark messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} speechmarks - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n * @param {Object} audioConfig - Object containing audio and url.\r\n * @param {external:Audio} audioConfig.audio - Playable audio object.\r\n * @param {(external:"THREE.Audio"|external:"THREE.PositionalAudio")} audioConfig.threeAudio -\r\n * Three.js audio object.\r\n */\n function Speech(textToSpeech, text) {\n var _this;\n\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var audioConfig = arguments.length > 3 ? arguments[3] : undefined;\n\n awspack_Speech_classCallCheck(this, Speech);\n\n _this = _super.call(this, textToSpeech, text, speechmarks, audioConfig);\n _this._threeAudio = audioConfig.threeAudio;\n return _this;\n }\n /**\r\n * Gets the Three.js audio object for the speech.\r\n *\r\n * @readonly\r\n * @type {(external:"THREE.Audio"|external:"THREE.PositionalAudio")}\r\n */\n\n\n awspack_Speech_createClass(Speech, [{\n key: "audio",\n get: function get() {\n return this._threeAudio;\n }\n }, {\n key: "_pauseAudio",\n value: function _pauseAudio() {\n this._audio.pause();\n }\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n // Re-connect the Audio element to stop playback\n this._threeAudio.disconnect();\n\n this._threeAudio.connect();\n\n return awspack_Speech_get(awspack_Speech_getPrototypeOf(Speech.prototype), "play", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }]);\n\n return Speech;\n}(awspack_Speech);\n\n/* harmony default export */ var three_js_awspack_Speech = (Speech_Speech);\n// CONCATENATED MODULE: ./src/core/awspack/AbstractTextToSpeechFeature.js\nfunction AbstractTextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractTextToSpeechFeature_typeof(obj); }\n\nfunction AbstractTextToSpeechFeature_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; }\n\nfunction AbstractTextToSpeechFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AbstractTextToSpeechFeature_ownKeys(Object(source), true).forEach(function (key) { AbstractTextToSpeechFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AbstractTextToSpeechFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AbstractTextToSpeechFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AbstractTextToSpeechFeature_slicedToArray(arr, i) { return AbstractTextToSpeechFeature_arrayWithHoles(arr) || AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr, i) || AbstractTextToSpeechFeature_nonIterableRest(); }\n\nfunction AbstractTextToSpeechFeature_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction AbstractTextToSpeechFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractTextToSpeechFeature_toConsumableArray(arr) { return AbstractTextToSpeechFeature_arrayWithoutHoles(arr) || AbstractTextToSpeechFeature_iterableToArray(arr) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr) || AbstractTextToSpeechFeature_nonIterableSpread(); }\n\nfunction AbstractTextToSpeechFeature_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction AbstractTextToSpeechFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractTextToSpeechFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractTextToSpeechFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractTextToSpeechFeature_arrayLikeToArray(arr); }\n\nfunction AbstractTextToSpeechFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractTextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractTextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractTextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractTextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractTextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractTextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractTextToSpeechFeature_get = Reflect.get; } else { AbstractTextToSpeechFeature_get = function _get(target, property, receiver) { var base = AbstractTextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractTextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction AbstractTextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractTextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractTextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractTextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractTextToSpeechFeature_setPrototypeOf(o, p) { AbstractTextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractTextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction AbstractTextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = AbstractTextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractTextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractTextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractTextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractTextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (AbstractTextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractTextToSpeechFeature_assertThisInitialized(self); }\n\nfunction AbstractTextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractTextToSpeechFeature_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; } }\n\nfunction AbstractTextToSpeechFeature_getPrototypeOf(o) { AbstractTextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractTextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\r\n * The Amazon Polly service object.\r\n * @external Polly\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly.html\r\n */\n\n/**\r\n * The presigner object that can be used to generate presigned urls for the Polly service.\r\n * @external Presigner\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly/Presigner.html\r\n */\n// Available options for Polly\n\nvar engines = [\'standard\', \'neural\'];\nvar audioFormats = [\'mp3\', \'ogg_vorbis\', \'pcm\'];\nvar speechmarkTypes = [\'sentence\', \'ssml\', \'viseme\', \'word\'];\nvar sampleRates = {\n mp3: {\n rates: [\'8000\', \'16000\', \'22050\', \'24000\'],\n defaults: {\n standard: \'2050\',\n neural: \'2400\'\n }\n },\n pcm: {\n rates: [\'8000\', \'16000\'],\n defaults: {\n standard: \'1600\',\n neural: \'1600\'\n }\n }\n};\nsampleRates.ogg_vorbis = sampleRates.mp3;\nvar awsVersion;\n/**\r\n * Base class for turning text input into playable audio. There should be one instance\r\n * per speaker, each instance can play only one piece of text at a time.\r\n *\r\n * @extends AbstractHostFeature\r\n * @abstract\r\n *\r\n * @property {(number|undefined)} AWS_VERSION - Gets the version of AWS SDK being\r\n * used. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n * @property {string} [POLLY_MIN_NEURAL_VERSION=\'2.503\'] - Gets the minimum version\r\n * of the AWS SDK that is necessary to use neural voices with AWS Polly.\r\n * @property {Object} POLLY_DEFAULTS - Default values to use with calls to {@link external:Polly}.\r\n * @property {string} [POLLY_DEFAULTS.Engine=\'standard\']\r\n * @property {Array.} [POLLY_DEFAULTS.LexiconNames=[]]\r\n * @property {string} [POLLY_DEFAULTS.OutputFormat=\'mp3\']\r\n * @property {string} [POLLY_DEFAULTS.SampleRate=\'22050\']\r\n * @property {string} [POLLY_DEFAULTS.Text=\'\']\r\n * @property {string} [POLLY_DEFAULTS.TextType=\'ssml\']\r\n * @property {string} [POLLY_DEFAULTS.VoiceId=\'Amy\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageCode=\'en-GB\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageName=\'British English\']\r\n * @property {Array.} [POLLY_VOICES=[]] - An array of voices available in\r\n * Polly. Will be empty until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/voicelist.html}\r\n * for a full list of available voices.\r\n * @property {Object} [POLLY_LANGUAGES={}] - An object that maps language names\r\n * to language codes that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} [POLLY_LANGUAGE_CODES={}] - An object that maps language codes\r\n * to language names that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.ready=onReadyEvent] - Message that is emitted after\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService} has been\r\n * successfully executed.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link AbstractTextToSpeechFeature#play}. The speech that was played\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link AbstractTextToSpeechFeature#pause}. The speech that was paused\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link AbstractTextToSpeechFeature#resume}. The speech that was\r\n * resumed is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link AbstractTextToSpeechFeature#play}\r\n * or [resume]{@link AbstractTextToSpeechFeature#resume} are executed for a new speech.\r\n * The speech that was interrupted is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link AbstractTextToSpeechFeature#stop} and when a speech reaches\r\n * the end of playback. The speech that was stopped is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.sentence=onSentenceEvent] - Message that is emitted\r\n * each time a sentence speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The sentence speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.word=onWordEvent] - Message that is emitted\r\n * each time a word speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The word speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.viseme=onVisemeEvent] - Message that is emitted\r\n * each time a viseme speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The viseme speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.ssml=onSsmlEvent] - Message that is emitted\r\n * each time a ssml speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The ssml speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {Object} SERVICES - AWS services that are necessary for the feature\r\n * to function.\r\n * @property {external:Polly} SERVICES.polly - The Polly service that is used\r\n * to synthesize speechmarks. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed\r\n * @property {external:Presigner} SERVICES.presigner - The Polly Presigner\r\n * object that is used to synthesize speech audio. Will be undefined until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n */\n\nvar AbstractTextToSpeechFeature_AbstractTextToSpeechFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AbstractTextToSpeechFeature_inherits(AbstractTextToSpeechFeature, _AbstractHostFeature);\n\n var _super = AbstractTextToSpeechFeature_createSuper(AbstractTextToSpeechFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object managing the feature.\r\n * @param {Object=} options - Options that will be sent to Polly for each speech.\r\n * @param {string=} options.voice - The name of the Polly voice to use for all speech.\r\n * @param {string=} options.engine - The name of the Polly engine to use for all speech.\r\n * @param {string=} options.language - The name of the language to use for all speech.\r\n * @param {audioFormat} [options.audioFormat=\'mp3\'] - The format to use for generated\r\n * audio for all speeches.\r\n * @param {string=} options.sampleRate - The sample rate for audio files for all\r\n * speeches.\r\n * @param {number} [options.speechmarkOffset=0] - Amount of time in seconds to\r\n * offset speechmark event emission from the audio.\r\n * @param {number} [options.minEndMarkDuration=.05] - The minimum amount of time\r\n * in seconds that the last speechmark of each type in a speech can have its\r\n * duration property set to.\r\n * @param {number} [options.volume=1] - The default volume to play speech audio\r\n * with.\r\n */\n function AbstractTextToSpeechFeature(host) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n voice: undefined,\n engine: undefined,\n language: undefined,\n audioFormat: \'mp3\',\n sampleRate: undefined,\n speechmarkOffset: 0,\n minEndMarkDuration: 0.05,\n volume: 1\n };\n\n AbstractTextToSpeechFeature_classCallCheck(this, AbstractTextToSpeechFeature);\n\n _this = _super.call(this, host);\n _this._speechCache = {};\n _this._currentSpeech = null;\n _this._currentPromise = null;\n _this._isValidated = false;\n _this.speechmarkOffset = Number.isNaN(Number(options.speechmarkOffset)) ? 0 : Number(options.speechmarkOffset);\n _this.minEndMarkDuration = Number.isNaN(Number(options.minEndMarkDuration)) ? 0 : Number(options.minEndMarkDuration);\n _this.volume = Number.isNaN(Number(options.volume)) ? 1 : Number(options.volume);\n _this._promises = {\n volume: core_Deferred.resolve()\n };\n _this._volumePaused = false; // Set default options for each speech\n\n _this._voice = options.voice || _this.constructor.POLLY_DEFAULTS.VoiceId;\n _this._language = options.language || _this.constructor.POLLY_DEFAULTS.LanguageName;\n _this._engine = engines.includes(options.engine) ? options.engine : _this.constructor.POLLY_DEFAULTS.Engine;\n _this._audioFormat = audioFormats.includes(options.audioFormat) ? options.audioFormat : _this.constructor.POLLY_DEFAULTS.OutputFormat;\n _this._sampleRate = sampleRates[_this._audioFormat].rates.includes(options.sampleRate) ? options.sampleRate : _this.constructor.POLLY_DEFAULTS.SampleRate;\n return _this;\n }\n /**\r\n * Store Polly, Presigner and AWS SDK Version for use across all instances.\r\n *\r\n * @param {external:Polly} polly - Polly instance to use to generate speechmarks.\r\n * @param {external:Presigner} presigner - Presigner instance to use to generate\r\n * audio URLs.\r\n * @param {string} version - Version of the AWS SDK to use to validate voice options.\r\n */\n\n\n AbstractTextToSpeechFeature_createClass(AbstractTextToSpeechFeature, [{\n key: "currentSpeech",\n get:\n /**\r\n * Gets the text of the currently playing speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n function get() {\n if (this._currentSpeech) {\n return this._currentSpeech.text;\n } else {\n return null;\n }\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset;\n\n if (this._currentSpeech) {\n this._currentSpeech.speechmarkOffset = offset;\n }\n }\n /**\r\n * Gets and sets the The minimum amount of time in seconds that the last\r\n * speechmark of each type in a speech can have its duration property set to.\r\n *\r\n * @type number\r\n */\n\n }, {\n key: "minEndMarkDuration",\n get: function get() {\n return this._minEndMarkDuration / 1000;\n },\n set: function set(duration) {\n this._minEndMarkDuration = duration * 1000;\n }\n /**\r\n * Appends the Sumerian Hosts custom user-agent to a string if it is not\r\n * already present.\r\n *\r\n * @private\r\n *\r\n * @param {string} currentUserAgent - String to append to if needed.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateEngine",\n value:\n /**\r\n * Checks if a given engine type is compatible with the AWS SDK version. If it\r\n * is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n function _validateEngine(engine) {\n // Default to the standard engine if neural is not available for this version\n if (engine === undefined || this.constructor.AWS_VERSION < this.constructor.POLLY_MIN_NEURAL_VERSION) {\n engine = this.constructor.POLLY_DEFAULTS.Engine;\n }\n\n return engine;\n }\n /**\r\n * Checks if a given audio format type is compatible with Polly. If it is, return\r\n * the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateFormat",\n value: function _validateFormat(format) {\n if (format === undefined || !audioFormats.includes(format)) {\n format = this.constructor.POLLY_DEFAULTS.OutputFormat;\n }\n\n return format;\n }\n /**\r\n * Checks if a given audio sampling rate is compatible with the current audio\r\n * format. If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateRate",\n value: function _validateRate(rate) {\n // Use default if specified sample rate is not valid for the audio format\n if (rate === undefined || !sampleRates[this._audioFormat].rates.includes(rate)) {\n rate = sampleRates[this._audioFormat].defaults[this._engine];\n }\n\n return rate;\n }\n /**\r\n * Checks if a given Polly voice id is compatible with the current Polly engine.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateVoice",\n value: function _validateVoice(voiceId) {\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === voiceId;\n }); // Use the default voice if the voice isn\'t supported by the engine\n\n if (voice === undefined || !voice.SupportedEngines.includes(this._engine)) {\n voiceId = this.constructor.POLLY_DEFAULTS.VoiceId;\n }\n\n return voiceId;\n }\n /**\r\n * Checks if a given Polly language is compatible with the current Polly voice.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateLanguage",\n value: function _validateLanguage(language) {\n var _this2 = this;\n\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === _this2._voice;\n });\n var languageCode = this.constructor.POLLY_LANGUAGES[language]; // Find the languages available for the current voice\n\n var availableCodes = [voice.LanguageCode];\n\n if (voice.AdditionalLanguageCodes) {\n availableCodes.push.apply(availableCodes, AbstractTextToSpeechFeature_toConsumableArray(voice.AdditionalLanguageCodes));\n } // If the current voice doesn\'t support the language, use its default\n\n\n if (!availableCodes.includes(languageCode)) {\n language = this.constructor.POLLY_LANGUAGE_CODES[voice.LanguageCode];\n }\n\n return language;\n }\n /**\r\n * Validate the current Polly options to make sure they are compatible with each\r\n * other.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_validate",\n value: function _validate() {\n // Validate speech parameters\n this._engine = this._validateEngine(this._engine);\n this._audioFormat = this._validateFormat(this._audioFormat);\n this._sampleRate = this._validateRate(this._sampleRate);\n this._voice = this._validateVoice(this._voice);\n this._language = this._validateLanguage(this._language);\n this._isValidated = true;\n }\n /**\r\n * Return an object containing parameters compatible with Polly.synthesizeSpeech.\r\n *\r\n * @private\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_getConfig",\n value: function _getConfig() {\n // Make sure parameters have been validated\n if (this.constructor.isReady && !this._isValidated) {\n this._validate();\n } // Create a config object compatible with Polly\n\n\n return {\n Engine: this._engine,\n OutputFormat: this._audioFormat,\n SampleRate: this._sampleRate,\n VoiceId: this._voice,\n LanguageCode: this.constructor.POLLY_LANGUAGES[this._language]\n };\n }\n /**\r\n * Update Polly parameters with options from a given config. All stored speeches\r\n * will be updated to use the new parameters, unless the speech text is contained\r\n * in the \'skipSpeeches\' parameter.\r\n *\r\n * @private\r\n *\r\n * @param {Object} config - Polly parameter options to overwrite.\r\n * @param {Array.} skipSpeeches - Text of any speeches that should not\r\n * have parameters updated.\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_updateConfig",\n value: function _updateConfig(config) {\n var _this3 = this;\n\n var skipSpeeches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n var currentConfig = this._getConfig();\n\n if (!config) {\n return currentConfig;\n }\n\n this._isValidated = false;\n var currentConfigStr = JSON.stringify(currentConfig); // Update options\n\n if (config.Engine) {\n this._engine = config.Engine;\n }\n\n if (config.audioFormat) {\n this._audioFormat = config.audioFormat;\n }\n\n if (config.SampleRate) {\n this._sampleRate = config.SampleRate;\n }\n\n if (config.VoiceId) {\n this._voice = config.VoiceId;\n }\n\n if (config.Language) {\n this._language = config.Language;\n } // Validate the config\n\n\n var validConfig = this._getConfig(); // Exit if nothing has changed\n\n\n var configStr = JSON.stringify(validConfig);\n\n if (currentConfigStr === configStr) {\n this._isValidated = true;\n return validConfig;\n } // Update all cached configs\n\n\n Object.entries(this._speechCache).forEach(function (_ref) {\n var _ref2 = AbstractTextToSpeechFeature_slicedToArray(_ref, 2),\n text = _ref2[0],\n speech = _ref2[1];\n\n // Check if this is a skipped speech\n if (skipSpeeches.includes(text)) {\n return;\n }\n\n var speechConfigStr = JSON.stringify(speech.config); // Update the speech with new parameters\n\n if (speechConfigStr !== configStr) {\n _this3._updateSpeech(text, validConfig);\n }\n });\n return validConfig;\n }\n /**\r\n * Update an existing speech, or add a new speech with new Polly parameters with\r\n * options from a given config.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the speech to update.\r\n * @param {Object} config - Polly parameter options to update.\r\n * @param {boolean} [force=false] - Whether to force the speech to be updated\r\n * if no parameters have changes.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_updateSpeech",\n value: function _updateSpeech(text, config) {\n var _this4 = this;\n\n var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var speech = this._speechCache[text] || {}; // Exit if nothing has changed and force is false\n\n if (!force && config !== undefined && speech.config && JSON.stringify(config) === JSON.stringify(speech.config)) {\n return speech;\n } // Create separate parameters for audio and speechmark generation\n\n\n var audioParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, config), {}, {\n Text: text,\n TextType: \'ssml\'\n });\n\n var speechmarkParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, audioParams), {}, {\n OutputFormat: \'json\',\n SpeechMarkTypes: speechmarkTypes\n }); // Generate audio and speechmarks\n\n\n speech.config = config;\n speech.promise = Promise.all([this._synthesizeSpeechmarks(speechmarkParams), this._synthesizeAudio(audioParams)]).then(function (results) {\n return _this4._createSpeech.apply(_this4, [text].concat(AbstractTextToSpeechFeature_toConsumableArray(results)));\n });\n this._speechCache[text] = speech;\n return speech;\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new awspack_AbstractSpeech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Create presigned URL of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an object containing the audio URL.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this5 = this;\n\n return new core_Deferred(function (resolve, reject) {\n _this5.constructor.SERVICES.presigner.getSynthesizeSpeechUrl(params, function (error, url) {\n if (!error) {\n resolve({\n url: url\n });\n } else {\n reject(error);\n }\n });\n });\n }\n /**\r\n * Retrieves and parses speechmarks for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an array of speechmark objects\r\n */\n\n }, {\n key: "_synthesizeSpeechmarks",\n value: function _synthesizeSpeechmarks(params) {\n var _this6 = this;\n\n return this.constructor.SERVICES.polly.synthesizeSpeech(params).promise().then(function (result) {\n // Convert charcodes to string\n var jsonString = JSON.stringify(result.AudioStream);\n var json = JSON.parse(jsonString);\n var dataStr = json.data.map(function (c) {\n return String.fromCharCode(c);\n }).join(\'\');\n var markTypes = {\n sentence: [],\n word: [],\n viseme: [],\n ssml: []\n };\n var endMarkTypes = {\n sentence: null,\n word: null,\n viseme: null,\n ssml: null\n }; // Split by enclosing {} to create speechmark objects\n\n var speechMarks = AbstractTextToSpeechFeature_toConsumableArray(dataStr.matchAll(/\\{.*?\\}(?=\\n|$)/gm)).map(function (match) {\n var mark = JSON.parse(match[0]); // Set the duration of the last speechmark stored matching this one\'s type\n\n var numMarks = markTypes[mark.type].length;\n\n if (numMarks > 0) {\n var lastMark = markTypes[mark.type][numMarks - 1];\n lastMark.duration = mark.time - lastMark.time;\n }\n\n markTypes[mark.type].push(mark);\n endMarkTypes[mark.type] = mark;\n return mark;\n }); // Find the time of the latest speechmark\n\n\n var endTimes = [];\n\n if (endMarkTypes.sentence) {\n endTimes.push(endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endTimes.push(endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endTimes.push(endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endTimes.push(endMarkTypes.ssml.time);\n }\n\n var endTime = Math.max.apply(Math, endTimes); // Calculate duration for the ending speechMarks of each type\n\n if (endMarkTypes.sentence) {\n endMarkTypes.sentence.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endMarkTypes.word.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endMarkTypes.viseme.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endMarkTypes.ssml.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.ssml.time);\n }\n\n return speechMarks;\n });\n }\n /**\r\n * Returns a Speech object that has the given text.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text content of the Speech.\r\n * @param {Object=} config - Options to update the Speech with.\r\n *\r\n * @returns {Deferred} Resolves with Speech or null;\r\n */\n\n }, {\n key: "_getSpeech",\n value: function _getSpeech(text, config) {\n // Make sure AWS services exist\n if (!this.constructor.isReady) {\n var e = \'AWS services have not been initialized.\';\n return core_Deferred.reject(e);\n } // Make sure its possible to generate speeches\n\n\n if (!text) {\n var _e2 = \'Cannot play a speech with no text.\';\n return core_Deferred.reject(_e2);\n } // Update the speech with options\n\n\n text = awspack_TextToSpeechUtils.validateText(text);\n config = this._updateConfig(config, text);\n return this._updateSpeech(text, config).promise;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see TextToSpeechFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this7 = this;\n\n /**\r\n * @inner\r\n * @namespace TextToSpeechFeature\r\n */\n var api = AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#play\r\n */\n play: this.play.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resume\r\n */\n resume: this.resume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#stop\r\n */\n stop: this.stop.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#getVolume\r\n */\n getVolume: this.getVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#setVolume\r\n */\n setVolume: this.setVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pauseVolume\r\n */\n pauseVolume: this.pauseVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resumeVolume\r\n */\n resumeVolume: this.resumeVolume.bind(this)\n });\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see AbstractTextToSpeechFeature#speechmarkOffset\r\n */\n speechmarkOffset: {\n get: function get() {\n return _this7.speechmarkOffset;\n },\n set: function set(offset) {\n _this7.speechmarkOffset = offset;\n }\n }\n });\n return api;\n }\n /**\r\n * Gets and sets the volume used for all audio clips played by the speaker.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._volume;\n }\n /**\r\n * Gets whether or not the speaker\'s volume value is currently being tweened.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n ,\n set: function set(volume) {\n this._volume = core_MathUtils.clamp(volume);\n }\n }, {\n key: "volumePending",\n get: function get() {\n return this._promises.volume && this._promises.volume.pending;\n }\n /**\r\n * Gets the volume used for all audio clips played by the speaker.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getVolume",\n value: function getVolume() {\n return this.volume;\n }\n /**\r\n * Updates the volume used for all audio clips played by the speaker over time.\r\n *\r\n * @param {number} volume - Target volume value.\r\n * @param {number} [seconds=0] - Amount of time it will take to reach the target\r\n * volume.\r\n * @param {Function=} easingFn - Easing function used for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setVolume",\n value: function setVolume(volume) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.volumePending) {\n this._promises.volume.cancel();\n }\n\n volume = core_MathUtils.clamp(volume);\n this._promises.volume = animpack_AnimationUtils.interpolateProperty(this, \'volume\', volume, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.volume;\n }\n /**\r\n * Pause interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pauseVolume",\n value: function pauseVolume() {\n this._volumePaused = true;\n return this.volumePending;\n }\n /**\r\n * Resume any interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "resumeVolume",\n value: function resumeVolume() {\n this._volumePaused = false;\n return this.volumePending;\n }\n /**\r\n * Update the currently playing speech.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._volumePaused) {\n this._promises.volume.execute(deltaTime);\n }\n\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.volume = this._volume;\n\n this._currentSpeech.update(this._host.now);\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "update", this).call(this, deltaTime);\n }\n }\n /**\r\n * Set the current speech to a new asset and update the speech\'s speechmark\r\n * offset value to match that of the feature.\r\n *\r\n * @private\r\n *\r\n * @param {AbstractSpeech} speech - Speech to set as current.\r\n */\n\n }, {\n key: "_setCurrentSpeech",\n value: function _setCurrentSpeech(speech) {\n speech.speechmarkOffset = this._speechmarkOffset;\n this._currentSpeech = speech;\n }\n /**\r\n * Create a promise that will play/resume a speech with the given text after\r\n * the audio context attempts to resume and speech audio is retrieved from Polly.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n * @param {string} [playMethod = \'play\'] - Method to execute on the resulting\r\n * Speech object. Valid options are \'play\' and \'resume\'.\r\n */\n\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this8 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n\n // If no text is provided, try to use the current speech\n if (text === undefined && playMethod === \'resume\' && this._currentSpeech) {\n text = this._currentSpeech.text;\n }\n\n var currentPromise = this._currentPromise || {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise;\n\n this._getSpeech(text, config).then(function (speech) {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } else if (_this8._currentPromise !== currentPromise) {\n // Cancel if another call to play has already been made\n currentPromise.play.cancel();\n return;\n } // Reset current speech when the speech ends\n\n\n var onFinish = function onFinish() {\n _this8._currentSpeech = null;\n _this8._currentPromise = null;\n }; // Cancel the currently playing speech\n\n\n if (_this8._currentSpeech && _this8._currentSpeech.playing) {\n if (playMethod === \'play\') {\n _this8._currentSpeech.cancel();\n } else if (playMethod === \'resume\' && _this8._currentSpeech.audio !== speech.audio) {\n _this8._currentSpeech.cancel();\n }\n }\n\n _this8._setCurrentSpeech(speech); // Play the speech\n\n\n currentPromise.speech = speech[playMethod](_this8._host.now, onFinish, onFinish, onFinish);\n currentPromise.speech.then(function () {\n if (currentPromise.speech.resolved) {\n currentPromise.play.resolve();\n } else {\n currentPromise.play.cancel();\n }\n })["catch"](function (error) {\n currentPromise.play.reject(error);\n });\n })["catch"](function (e) {\n e = "Cannot ".concat(playMethod, " speech ").concat(text, " on host ").concat(_this8.host.id, ". ").concat(e);\n currentPromise.play.reject(e);\n });\n\n return currentPromise.play;\n }\n /**\r\n * Stop any speeches currently playing and play a new speech from the beginning.\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n /**\r\n * If a speech is currently playing, pause it at the current time.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.pause(this._host.now);\n } else {\n console.warn("Cannot pause speech on host ".concat(this.host.id, ". No speech is currently playing"));\n }\n }\n /**\r\n * Stop any speeches currently playing and resume a new speech from the current\r\n * time.\r\n *\r\n * @param {string=} text - The text of the new speech to play. If undefined and\r\n * there is a current speech that is paused, the current speech will be resumed.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n /**\r\n * If a speech is currently playing, stop playback and reset time.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n\n this._currentSpeech = null;\n } else {\n console.warn("Cannot stop speech on host ".concat(this.host.id, ". No speech is currently playing."));\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n }\n\n delete this._speechCache;\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "discard", this).call(this);\n }\n }], [{\n key: "initializeService",\n value: function initializeService(polly, presigner, version) {\n var _this9 = this;\n\n // Make sure all were defined\n if (polly === undefined || presigner === undefined || version === undefined) {\n throw new Error(\'Cannot initialize TextToSpeech feature. All arguments must be defined.\');\n } // Add sumerian hosts user-agent\n\n\n if (polly.config) {\n polly.config.customUserAgent = this._withCustomUserAgent(polly.config.customUserAgent);\n }\n\n if (presigner.service && presigner.service.config) {\n presigner.service.config.customUserAgent = this._withCustomUserAgent(presigner.service.config.customUserAgent);\n }\n\n this._isReady = false; // Store parameters\n\n this.SERVICES.polly = polly;\n this.SERVICES.presigner = presigner;\n awsVersion = version; // Clear the current polly objects\n\n var availableVoices = this.POLLY_VOICES;\n availableVoices.length = 0;\n var availableLanguages = this.POLLY_LANGUAGES;\n Object.keys(availableLanguages).forEach(function (name) {\n delete availableLanguages[name];\n });\n var availableLanguageCodes = this.POLLY_LANGUAGE_CODES;\n Object.keys(availableLanguageCodes).forEach(function (name) {\n delete availableLanguageCodes[name];\n }); // Re-populate according to version\n\n var minNeuralSdk = this.POLLY_MIN_NEURAL_VERSION;\n return this.SERVICES.polly.describeVoices().promise().then(function (response) {\n var allCodes = {};\n response.Voices.forEach(function (voice) {\n if (voice.SupportedEngines.includes(\'standard\') || version >= minNeuralSdk) {\n availableVoices.push(voice);\n }\n\n availableVoices.forEach(function (voice) {\n availableLanguages[voice.LanguageName] = voice.LanguageCode;\n allCodes[voice.LanguageCode] = voice.LanguageName;\n });\n });\n Object.entries(availableLanguages).forEach(function (_ref3) {\n var _ref4 = AbstractTextToSpeechFeature_slicedToArray(_ref3, 2),\n name = _ref4[0],\n code = _ref4[1];\n\n availableLanguageCodes[code] = name;\n }); // Notify that we\'re ready to generate speeches\n\n _this9._isReady = true;\n\n _this9.emit(_this9.EVENTS.ready);\n });\n }\n /**\r\n * Indicates whether or not the class is capable of generating speech audio. Polly,\r\n * Presigner and AWS SDK version number must have been defined using\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "isReady",\n get: function get() {\n return this._isReady;\n }\n }, {\n key: "_withCustomUserAgent",\n value: function _withCustomUserAgent(currentUserAgent) {\n var sumerianHostsUserAgent = \'request-source/SumerianHosts\';\n\n if (currentUserAgent == null) {\n return sumerianHostsUserAgent;\n }\n\n if (currentUserAgent.indexOf(sumerianHostsUserAgent) !== -1) {\n return currentUserAgent;\n }\n\n return currentUserAgent.concat(\' \', sumerianHostsUserAgent);\n }\n }]);\n\n return AbstractTextToSpeechFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperties(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature, {\n AWS_VERSION: {\n get: function get() {\n return awsVersion;\n }\n },\n POLLY_MIN_NEURAL_VERSION: {\n value: \'2.503\',\n writable: false\n },\n POLLY_DEFAULTS: {\n value: {\n Engine: \'standard\',\n LexiconNames: [],\n OutputFormat: \'mp3\',\n SampleRate: \'22050\',\n Text: \'\',\n TextType: \'ssml\',\n VoiceId: \'Amy\',\n LanguageCode: \'en-GB\',\n LanguageName: \'British English\'\n },\n writable: false\n },\n POLLY_VOICES: {\n value: [],\n writable: false\n },\n POLLY_LANGUAGES: {\n value: {},\n writable: false\n },\n POLLY_LANGUAGE_CODES: {\n value: {},\n writable: false\n },\n _isReady: {\n value: false,\n writable: true\n },\n EVENTS: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).EVENTS), {}, {\n ready: \'onReadyEvent\',\n play: \'onPlayEvent\',\n pause: \'onPauseEvent\',\n resume: \'onResumeEvent\',\n interrupt: \'onInterruptEvent\',\n stop: \'onStopEvent\',\n sentence: \'onSentenceEvent\',\n word: \'onWordEvent\',\n viseme: \'onVisemeEvent\',\n ssml: \'onSsmlEvent\'\n })\n },\n SERVICES: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).SERVICES), {}, {\n polly: undefined,\n presigner: undefined\n })\n }\n});\n/* harmony default export */ var awspack_AbstractTextToSpeechFeature = (AbstractTextToSpeechFeature_AbstractTextToSpeechFeature);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeature.js\nfunction TextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeature_typeof(obj); }\n\nfunction TextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TextToSpeechFeature_get = Reflect.get; } else { TextToSpeechFeature_get = function _get(target, property, receiver) { var base = TextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction TextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeature_setPrototypeOf(o, p) { TextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeature_assertThisInitialized(self); }\n\nfunction TextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeature_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; } }\n\nfunction TextToSpeechFeature_getPrototypeOf(o) { TextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @extends AbstractTextToSpeechFeature\r\n * @alias core/TextToSpeechFeature\r\n */\n\nvar TextToSpeechFeature_TextToSpeechFeature = /*#__PURE__*/function (_AbstractTextToSpeech) {\n TextToSpeechFeature_inherits(TextToSpeechFeature, _AbstractTextToSpeech);\n\n var _super = TextToSpeechFeature_createSuper(TextToSpeechFeature);\n\n function TextToSpeechFeature() {\n var _this;\n\n TextToSpeechFeature_classCallCheck(this, TextToSpeechFeature);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this._enabled = false;\n\n _this._setAudioContext();\n\n _this._observeAudioContext();\n\n return _this;\n }\n /**\r\n * Store the audio context that will be used to ensure audio can be played.\r\n *\r\n * @private\r\n */\n\n\n TextToSpeechFeature_createClass(TextToSpeechFeature, [{\n key: "_setAudioContext",\n value: function _setAudioContext() {\n this._audioContext = new AudioContext();\n }\n /**\r\n * Listen for state changes on the audio context to determine whether the feature\r\n * is enabled.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_observeAudioContext",\n value: function _observeAudioContext() {\n var _this2 = this;\n\n if (this._audioContext) {\n this._audioContext.onstatechange = function () {\n if (_this2._audioContext.state === \'running\') {\n _this2._enabled = true;\n } else {\n _this2._enabled = false;\n console.warn(\'The audio context is not running. Speech will not be able to be played until it is resumed. Use the "TextToSpeechFeature.resumeAudio" method to try to resume it after a user gesture.\');\n }\n };\n\n this._audioContext.onstatechange();\n }\n }\n /**\r\n * Create an Audio object of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Promise} Resolves with an object containing the audio URL and Audio\r\n * object.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this3 = this;\n\n return TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_synthesizeAudio", this).call(this, params).then(function (result) {\n var url = result.url; // Create an Audio object that points to the presigned url\n\n var audio = new Audio(url);\n audio.loop = _this3.loop;\n audio.crossOrigin = \'anonymous\';\n audio.preload = \'auto\';\n result.audio = audio;\n return new Promise(function (resolve) {\n // Resolve once the minimum amount is loaded\n audio.addEventListener(\'canplaythrough\', function () {\n resolve(result);\n }); // Start loading the audio\n\n document.body.appendChild(audio);\n audio.load();\n });\n });\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new three_js_awspack_Speech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Gets whether or not the audio context is running and speech can be played.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "enabled",\n get: function get() {\n return this._enabled;\n }\n /**\r\n * Try to resume the audio context. This will be automatically executed each time\r\n * speech is played or resumed. If using manually, it should be called after a\r\n * user interaction occurs.\r\n *\r\n * @returns {Deferred} - Resolves once the audio context has resumed.\r\n */\n\n }, {\n key: "resumeAudio",\n value: function resumeAudio() {\n var _this4 = this;\n\n var promise = new core_Deferred(function (resolve, reject) {\n _this4._audioContext.resume().then(function () {\n _this4._enabled = true;\n resolve();\n })["catch"](function (e) {\n _this4._enabled = false;\n reject(e);\n });\n });\n return promise;\n }\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this5 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n var currentPromise = {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise; // Try to start the audio context\n\n this.resumeAudio().then(function () {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } // Cancel if another call to play has already been made\n else if (_this5._currentPromise !== currentPromise) {\n currentPromise.play.cancel();\n return;\n } // The audio context is running so the speech can be played\n\n\n if (_this5._enabled) {\n TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_startSpeech", _this5).call(_this5, text, config, playMethod);\n } // Reject if the audio context is not running\n else {\n currentPromise.reject(new Error("Cannot ".concat(playMethod, " speech on host ").concat(_this5._host.id, ". The audio context is not running. Use the \\"TextToSpeechFeature.resumeAudio\\" method to try to resume it after a user gesture.")));\n }\n });\n return currentPromise.play;\n }\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n var api = TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see core/TextToSpeechFeature#enabled\r\n */\n enabled: {\n get: function get() {\n return _this6._enabled;\n }\n }\n });\n return api;\n }\n }]);\n\n return TextToSpeechFeature;\n}(awspack_AbstractTextToSpeechFeature);\n\n/* harmony default export */ var awspack_TextToSpeechFeature = (TextToSpeechFeature_TextToSpeechFeature);\n// CONCATENATED MODULE: ./src/three.js/awspack/TextToSpeechFeature.js\nfunction awspack_TextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { awspack_TextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { awspack_TextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return awspack_TextToSpeechFeature_typeof(obj); }\n\nfunction awspack_TextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction awspack_TextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction awspack_TextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) awspack_TextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) awspack_TextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction awspack_TextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { awspack_TextToSpeechFeature_get = Reflect.get; } else { awspack_TextToSpeechFeature_get = function _get(target, property, receiver) { var base = awspack_TextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return awspack_TextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction awspack_TextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = awspack_TextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction awspack_TextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) awspack_TextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction awspack_TextToSpeechFeature_setPrototypeOf(o, p) { awspack_TextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return awspack_TextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction awspack_TextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = awspack_TextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = awspack_TextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = awspack_TextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return awspack_TextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction awspack_TextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (awspack_TextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return awspack_TextToSpeechFeature_assertThisInitialized(self); }\n\nfunction awspack_TextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction awspack_TextToSpeechFeature_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; } }\n\nfunction awspack_TextToSpeechFeature_getPrototypeOf(o) { awspack_TextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return awspack_TextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Threejs PositionalAudio object\r\n * @external "THREE.AudioListener"\r\n * @see https://threejs.org/docs/#api/en/audio/AudioListener\r\n */\n\n/**\r\n * Threejs Audio object\r\n * @external "THREE.Object3D"\r\n * @see https://threejs.org/docs/#api/en/core/Object3D\r\n */\n\n/**\r\n * @extends core/TextToSpeechFeature\r\n * @alias three.js/TextToSpeechFeature\r\n */\n\nvar awspack_TextToSpeechFeature_TextToSpeechFeature = /*#__PURE__*/function (_CoreTextToSpeechFeat) {\n awspack_TextToSpeechFeature_inherits(TextToSpeechFeature, _CoreTextToSpeechFeat);\n\n var _super = awspack_TextToSpeechFeature_createSuper(TextToSpeechFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {three/HostObject} host - Host object managing the feature.\r\n * @param {Object=} options - Options that will be sent to Polly for each speech.\r\n * @param {external:"THREE.AudioListener"} options.listener - Three audio listener to use with\r\n * audio.\r\n * @param {external:"THREE.Object3D"=} options.attachTo - Optional object to attach the speech\r\n * audio to.\r\n */\n function TextToSpeechFeature(host) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n voice: undefined,\n engine: undefined,\n language: undefined,\n audioFormat: \'mp3\',\n sampleRate: undefined,\n listener: undefined,\n attachTo: undefined\n };\n\n awspack_TextToSpeechFeature_classCallCheck(this, TextToSpeechFeature);\n\n _this = _super.call(this, host, options);\n _this._listener = options.listener;\n _this._attachTo = options.attachTo || host.owner;\n\n _this._setAudioContext();\n\n _this._observeAudioContext();\n\n return _this;\n }\n\n awspack_TextToSpeechFeature_createClass(TextToSpeechFeature, [{\n key: "_setAudioContext",\n value: function _setAudioContext() {\n if (this._listener) {\n this._audioContext = this._listener.context;\n }\n }\n /**\r\n * Create an Audio object and Three.js audio object of speech audio for the\r\n * given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Promise} Resolves with an object containing the audio URL and Audio\r\n * objects.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this2 = this;\n\n return awspack_TextToSpeechFeature_get(awspack_TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_synthesizeAudio", this).call(this, params).then(function (result) {\n if (_this2._attachTo !== undefined) {\n // Create positional audio if there\'s an attach point\n result.threeAudio = new THREE.PositionalAudio(_this2._listener);\n\n _this2._attachTo.add(result.threeAudio);\n } else {\n // Create non-positional audio\n result.threeAudio = new THREE.Audio(_this2._listener);\n } // Set Audio object as the source\n\n\n result.threeAudio.setMediaElementSource(result.audio);\n return result;\n });\n }\n }]);\n\n return TextToSpeechFeature;\n}(awspack_TextToSpeechFeature);\n\n/* harmony default export */ var three_js_awspack_TextToSpeechFeature = (awspack_TextToSpeechFeature_TextToSpeechFeature);\n// CONCATENATED MODULE: ./src/three.js/awspack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @module three/awspack\r\n */\n\n/* harmony default export */ var awspack = ({\n /**\r\n * @see three.js/TextToSpeechFeature\r\n */\n TextToSpeechFeature: three_js_awspack_TextToSpeechFeature,\n\n /**\r\n * @see core/TextToSpeechUtils\r\n */\n TextToSpeechUtils: awspack_TextToSpeechUtils,\n\n /**\r\n * @see three.js/Speech\r\n */\n Speech: three_js_awspack_Speech\n});\n// CONCATENATED MODULE: ./src/three.js/animpack/state/SingleState.js\nfunction state_SingleState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { state_SingleState_typeof = function _typeof(obj) { return typeof obj; }; } else { state_SingleState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return state_SingleState_typeof(obj); }\n\nfunction state_SingleState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction state_SingleState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction state_SingleState_createClass(Constructor, protoProps, staticProps) { if (protoProps) state_SingleState_defineProperties(Constructor.prototype, protoProps); if (staticProps) state_SingleState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SingleState_set(target, property, value, receiver) { if (typeof Reflect !== "undefined" && Reflect.set) { SingleState_set = Reflect.set; } else { SingleState_set = function set(target, property, value, receiver) { var base = SingleState_superPropBase(target, property); var desc; if (base) { desc = Object.getOwnPropertyDescriptor(base, property); if (desc.set) { desc.set.call(receiver, value); return true; } else if (!desc.writable) { return false; } } desc = Object.getOwnPropertyDescriptor(receiver, property); if (desc) { if (!desc.writable) { return false; } desc.value = value; Object.defineProperty(receiver, property, desc); } else { SingleState_defineProperty(receiver, property, value); } return true; }; } return SingleState_set(target, property, value, receiver); }\n\nfunction _set(target, property, value, receiver, isStrict) { var s = SingleState_set(target, property, value, receiver || target); if (!s && isStrict) { throw new Error(\'failed to set property\'); } return value; }\n\nfunction SingleState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction SingleState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { SingleState_get = Reflect.get; } else { SingleState_get = function _get(target, property, receiver) { var base = SingleState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return SingleState_get(target, property, receiver || target); }\n\nfunction SingleState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = state_SingleState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction state_SingleState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) state_SingleState_setPrototypeOf(subClass, superClass); }\n\nfunction state_SingleState_setPrototypeOf(o, p) { state_SingleState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return state_SingleState_setPrototypeOf(o, p); }\n\nfunction state_SingleState_createSuper(Derived) { var hasNativeReflectConstruct = state_SingleState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = state_SingleState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = state_SingleState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return state_SingleState_possibleConstructorReturn(this, result); }; }\n\nfunction state_SingleState_possibleConstructorReturn(self, call) { if (call && (state_SingleState_typeof(call) === "object" || typeof call === "function")) { return call; } return state_SingleState_assertThisInitialized(self); }\n\nfunction state_SingleState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction state_SingleState_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; } }\n\nfunction state_SingleState_getPrototypeOf(o) { state_SingleState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return state_SingleState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\n * Threejs AnimationAction object\n * @external "THREE.AnimationAction"\n * @see https://threejs.org/docs/#api/en/animation/AnimationAction\n */\n\nvar threeBlendModes = {\n Override: THREE.NormalAnimationBlendMode,\n Additive: THREE.AdditiveAnimationBlendMode\n};\n/**\n * @extends core/SingleState\n * @alias three.js/SingleState\n */\n\nvar state_SingleState_SingleState = /*#__PURE__*/function (_CoreSingleState) {\n state_SingleState_inherits(SingleState, _CoreSingleState);\n\n var _super = state_SingleState_createSuper(SingleState);\n\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation state.\n * @param {external:"THREE.AnimationAction"} threeAction - Animation action that controls\n * playback of the clip.\n */\n function SingleState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var threeAction = arguments.length > 1 ? arguments[1] : undefined;\n\n state_SingleState_classCallCheck(this, SingleState);\n\n _this = _super.call(this, options); // Callback to catch THREE animation action completion\n\n _this._onFinishedEvent = function (_ref) {\n var type = _ref.type,\n action = _ref.action;\n\n // Exit if this isn\'t the finish event for this animation\n if (type !== \'finished\' || action !== _this.threeAction) {\n return;\n }\n\n _this._promises.play.resolve(); // Stop evaluating interpolators if they have already completed\n\n\n if (!_this.weightPending && !_this.timeScalePending) {\n _this._paused = true;\n }\n };\n\n _this._threeAction = threeAction;\n _this._threeAction.clampWhenFinished = true; // Hold the last frame on completion\n\n _this._threeAction.enabled = false;\n _this._threeAction.loop = _this._loopCount === 1 ? THREE.LoopOnce : THREE.LoopRepeat;\n _this._threeAction.paused = _this._paused;\n _this._threeAction.repetitions = _this._loopCount;\n _this._threeAction.timeScale = _this._timeScale;\n _this._threeAction.weight = _this._internalWeight;\n _this._threeAction.blendMode = threeBlendModes[_this._blendMode]; // Start listening for animation finished events\n\n _this._threeAction.getMixer().addEventListener(\'finished\', _this._onFinishedEvent);\n\n return _this;\n }\n /**\n * Gets the THREE.AnimationAction object.\n *\n * @readonly\n * @type {external:"THREE.AnimationAction"}\n */\n\n\n state_SingleState_createClass(SingleState, [{\n key: "threeAction",\n get: function get() {\n return this._threeAction;\n }\n }, {\n key: "normalizedTime",\n get: function get() {\n if (this._threeAction.time && this._threeAction.getClip() && this._threeAction.getClip().duration) {\n return this._threeAction.time / this._threeAction.getClip().duration;\n }\n\n return 0;\n },\n set: function set(time) {\n time = core_MathUtils.clamp(time);\n this._threeAction.time = this._threeAction.getClip().duration * time;\n }\n }, {\n key: "weight",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "weight", this);\n },\n set: function set(weight) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "weight", weight, this, true);\n\n this._threeAction.enabled = true;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._threeAction.setEffectiveWeight(this._internalWeight);\n }\n }, {\n key: "timeScale",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "timeScale", this);\n },\n set: function set(timeScale) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "timeScale", timeScale, this, true);\n\n this._threeAction.timeScale = timeScale;\n }\n }, {\n key: "loopCount",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "loopCount", this);\n },\n set: function set(loopCount) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "loopCount", loopCount, this, true);\n\n this._threeAction.loop = loopCount === 1 ? THREE.LoopOnce : THREE.LoopRepeat;\n this._threeAction.repetitions = loopCount;\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n // Restart animation\n this._threeAction.reset();\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "pause",\n value: function pause() {\n // Make sure animation has influence\n this._threeAction.paused = true;\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "pause", this).call(this);\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n // Make sure the animation can play and has influence\n this._threeAction.paused = false;\n this._threeAction.enabled = true;\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n // Stop animation playback\n this._threeAction.paused = true;\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n // Restart and pause the animation\n this._threeAction.reset();\n\n this._threeAction.paused = true;\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "stop", this).call(this);\n }\n }, {\n key: "discard",\n value: function discard() {\n // Stop the animation from having influence\n this._threeAction.enabled = false; // Stop listening for finish events\n\n this._threeAction.getMixer().removeEventListener(\'finished\', this._onFinishedEvent);\n\n SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "discard", this).call(this);\n }\n }]);\n\n return SingleState;\n}(state_SingleState);\n\n/* harmony default export */ var animpack_state_SingleState = (state_SingleState_SingleState);\n// CONCATENATED MODULE: ./src/three.js/animpack/AnimationFeature.js\nfunction animpack_AnimationFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { animpack_AnimationFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { animpack_AnimationFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return animpack_AnimationFeature_typeof(obj); }\n\nfunction animpack_AnimationFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction animpack_AnimationFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction animpack_AnimationFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) animpack_AnimationFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) animpack_AnimationFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction animpack_AnimationFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { animpack_AnimationFeature_get = Reflect.get; } else { animpack_AnimationFeature_get = function _get(target, property, receiver) { var base = animpack_AnimationFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return animpack_AnimationFeature_get(target, property, receiver || target); }\n\nfunction animpack_AnimationFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = animpack_AnimationFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction animpack_AnimationFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) animpack_AnimationFeature_setPrototypeOf(subClass, superClass); }\n\nfunction animpack_AnimationFeature_setPrototypeOf(o, p) { animpack_AnimationFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return animpack_AnimationFeature_setPrototypeOf(o, p); }\n\nfunction animpack_AnimationFeature_createSuper(Derived) { var hasNativeReflectConstruct = animpack_AnimationFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = animpack_AnimationFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = animpack_AnimationFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return animpack_AnimationFeature_possibleConstructorReturn(this, result); }; }\n\nfunction animpack_AnimationFeature_possibleConstructorReturn(self, call) { if (call && (animpack_AnimationFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return animpack_AnimationFeature_assertThisInitialized(self); }\n\nfunction animpack_AnimationFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction animpack_AnimationFeature_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; } }\n\nfunction animpack_AnimationFeature_getPrototypeOf(o) { animpack_AnimationFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return animpack_AnimationFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Threejs AnimationMixer object\r\n * @external "THREE.AnimationMixer"\r\n * @see https://threejs.org/docs/#api/en/animation/AnimationMixer\r\n */\n\nAnimationTypes.single = animpack_state_SingleState;\n\n/**\r\n * @extends core/AnimationFeature\r\n * @alias three.js/AnimationFeature\r\n */\n\nvar animpack_AnimationFeature_AnimationFeature = /*#__PURE__*/function (_CoreAnimationFeature) {\n animpack_AnimationFeature_inherits(AnimationFeature, _CoreAnimationFeature);\n\n var _super = animpack_AnimationFeature_createSuper(AnimationFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {three.js/HostObject} host - Host object that owns the feature.\r\n */\n function AnimationFeature(host) {\n var _this;\n\n animpack_AnimationFeature_classCallCheck(this, AnimationFeature);\n\n _this = _super.call(this, host);\n _this._mixer = new THREE.AnimationMixer(host.owner);\n return _this;\n }\n\n animpack_AnimationFeature_createClass(AnimationFeature, [{\n key: "_createSingleState",\n value: function _createSingleState(options) {\n // Duplicate the clip if it is already in use by another three action\n var clip = options.clip;\n\n if (this._mixer.existingAction(clip)) {\n clip = clip.clone();\n }\n\n var threeAction = this._mixer.clipAction(clip);\n\n return new animpack_state_SingleState(options, threeAction);\n }\n /**\r\n * Gets the THREE.AnimationMixer for the host.\r\n *\r\n * @readonly\r\n * @type {external:"THREE.AnimationMixer"}\r\n */\n\n }, {\n key: "mixer",\n get: function get() {\n return this._mixer;\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n animpack_AnimationFeature_get(animpack_AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "update", this).call(this, deltaTime);\n\n if (!this._paused) {\n this._mixer.update(deltaTime / 1000); // THREE.AnimationMixer requires delta time in seconds\n\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n // Release THREE animation resources\n this._mixer.uncacheRoot(this._host.owner);\n\n animpack_AnimationFeature_get(animpack_AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "discard", this).call(this);\n }\n }]);\n\n return AnimationFeature;\n}(animpack_AnimationFeature);\n\n/* harmony default export */ var three_js_animpack_AnimationFeature = (animpack_AnimationFeature_AnimationFeature);\n// CONCATENATED MODULE: ./src/three.js/animpack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module three/animpack\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/**\r\n * @namespace\r\n */\n\nvar Easing = {\n /**\r\n * @see Linear\r\n */\n Linear: Linear,\n\n /**\r\n * @see Quadratic\r\n */\n Quadratic: Quadratic,\n\n /**\r\n * @see Cubic\r\n */\n Cubic: Cubic,\n\n /**\r\n * @see Quartic\r\n */\n Quartic: Quartic,\n\n /**\r\n * @see Quintic\r\n */\n Quintic: Quintic,\n\n /**\r\n * @see Sinusoidal\r\n */\n Sinusoidal: Sinusoidal,\n\n /**\r\n * @see Exponential\r\n */\n Exponential: Exponential,\n\n /**\r\n * @see Circular\r\n */\n Circular: Circular,\n\n /**\r\n * @see Elastic\r\n */\n Elastic: Elastic,\n\n /**\r\n * @see Back\r\n */\n Back: Back,\n\n /**\r\n * @see Bounce\r\n */\n Bounce: Bounce\n};\n/* harmony default export */ var animpack = ({\n /**\r\n * @see three.js/AnimationFeature\r\n */\n AnimationFeature: three_js_animpack_AnimationFeature,\n\n /**\r\n * @see AnimationLayer\r\n */\n AnimationLayer: animpack_AnimationLayer,\n\n /**\r\n * @see three.js/SingleState\r\n */\n SingleState: animpack_state_SingleState,\n\n /**\r\n * @see TransitionState\r\n */\n TransitionState: state_TransitionState,\n\n /**\r\n * @see FreeBlendState\r\n */\n FreeBlendState: state_FreeBlendState,\n\n /**\r\n * @see QueueState\r\n */\n QueueState: state_QueueState,\n\n /**\r\n * @see RandomAnimationState\r\n */\n RandomAnimationState: state_RandomAnimationState,\n\n /**\r\n * @see Blend1dState\r\n */\n Blend1dState: state_Blend1dState,\n\n /**\r\n * @see Blend2dState\r\n */\n Blend2dState: state_Blend2dState,\n\n /**\r\n * @see AnimationUtils\r\n */\n AnimationUtils: animpack_AnimationUtils,\n\n /**\r\n * @see Easing\r\n */\n Easing: Easing,\n\n /**\r\n * @see LayerBlendModes\r\n */\n LayerBlendModes: LayerBlendModes,\n\n /**\r\n * @see DefaultLayerBlendMode\r\n */\n DefaultLayerBlendMode: DefaultLayerBlendMode,\n\n /**\r\n * @see AnimationTypes\r\n */\n AnimationTypes: AnimationTypes\n});\n// CONCATENATED MODULE: ./src/three.js/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module three/HOST\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var three_js = __webpack_exports__["default"] = ({\n /**\r\n * @see env\r\n */\n env: env,\n\n /**\r\n * @see Utils\r\n */\n Utils: core_Utils,\n\n /**\r\n * @see MathUtils\r\n */\n MathUtils: core_MathUtils,\n\n /**\r\n * @see Deferred\r\n */\n Deferred: core_Deferred,\n\n /**\r\n * @see three.js/Messenger\r\n */\n Messenger: three_js_Messenger,\n\n /**\r\n * @see three.js/HostObject\r\n */\n HostObject: three_js_HostObject,\n\n /**\r\n * @see core/LipsyncFeature\r\n */\n LipsyncFeature: core_LipsyncFeature,\n\n /**\r\n * @see GestureFeature\r\n */\n GestureFeature: core_GestureFeature,\n\n /**\r\n * @see three.js/PointOfInterestFeature\r\n */\n PointOfInterestFeature: three_js_PointOfInterestFeature,\n\n /**\r\n * @see DefaultVisemeMap\r\n */\n DefaultVisemeMap: DefaultVisemeMap,\n\n /**\r\n * @see DefaultGestureWords\r\n */\n DefaultGestureWords: DefaultGestureWords,\n\n /**\r\n * @see AxisMap\r\n */\n AxisMap: AxisMap,\n\n /**\r\n * @see module:three/awspack\r\n */\n aws: awspack,\n\n /**\r\n * @see module:three/animpack\r\n */\n anim: animpack\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvRGVmZXJyZWQuanM/Njg4ZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvVXRpbHMuanM/YmYyNCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvTWF0aFV0aWxzLmpzPzgxZTciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0Vhc2luZy5qcz81ODZjIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9NZXNzZW5nZXIuanM/ZDAwNiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL01lc3Nlbmdlci5qcz82MDNiIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9BYnN0cmFjdEhvc3RGZWF0dXJlLmpzPzIzNmUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL0hvc3RPYmplY3QuanM/NzVlNyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL0hvc3RPYmplY3QuanM/NTRmMSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5qcz8wNmJiIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLmpzPzZlNjMiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL01hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZS5qcz80N2Q1Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL1RleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuanM/YmNhZCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvTGlwc3luY0ZlYXR1cmUuanM/OGQzYSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9TU01MU3BlZWNobWFya0ludGVyZmFjZS5qcz9jYTc0Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9HZXN0dXJlRmVhdHVyZS5qcz9kYjM5Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25VdGlscy5qcz8xMTQ4Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9BYnN0cmFjdFN0YXRlLmpzPzJmODciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL1RyYW5zaXRpb25TdGF0ZS5qcz85ZTc3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UuanM/NzMzZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvU3RhdGVDb250YWluZXJJbnRlcmZhY2UuanM/MjY1OSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvUXVldWVTdGF0ZS5qcz8wYzRhIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9BYnN0cmFjdEJsZW5kU3RhdGUuanM/NjY5NyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvRnJlZUJsZW5kU3RhdGUuanM/ZDY3NSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvQmxlbmQxZFN0YXRlLmpzP2E3NDIiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL0JsZW5kMmRTdGF0ZS5qcz84MTYzIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25MYXllci5qcz9iZWVjIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9TaW5nbGVTdGF0ZS5qcz80ZjE0Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9SYW5kb21BbmltYXRpb25TdGF0ZS5qcz80NDkzIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlLmpzP2ViZGUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuanM/ZGVlNSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuanM/MTViZiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL0hvc3RFbnZpcm9ubWVudC5qcz8wMjcyIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL1RleHRUb1NwZWVjaFV0aWxzLmpzPzc1NWQiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svQWJzdHJhY3RTcGVlY2guanM/N2YxYyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9TcGVlY2guanM/MmE0MSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL2F3c3BhY2svU3BlZWNoLmpzPzcwZDkiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmpzPzM0MWYiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoRmVhdHVyZS5qcz81YTg1Iiwid2VicGFjazovL0hPU1QvLi9zcmMvdGhyZWUuanMvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlLmpzPzEwOTAiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy90aHJlZS5qcy9hd3NwYWNrL2luZGV4LmpzPzJmMGEiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy90aHJlZS5qcy9hbmltcGFjay9zdGF0ZS9TaW5nbGVTdGF0ZS5qcz82MzU0Iiwid2VicGFjazovL0hPU1QvLi9zcmMvdGhyZWUuanMvYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZS5qcz80ZWU3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvdGhyZWUuanMvYW5pbXBhY2svaW5kZXguanM/Zjc0YSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL2luZGV4LmpzP2I0MWQiXSwibmFtZXMiOlsiRGVmZXJyZWQiLCJleGVjdXRhYmxlIiwib25SZXNvbHZlIiwib25SZWplY3QiLCJvbkNhbmNlbCIsIkVycm9yIiwicmVzIiwicmVqIiwiY2FuY2VsIiwic3RhdHVzIiwicmVzb2x2ZWQiLCJyZWplY3RlZCIsImNhbmNlbGVkIiwicGVuZGluZyIsInJlc29sdmUiLCJyZWplY3QiLCJ2YWx1ZSIsIl9zdGF0dXMiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJfY2FuY2VsIiwiX2V4ZWN1dGFibGUiLCJhcmdzIiwiaXRlcmFibGUiLCJTeW1ib2wiLCJpdGVyYXRvciIsImUiLCJhcnJheSIsImRlZmVycmVkIiwiZmlsdGVyIiwiaXRlbSIsInJlc3VsdCIsInVuZGVmaW5lZCIsInJlc29sdmVWYWx1ZSIsImZvckVhY2giLCJsZW5ndGgiLCJlcnJvciIsImNhbmNlbFZhbHVlIiwibnVtSXRlbXMiLCJpdGVtVHJhY2tlciIsImZhaWxlZCIsIm51bVJlc29sdmVkIiwicmVzb2x1dGlvbnMiLCJpbmRleCIsIlByb21pc2UiLCJ0aGVuIiwiVXRpbHMiLCJyZXBsYWNlIiwiYyIsInJhbmRvbU51bWJlciIsIk1hdGgiLCJmbG9vciIsIkRhdGUiLCJub3ciLCJyYW5kb20iLCJ0b1N0cmluZyIsIm5hbWUiLCJuYW1lQXJyYXkiLCJpbmNsdWRlcyIsIm5hbWVTZXQiLCJTZXQiLCJtYXRjaEdyb3VwIiwibWF0Y2giLCJiYXNlTmFtZSIsInNsaWNlIiwiaW5jcmVtZW50IiwiTnVtYmVyIiwic2V0TmFtZSIsInNldE1hdGNoR3JvdXAiLCJzZXRJbmNyZW1lbnQiLCJzZWNvbmRzIiwib25GaW5pc2giLCJvblByb2dyZXNzIiwib25FcnJvciIsImNvbnNvbGUiLCJ3YXJuIiwiY3VycmVudFRpbWUiLCJ0b3RhbFRpbWUiLCJvblVwZGF0ZSIsImRlbHRhVGltZSIsIm1pbiIsIm1heCIsImNlaWwiLCJSYWRpYW5Ub0RlZ3JlZSIsIlBJIiwiRGVncmVlVG9SYWRpYW4iLCJNYXRoVXRpbHMiLCJyYWRpYW5zIiwiZGVncmVlcyIsImZyb20iLCJ0byIsImZhY3RvciIsImEiLCJiIiwicCIsImRpc3RTcXIiLCJkaXN0YW5jZVNxdWFyZWQiLCJ0IiwicG9pbnQiLCJ2ZXJ0aWNlcyIsIm1pblgiLCJQT1NJVElWRV9JTkZJTklUWSIsIm1pblkiLCJtYXhYIiwiTkVHQVRJVkVfSU5GSU5JVFkiLCJtYXhZIiwidiIsImRYIiwiZFkiLCJtaWRYIiwibWlkWSIsImRNYXgiLCJzdXBlckluZGljZXMiLCJ2ZXJ0c1dpdGhTdXBlciIsInN1cGVyU29ydGVkSW5kaWNlcyIsInNvcnRQb2ludHNDQ1ciLCJzdXBlclRyaWFuZ2xlIiwiaW5kaWNlcyIsImVkZ2VzIiwidHJpYW5nbGVzIiwibmV3VmVydCIsIm5ld0luZGV4IiwiaW52YWxpZFRyaWFuZ2xlcyIsInRyaWFuZ2xlIiwiaXNQb2ludEluQ2lyY3VtQ2lyY2xlIiwicHVzaCIsImJvdW5kaW5nUG9seSIsImVkZ2UiLCJjb3VudCIsIm90aGVyVHJpYW5nbGUiLCJvdGhlckVkZ2UiLCJzcGxpY2UiLCJpbmRleE9mIiwic29ydGVkSW5kaWNlcyIsInRyaWFuZ2xlc1RvUmVtb3ZlIiwibWFwIiwiYXgiLCJheSIsImJ4IiwiYnkiLCJjeCIsImN5IiwiZGVub20iLCJhVmFsIiwiYlZhbCIsImNWYWwiLCJjZW50cm9pZCIsInNvcnQiLCJhdGFuMiIsImFicyIsInZlY3RvciIsIkFycmF5IiwicmVkdWNlciIsImFjY3VtdWxhdG9yIiwiY3VycmVudFZhbHVlIiwic3FydCIsInJlZHVjZSIsInZlY3RvckEiLCJ2ZWN0b3JCIiwidmFsdWVBIiwidmFsdWVCIiwibm9ybWFsQSIsIm5vcm1hbGl6ZVZlY3RvciIsIm5vcm1hbEIiLCJkb3QiLCJnZXREb3RQcm9kdWN0IiwiYWNvcyIsImNsYW1wIiwidmVjdG9yMyIsIm1hdHJpeDMiLCJldmVyeSIsIngiLCJ5IiwieiIsIm1hZ25pdHVkZSIsImdldFZlY3Rvck1hZ25pdHVkZSIsImZpbGwiLCJtYXRyaXg0Iiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVaIiwiciIsInRhcmdldFZhbHVlIiwidmFsdWVTdG9yZSIsInNtb290aFRpbWUiLCJtYXhTcGVlZCIsImNsYW1wVGltZSIsImRlbHRhVmFsdWUiLCJjbGFtcERlbHRhVmFsdWUiLCJsYXN0VmFsdWUiLCJkMSIsImQyIiwiZDMiLCJkNCIsIkxpbmVhciIsIk5vbmUiLCJrIiwiSW4iLCJPdXQiLCJJbk91dCIsIlF1YWRyYXRpYyIsIkN1YmljIiwiUXVhcnRpYyIsIlF1aW50aWMiLCJTaW51c29pZGFsIiwiY29zIiwic2luIiwiRXhwb25lbnRpYWwiLCJDaXJjdWxhciIsIkVsYXN0aWMiLCJzIiwiYXNpbiIsIkJhY2siLCJCb3VuY2UiLCJNZXNzZW5nZXIiLCJpZCIsIl9pZCIsImNyZWF0ZUlkIiwiX2Rpc3BhdGNoZXIiLCJ3aW5kb3ciLCJfY2FsbGJhY2tzIiwiX2V2ZW50TGlzdGVuZXJzIiwibWVzc2FnZSIsImNhbGxiYWNrIiwiZGV0YWlsIiwiQ3VzdG9tRXZlbnQiLCJsaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJfY3JlYXRlTG9jYWxNZXNzYWdlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9jcmVhdGVMaXN0ZW5lciIsIl9hZGRMaXN0ZW5lciIsImkiLCJzdG9wTGlzdGVuaW5nIiwiX3JlbW92ZUxpc3RlbmVyIiwicmVnZXhwIiwibWVzc2FnZXMiLCJPYmplY3QiLCJrZXlzIiwidGVzdCIsImV2ZW50IiwiX2NyZWF0ZUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsIm1lc3NlbmdlciIsIkdsb2JhbE1lc3NlbmdlciIsImxpc3RlblRvIiwic3RvcExpc3RlbmluZ1RvQWxsIiwiZW1pdCIsImRlZmluZVByb3BlcnRpZXMiLCJ3cml0YWJsZSIsIkVWRU5UUyIsInR5cGUiLCJDb3JlTWVzc2VuZ2VyIiwiYXNzaWduIiwicHJvdG90eXBlIiwiVEhSRUUiLCJFdmVudERpc3BhdGNoZXIiLCJkZWZpbmVQcm9wZXJ0eSIsIkFic3RyYWN0SG9zdEZlYXR1cmUiLCJob3N0IiwiX2hvc3QiLCJldmVudHMiLCJhcGkiLCJlbnRyaWVzIiwiY29uc3RydWN0b3IiLCJvd25lciIsInN0b3BMaXN0ZW5pbmdCeVJlZ2V4cCIsInVwZGF0ZSIsIlJlZ0V4cCIsInNvdXJjZSIsIlJlc3VsdENsYXNzIiwibWl4aW5DbGFzc0ZhY3RvcmllcyIsIm1peGluQ2xhc3NGYWN0b3J5IiwiU0VSVklDRVMiLCJIb3N0T2JqZWN0IiwiX293bmVyIiwiX2ZlYXR1cmVzIiwiX3dhaXRzIiwiX2xhc3RVcGRhdGUiLCJkdCIsIndhaXQiLCJleGVjdXRlIiwidmFsdWVzIiwiZmVhdHVyZSIsIm9uQ29tcGxldGUiLCJGZWF0dXJlQ2xhc3MiLCJmb3JjZSIsImlucHV0VHlwZSIsImluc3RhbGxBcGkiLCJhZGRGZWF0dXJlIiwidHlwZU5hbWUiLCJyZW1vdmVGZWF0dXJlIiwiZGlzY2FyZCIsImdldFByb3RvdHlwZU9mIiwib3B0aW9ucyIsIl9jbG9jayIsImNsb2NrIiwiZ2V0IiwiZ2V0RWxhcHNlZFRpbWUiLCJDb3JlSG9zdE9iamVjdCIsIkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UiLCJCYXNlQ2xhc3MiLCJGZWF0dXJlRGVwZW5kZW50TWl4aW4iLCJfaW5pdGlhbGl6ZWQiLCJfb25GZWF0dXJlQWRkZWQiLCJiaW5kIiwiX29uRmVhdHVyZVJlbW92ZWQiLCJFVkVOVF9ERVBFTkRFTkNJRVMiLCJldmVudE5hbWUiLCJBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIiwib2xkTmFtZSIsIm5ld05hbWUiLCJsYXllck5hbWUiLCJhbmltYXRpb25OYW1lIiwiUGFyZW50Q2xhc3MiLCJNaXhpbiIsIkFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbiIsIkFuaW1hdGlvbkZlYXR1cmUiLCJhZGRMYXllciIsInJlbW92ZUxheWVyIiwicmVuYW1lTGF5ZXIiLCJhZGRBbmltYXRpb24iLCJyZW1vdmVBbmltYXRpb24iLCJyZW5hbWVBbmltYXRpb24iLCJNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UiLCJuYW1lRmlsdGVyIiwid2VpZ2h0IiwiZWFzaW5nRm4iLCJNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJNaXhpbiIsIl9tYW5hZ2VkTGF5ZXJzIiwibGF5ZXJzIiwiX29uTGF5ZXJBZGRlZCIsIl9vbkxheWVyUmVtb3ZlZCIsImlzQWN0aXZlIiwiZ2V0QW5pbWF0aW9ucyIsImFuaW1OYW1lIiwiX29uQW5pbWF0aW9uQWRkZWQiLCJhbmltYXRpb25zIiwiX29uQW5pbWF0aW9uUmVtb3ZlZCIsImxheWVyT3B0aW9ucyIsImFuaW1PcHRpb25zIiwiREVGQVVMVF9MQVlFUl9PUFRJT05TIiwiYW5pbWF0aW9uT3B0aW9ucyIsInJlZ2lzdGVyQW5pbWF0aW9uIiwicmVnaXN0ZXJMYXllciIsImxheWVyTmFtZXMiLCJzZXRMYXllcldlaWdodCIsImJsZW5kVGltZSIsInNldExheWVyV2VpZ2h0cyIsImVuYWJsZSIsImRpc2FibGUiLCJUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIiwiVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudE1peGluIiwiVGV4dFRvU3BlZWNoRmVhdHVyZSIsInBsYXkiLCJwYXVzZSIsInJlc3VtZSIsInN0b3AiLCJzZW50ZW5jZSIsIndvcmQiLCJ2aXNlbWUiLCJzc21sIiwiRGVmYXVsdFZpc2VtZU1hcCIsInNpbCIsIm92ZXJyaWRlV2VpZ2h0IiwiUyIsIlQiLCJmIiwidSIsIkUiLCJvIiwiTyIsIkxpcHN5bmNGZWF0dXJlIiwidmlzZW1lQmxlbmRUaW1lIiwiZGVjYXlSYXRlIiwiYW1vdW50IiwidmlzZW1lRWFzaW5nRm4iLCJ2aXNlbWVMYXllcnMiLCJ0YWxraW5nQmxlbmRUaW1lIiwidGFsa2luZ0Vhc2luZ0ZuIiwidGFsa2luZ0xheWVycyIsInZpc2VtZUxlYWRUaW1lIiwiX3Zpc2VtZUxheWVycyIsIl90YWxraW5nTGF5ZXJzIiwiYW5pbWF0aW9uIiwidmlzZW1lTWFwIiwicmVnaXN0ZXJWaXNlbWVMYXllciIsInJlZ2lzdGVyVGFsa2luZ0xheWVyIiwiZ2V0QW5pbWF0aW9uVHlwZSIsIndlaWdodE5hbWVzIiwiZ2V0QW5pbWF0aW9uQmxlbmROYW1lcyIsInZpc2VtZU9wdGlvbnMiLCJzcGVlY2htYXJrT2Zmc2V0IiwiX3Zpc2VtZUxlYWRUaW1lIiwiX3JlZ2lzdGVyVmlzZW1lQW5pbWF0aW9uIiwicmVzdW1lQW5pbWF0aW9uIiwiX29uU3RvcCIsIl9vblBsYXkiLCJwYXVzZUFuaW1hdGlvbiIsIm1hcmsiLCJpc1Zpc2VtZUFjdGl2ZSIsInZpc2VtZU5hbWVzIiwiZHVyYXRpb24iLCJsZXJwRmFjdG9yIiwibGVycCIsImJsZW5kSW5UaW1lIiwiaG9sZFRpbWUiLCJfYW5pbWF0ZVNpbXBsZVZpc2VtZSIsImRlY2F5V2VpZ2h0IiwiX2FuaW1hdGVIZWxkVmlzZW1lIiwidmlzZW1lTmFtZSIsInBlYWtXZWlnaHQiLCJibGVuZE91dFRpbWUiLCJ3ZWlnaHRQcm9taXNlIiwic2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQiLCJzdGFydFByb21pc2UiLCJob2xkUHJvbWlzZSIsInNldCIsIm1peCIsIlNTTUxTcGVlY2htYXJrSW50ZXJmYWNlIiwiU1NNTFNwZWVjaE1hcmtNaXhpbiIsIkpTT04iLCJwYXJzZSIsIm1ldGhvZCIsImFwcGx5IiwiRGVmYXVsdEdlc3R1cmVXb3JkcyIsImJpZyIsImhlYXJ0IiwibWFueSIsIm1vdmVtZW50Iiwib25lIiwiYWdncmVzc2l2ZSIsInlvdSIsImRlZmVuc2UiLCJ3YXZlIiwic2VsZiIsIkdlc3R1cmVGZWF0dXJlIiwibWluaW11bUludGVydmFsIiwibGF5ZXIiLCJsYXllckhvbGRUaW1lIiwibGF5ZXJNaW5pbXVtSW50ZXJ2YWwiLCJjYW5BZHZhbmNlIiwiaXNRdWV1ZUVuZCIsImN1cnJlbnRHZXN0dXJlIiwiX2dldEhvbGRUaW1lIiwiaG9sZFRpbWVyIiwicGxheU5leHRBbmltYXRpb24iLCJwbGF5VGltZXIiLCJhdXRvRGlzYWJsZSIsImFuaW0iLCJ3b3JkcyIsImdlc3R1cmVNYXAiLCJ0cmFuc2l0aW9uVGltZSIsImtleSIsInN0cmluZ2lmeSIsImdlbmVyaWNHZXN0dXJlcyIsInJlYXNvbiIsIl9nZXRNaW5pbXVtSW50ZXJ2YWwiLCJwbGF5QW5pbWF0aW9uIiwiZ2V0UGF1c2VkIiwiY3JlYXRlR2VzdHVyZU1hcCIsImNyZWF0ZUdlbmVyaWNHZXN0dXJlQXJyYXkiLCJwbGF5R2VzdHVyZSIsInN0b3BBbmltYXRpb24iLCJpbnRlcnJ1cHRBbmltYXRpb24iLCJBbmltYXRpb25VdGlscyIsInByb3BlcnR5T3duZXIiLCJwcm9wZXJ0eU5hbWUiLCJpc05hTiIsInN0YXJ0VmFsdWUiLCJpbnRlcnBvbGF0b3IiLCJwcm9ncmVzcyIsImVhc2VGYWN0b3IiLCJBYnN0cmFjdFN0YXRlIiwiX3dlaWdodCIsIl9pbnRlcm5hbFdlaWdodCIsIl9wYXVzZWQiLCJfcHJvbWlzZXMiLCJmaW5pc2giLCJfcGxheUNhbGxiYWNrcyIsImludGVycG9sYXRlUHJvcGVydHkiLCJwcm9taXNlIiwiYWxsIiwidXBkYXRlSW50ZXJuYWxXZWlnaHQiLCJUcmFuc2l0aW9uU3RhdGUiLCJfdG8iLCJfZnJvbSIsIl93ZWlnaHRQcm9taXNlIiwidG90YWxXZWlnaHQiLCJzdGF0ZSIsImN1cnJlbnRTdGF0ZXMiLCJ0YXJnZXRTdGF0ZSIsImRlYWN0aXZhdGUiLCJyZXNldCIsIndlaWdodFByb21pc2VzIiwic2V0V2VpZ2h0Iiwib25OZXh0IiwicHJvbWlzZXMiLCJBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UiLCJmbiIsInBsYXlNZXRob2QiLCJBbmltYXRpb25QbGF5ZXJNaXhpbiIsIl90cmFuc2l0aW9uU3RhdGUiLCJfc3RhdGVzIiwiTWFwIiwiX2N1cnJlbnRTdGF0ZSIsIl90cmFuc2l0aW9uVGltZSIsIl9lYXNpbmdGbiIsImhhcyIsImN1cnJlbnRBbmltYXRpb24iLCJ3ZWlnaHRQZW5kaW5nIiwiY29uZmlndXJlIiwiX3ByZXBhcmVDdXJyZW50U3RhdGUiLCJTdGF0ZUNvbnRhaW5lckludGVyZmFjZSIsImN1cnJlbnROYW1lIiwiU3RhdGVDb250YWluZXJNaXhpbiIsInVuaXF1ZU5hbWUiLCJnZXRVbmlxdWVOYW1lIiwiUXVldWVTdGF0ZSIsInF1ZXVlU3RhdGVzIiwiYWRkU3RhdGUiLCJfcXVldWUiLCJfZG9uZSIsImludGVybmFsV2VpZ2h0IiwibmV4dCIsImRvbmUiLCJ3cmFwIiwibGFzdE5hbWUiLCJzaXplIiwiZ2V0U3RhdGUiLCJsb29wQ291bnQiLCJJbmZpbml0eSIsImlzVHJhbnNpdGlvbmluZyIsIl9yZXNldCIsInBhdXNlZCIsInN0b3BwZWQiLCJkaXNjYXJkU3RhdGVzIiwiQWJzdHJhY3RCbGVuZFN0YXRlIiwiYmxlbmRTdGF0ZXMiLCJibGVuZFdlaWdodHMiLCJGcmVlQmxlbmRTdGF0ZSIsInN1bVdlaWdodHMiLCJCbGVuZDFkU3RhdGUiLCJibGVuZFRocmVzaG9sZHMiLCJwaGFzZU1hdGNoZXMiLCJfYmxlbmRWYWx1ZSIsImJsZW5kVmFsdWUiLCJub25aZXJvRGlmZmVyZW50U2l6ZSIsImNvbnRhaW5zRHVwbGljYXRlcyIsIl90aHJlc2hvbGRzIiwicGhhc2VNYXRjaCIsIl9zb3J0VGhyZXNob2xkcyIsIl9mb3JjZU5vVGhyZXNob2xkRHVwZXMiLCJfcGhhc2VMZWFkU3RhdGUiLCJfdXBkYXRlQmxlbmRXZWlnaHRzIiwidGhyZXNob2xkVmFsdWUiLCJzYW1lVmFsdWUiLCJmaW5kIiwidGhyZXNob2xkIiwicmVtb3ZlZCIsImZpbmRJbmRleCIsIm5vcm1hbGl6ZWRUaW1lIiwidGFyZ2V0SW5kZXgiLCJ0aHJlc2hvbGRBIiwidGhyZXNob2xkQiIsImZhY3RvckIiLCJmYWN0b3JBIiwic3RhdGVBIiwic3RhdGVCIiwiQmxlbmQyZFN0YXRlIiwib3RoZXJUaHJlc2hvbGQiLCJfYmxlbmRWYWx1ZVgiLCJfYmxlbmRWYWx1ZVkiLCJibGVuZFZhbHVlWCIsImJsZW5kVmFsdWVZIiwiX3ZlcnRpY2VzIiwiX3RyaWFuZ2xlcyIsImdldERlbGF1bmF5VHJpYW5ndWxhdGlvbiIsInByb3BlcnR5IiwidG9VcHBlckNhc2UiLCJfc2V0SW5mbHVlbmNlQ2xvc2VzdFBvaW50T25MaW5lIiwiaXNQb2ludEluVHJpYW5nbGUiLCJfc2V0SW5mbHVlbmNlVHJpYW5nbGUiLCJfc2V0SW5mbHVlbmNlQ2xvc2VzdFBvaW50SW5UcmlhbmdsZXMiLCJhcmVhQSIsInRyaWFuZ2xlQXJlYSIsImFyZWFCIiwiYXJlYUMiLCJ0b3RhbEFyZWEiLCJ3ZWlnaHRBIiwid2VpZ2h0QiIsIndlaWdodEMiLCJ0aHJlc2hvbGRDIiwic3RhdGVDIiwiX3NldFBoYXNlTGVhZFN0YXRlIiwiZ2xvYmFsQ2xvc2VzdFBvaW50IiwiZ2xvYmFsTWluRGlzdCIsImNsb3Nlc3RUcmlhbmdsZSIsInBvaW50QSIsImNsb3Nlc3RQb2ludE9uTGluZSIsInBvaW50QiIsInBvaW50QyIsImRpc3RBIiwiZGlzdEIiLCJkaXN0QyIsImxvY2FsQ2xvc2VzdFBvaW50IiwibG9jYWxNaW5EaXN0IiwiY2xvc2VzdFBvaW50Iiwic3RhdGVzIiwicGhhc2VNYXRjaGVkIiwiTGF5ZXJCbGVuZE1vZGVzIiwiT3ZlcnJpZGUiLCJBZGRpdGl2ZSIsIkRlZmF1bHRMYXllckJsZW5kTW9kZSIsInZhbGlkYXRlQmxlbmRNb2RlIiwiYmxlbmRNb2RlIiwiQW5pbWF0aW9uTGF5ZXIiLCJfYmxlbmRNb2RlIiwiX3dlaWdodFBhdXNlZCIsImlzV2VpZ2h0QWN0aXZlIiwiZ2V0U3RhdGVOYW1lcyIsImJsZW5kTmFtZSIsInNldEJsZW5kV2VpZ2h0IiwiZ2V0QmxlbmRXZWlnaHQiLCJTaW5nbGVTdGF0ZSIsIl90aW1lU2NhbGUiLCJ0aW1lU2NhbGUiLCJfbG9vcENvdW50IiwidGltZSIsIlJhbmRvbUFuaW1hdGlvblN0YXRlIiwic3ViU3RhdGVzIiwiX3BsYXlJbnRlcnZhbCIsInBsYXlJbnRlcnZhbCIsImdldFJhbmRvbUZsb2F0IiwicGxheVJhbmRvbUFuaW1hdGlvbiIsInRpbWVyIiwiX3Jlc2V0VGltZXIiLCJyYW5kb21TdGF0ZSIsImdldFJhbmRvbUludCIsImNhbmNlbEFuaW1hdGlvbiIsIkFuaW1hdGlvblR5cGVzIiwic2luZ2xlIiwiZnJlZUJsZW5kIiwicXVldWUiLCJyYW5kb21BbmltYXRpb24iLCJibGVuZDFkIiwiYmxlbmQyZCIsIl9sYXllcnMiLCJfbGF5ZXJNYXAiLCJleGlzdGluZyIsImxhc3RJbmRleCIsIm51bUxheWVycyIsIndlaWdodE11bHRpcGxpZXIiLCJjdXJyZW50U3RhdGUiLCJibGVuZFN0YXRlT3B0aW9ucyIsImJsZW5kT3B0aW9ucyIsIl9jcmVhdGVTaW5nbGVTdGF0ZSIsInF1ZXVlT3B0aW9ucyIsInF1ZXVlT3B0aW9uIiwiYmxlbmRNYXRjaFBoYXNlcyIsInN1YlN0YXRlT3B0aW9ucyIsImxheWVySW5kZXgiLCJfdmFsaWRhdGVJbmRleCIsImV2ZW50RGF0YSIsImN1cnJlbnRJbmRleCIsImdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0IiwicGF1c2VXZWlnaHQiLCJyZXN1bWVXZWlnaHQiLCJhbmltYXRpb25UeXBlIiwiX3ZhbGlkYXRlTmV3QW5pbWF0aW9uIiwicmVtb3ZlU3RhdGUiLCJjdXJyZW50QW5pbWF0aW9uTmFtZSIsIm5ld0FuaW1hdGlvbk5hbWUiLCJyZW5hbWVTdGF0ZSIsIm5leHRRdWV1ZWRBbmltYXRpb24iLCJsIiwicmVzdW1lZCIsIm1vdmVMYXllciIsImdldExheWVyV2VpZ2h0IiwicGF1c2VMYXllcldlaWdodCIsInJlc3VtZUxheWVyV2VpZ2h0IiwicGF1c2VMYXllciIsInJlc3VtZUxheWVyIiwiZ2V0VHJhbnNpdGlvbmluZyIsImdldEN1cnJlbnRBbmltYXRpb24iLCJfdXBkYXRlSW50ZXJuYWxXZWlnaHRzIiwiQXhpc01hcCIsIlBvc2l0aXZlWCIsIk5lZ2F0aXZlWCIsIlBvc2l0aXZlWSIsIk5lZ2F0aXZlWSIsIlBvc2l0aXZlWiIsIk5lZ2F0aXZlWiIsIkZhY2VUYXJnZXRUeXBlcyIsIkV5ZUNlbnRlciIsIkV5ZUxlZnQiLCJFeWVSaWdodCIsIk1vdXRoIiwiRmFjZVZlY3RvcnMiLCJNaWNyb1NhY2NhZGVXYWl0UmFuZ2VzIiwicG9zdE1hY3JvIiwiTWFjcm9TYWNjYWRlV2FpdFJhbmdlcyIsIm1vdXRoVGFyZ2V0IiwiZXllVGFyZ2V0IiwiQmxpbmtUaHJlc2hvbGQiLCJNYXhEZWx0YSIsIlBvaW50T2ZJbnRlcmVzdEZlYXR1cmUiLCJ0YXJnZXQiLCJsb29rVHJhY2tlciIsInNjZW5lIiwibG9va0JsZW5kVGltZSIsImxvb2tFYXNpbmdGbiIsImxvb2tMYXllcnMiLCJibGlua0JsZW5kVGltZSIsImJsaW5rRWFzaW5nRm4iLCJibGlua0xheWVycyIsIl92YWxpZGF0ZVRyYW5zZm9ybU9iamVjdCIsIl9sb29rVHJhY2tlciIsIl9zY2VuZSIsIl90YXJnZXQiLCJfcHJldlRhcmdldFBvcyIsIl9pc1RhcmdldE1vdmluZyIsIl9sb29rTGF5ZXJzIiwiX3RyYWNraW5nQ29uZmlncyIsIl9ibGlua0xheWVycyIsInJlZmVyZW5jZSIsImZvcndhcmRBeGlzIiwiaGFzU2FjY2FkZSIsInJlZ2lzdGVyTG9va0xheWVyIiwicmVnaXN0ZXJCbGlua0xheWVyIiwiX3JlZ2lzdGVyTG9va0FuaW1hdGlvbiIsImNvbmZpZyIsInRyYWNraW5nQ29uZmlnIiwiYW5nbGVzIiwiaCIsInByZXZBbmdsZXMiLCJzb3VyY2VQb3NpdGlvbiIsIl9nZXRXb3JsZFBvc2l0aW9uIiwidGFyZ2V0UG9zaXRpb24iLCJsb29rVmVjdG9yIiwidGFyZ2V0UG9zIiwidHJhY2tlclBvcyIsInRhcmdldFNwaGVyaWNhbCIsImNhcnRlc2lhblRvU3BoZXJpY2FsIiwidGFyZ2V0QW5nbGVzIiwiX3NwaGVyaWNhbFRvQmxlbmRWYWx1ZSIsInJlZkRpcmVjdGlvbiIsIl9nZXRPYmplY3REaXJlY3Rpb24iLCJyZWZTcGhlcmljYWwiLCJyZWZBbmdsZXMiLCJ0YXJnZXRUeXBlIiwiZGlzdGFuY2UiLCJfZ2V0VGFyZ2V0RGlzdGFuY2UiLCJmYWNlVmVjdG9yIiwic3BoZXJpY2FsIiwiYmxlbmRWYWx1ZXMiLCJtYXhIU3BlZWQiLCJleHAiLCJtYXhWU3BlZWQiLCJEMCIsImQiLCJoRHVyYXRpb24iLCJ2RHVyYXRpb24iLCJtaWNyb1NhY2NhZGUiLCJfdXBkYXRlTGF5ZXJTcGVlZCIsIl9pbml0aWFsaXplTWljcm9UaW1lciIsIm1hY3JvU2FjY2FkZSIsIm1hY3JvU2FjY2FkZVdhaXRSYW5nZSIsImhMaW1pdCIsImhGYWN0b3IiLCJ2TGltaXQiLCJ2RmFjdG9yIiwic2FjY2FkZVRhcmdldCIsIl9nZXRGYWNlVGFyZ2V0QW5nbGVzIiwiX2luaXRpYWxpemVNYWNyb1RpbWVyIiwibWluV2FpdFRpbWUiLCJtYXhXYWl0VGltZSIsIndhaXRUaW1lIiwibWljcm9TYWNjYWRlVGltZXIiLCJfc2V0TWljcm9TYWNjYWRlIiwibWFjcm9TYWNjYWRlVGltZXIiLCJfc2V0TWFjcm9TYWNjYWRlIiwiX2FkZFRyYWNraW5nQ29uZmlnIiwiaFZlbG9jaXR5IiwidlZlbG9jaXR5IiwiX3NldExvb2tBbmdsZXMiLCJfcmVzZXRMb29rQW5nbGVzIiwiZGVsdGFTZWNvbmRzIiwidHJpZ2dlckJsaW5rIiwiY3VycmVudEgiLCJjdXJyZW50ViIsInRhcmdldEgiLCJ0YXJnZXRWIiwicHJldlRhcmdldEgiLCJwcmV2VGFyZ2V0ViIsImNoYW5nZUFtb3VudCIsInRvRGVncmVlcyIsImdldEFuZ2xlQmV0d2VlbiIsImRhbXBWYWx1ZSIsInNldFRhcmdldCIsInNldFRhcmdldEJ5TmFtZSIsInNldFRhcmdldEJ5SWQiLCJvYmoiLCJmb3J3YXJkVmVjdG9yIiwicm90YXRpb24iLCJnZXRSb3RhdGlvbk1hdHJpeCIsIl9nZXRXb3JsZE1hdHJpeCIsInJvdGF0ZVZlY3RvciIsInRoZXRhIiwicGhpIiwiT2JqZWN0M0QiLCJnZXRPYmplY3RCeU5hbWUiLCJnZXRPYmplY3RCeUlkIiwidXBkYXRlV29ybGRNYXRyaXgiLCJtYXRyaXhXb3JsZCIsImVsZW1lbnRzIiwiQ29yZVBvaW50T2ZJbnRlcmVzdEZlYXR1cmUiLCJlbnYiLCJUZXh0VG9TcGVlY2hVdGlscyIsInRleHQiLCJyYW5kb21NYXJrcyIsImludGVybmFsTWFwIiwiX3Byb2Nlc3NJbnB1dE1hcCIsInNwZWFrVGFncyIsInNzbWxNYXJrUmVnZXgiLCJzc21sVGFnUmVnZXgiLCJleGlzdGluZ1RhZ3MiLCJleGVjIiwic3RhcnQiLCJlbmQiLCJjaHVua3MiLCJzc21sTWFya1Jlc3VsdCIsImR1cGxpY2F0ZU1hcmtUb0NoZWNrIiwiZXhpc3RpbmdUYWciLCJzdWJzdHIiLCJfaW5zZXJ0TWFya3MiLCJtYXJrVGV4dCIsIm1hcmtlZFRleHQiLCJqb2luIiwiYWRkTWFya3NUb1VubWFya2VkU2VudGVuY2VzIiwidmFsaWRhdGVUZXh0IiwibWFya3MiLCJtYXJrSW5kaWNlcyIsIm1hcmtSZXN1bHQiLCJzc21sUmVzdWx0IiwiY2xlYW5lZFRleHQiLCJleGlzdGluZ1NzbWwiLCJ3aGl0ZXNwYWNlIiwic2VudGVuY2VFbmRJbmRpY2VzIiwiX2dldFNlbnRlbmNlRW5kcyIsInByZXZJbmRleCIsInRhcmdldEluZGljZXMiLCJjb250YWluc01hcmsiLCJtYXJrSW5kZXgiLCJyYW5kb21NYXJrZWRUZXh0IiwiX2luc2VydFJhbmRvbU1hcmtzQXQiLCJvZmZzZXQiLCJyYW5kb21NYXJrIiwic2VudGVuY2VSZWdleCIsImVuZFNlbnRlbmNlUmVnZXgiLCJzZW50ZW5jZUVuZHMiLCJwdW5jdFJlc3VsdCIsImR1cGxpY2F0ZXNUb0NoZWNrIiwid29yZFJlZ2V4IiwibG93ZXJDYXNlV29yZCIsImNoZWNrRHVwbGljYXRlIiwibWFya2VkV29yZHMiLCJ0b0xvd2VyQ2FzZSIsImV4aXN0aW5nTWFya3MiLCJsaXN0IiwiaXNBcnJheSIsIkFic3RyYWN0U3BlZWNoIiwic3BlYWtlciIsInNwZWVjaG1hcmtzIiwiX3NwZWFrZXIiLCJfdGV4dCIsIl9zcGVlY2htYXJrcyIsIl9zcGVlY2htYXJrT2Zmc2V0IiwiX3N0YXJ0VGltZSIsIl9sb2NhbFRpbWUiLCJfcGF1c2VUaW1lIiwiX3BsYXlpbmciLCJfbWFya0l0ZXIiLCJfY3VycmVudE1hcmsiLCJfZW5kVGltZSIsIl9wcm9taXNlIiwib25JbnRlcnJ1cHQiLCJpbnRlcnJ1cHQiLCJzcGVlY2giLCJfY2hlY2tGaW5pc2hlZCIsIl9jcmVhdGVQcm9taXNlIiwiU3BlZWNoIiwiYXVkaW9Db25maWciLCJfYXVkaW8iLCJhdWRpbyIsIm9uZW5kZWQiLCJfYXVkaW9GaW5pc2hlZCIsInZvbHVtZSIsInNldFRpbWVvdXQiLCJfcGxheUF1ZGlvIiwiX3BhdXNlQXVkaW8iLCJ0ZXh0VG9TcGVlY2giLCJfdGhyZWVBdWRpbyIsInRocmVlQXVkaW8iLCJkaXNjb25uZWN0IiwiY29ubmVjdCIsIkNvcmVTcGVlY2giLCJlbmdpbmVzIiwiYXVkaW9Gb3JtYXRzIiwic3BlZWNobWFya1R5cGVzIiwic2FtcGxlUmF0ZXMiLCJtcDMiLCJyYXRlcyIsImRlZmF1bHRzIiwic3RhbmRhcmQiLCJuZXVyYWwiLCJwY20iLCJvZ2dfdm9yYmlzIiwiYXdzVmVyc2lvbiIsIkFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSIsInZvaWNlIiwiZW5naW5lIiwibGFuZ3VhZ2UiLCJhdWRpb0Zvcm1hdCIsInNhbXBsZVJhdGUiLCJtaW5FbmRNYXJrRHVyYXRpb24iLCJfc3BlZWNoQ2FjaGUiLCJfY3VycmVudFNwZWVjaCIsIl9jdXJyZW50UHJvbWlzZSIsIl9pc1ZhbGlkYXRlZCIsIl92b2x1bWVQYXVzZWQiLCJfdm9pY2UiLCJQT0xMWV9ERUZBVUxUUyIsIlZvaWNlSWQiLCJfbGFuZ3VhZ2UiLCJMYW5ndWFnZU5hbWUiLCJfZW5naW5lIiwiRW5naW5lIiwiX2F1ZGlvRm9ybWF0IiwiT3V0cHV0Rm9ybWF0IiwiX3NhbXBsZVJhdGUiLCJTYW1wbGVSYXRlIiwiX21pbkVuZE1hcmtEdXJhdGlvbiIsIkFXU19WRVJTSU9OIiwiUE9MTFlfTUlOX05FVVJBTF9WRVJTSU9OIiwiZm9ybWF0IiwicmF0ZSIsInZvaWNlSWQiLCJQT0xMWV9WT0lDRVMiLCJJZCIsIlN1cHBvcnRlZEVuZ2luZXMiLCJsYW5ndWFnZUNvZGUiLCJQT0xMWV9MQU5HVUFHRVMiLCJhdmFpbGFibGVDb2RlcyIsIkxhbmd1YWdlQ29kZSIsIkFkZGl0aW9uYWxMYW5ndWFnZUNvZGVzIiwiUE9MTFlfTEFOR1VBR0VfQ09ERVMiLCJfdmFsaWRhdGVFbmdpbmUiLCJfdmFsaWRhdGVGb3JtYXQiLCJfdmFsaWRhdGVSYXRlIiwiX3ZhbGlkYXRlVm9pY2UiLCJfdmFsaWRhdGVMYW5ndWFnZSIsImlzUmVhZHkiLCJfdmFsaWRhdGUiLCJza2lwU3BlZWNoZXMiLCJjdXJyZW50Q29uZmlnIiwiX2dldENvbmZpZyIsImN1cnJlbnRDb25maWdTdHIiLCJMYW5ndWFnZSIsInZhbGlkQ29uZmlnIiwiY29uZmlnU3RyIiwic3BlZWNoQ29uZmlnU3RyIiwiX3VwZGF0ZVNwZWVjaCIsImF1ZGlvUGFyYW1zIiwiVGV4dCIsIlRleHRUeXBlIiwic3BlZWNobWFya1BhcmFtcyIsIlNwZWVjaE1hcmtUeXBlcyIsIl9zeW50aGVzaXplU3BlZWNobWFya3MiLCJfc3ludGhlc2l6ZUF1ZGlvIiwicmVzdWx0cyIsIl9jcmVhdGVTcGVlY2giLCJwYXJhbXMiLCJwcmVzaWduZXIiLCJnZXRTeW50aGVzaXplU3BlZWNoVXJsIiwidXJsIiwicG9sbHkiLCJzeW50aGVzaXplU3BlZWNoIiwianNvblN0cmluZyIsIkF1ZGlvU3RyZWFtIiwianNvbiIsImRhdGFTdHIiLCJkYXRhIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwibWFya1R5cGVzIiwiZW5kTWFya1R5cGVzIiwic3BlZWNoTWFya3MiLCJtYXRjaEFsbCIsIm51bU1hcmtzIiwibGFzdE1hcmsiLCJlbmRUaW1lcyIsImVuZFRpbWUiLCJfdXBkYXRlQ29uZmlnIiwiZ2V0Vm9sdW1lIiwic2V0Vm9sdW1lIiwicGF1c2VWb2x1bWUiLCJyZXN1bWVWb2x1bWUiLCJfdm9sdW1lIiwidm9sdW1lUGVuZGluZyIsInBsYXlpbmciLCJjdXJyZW50UHJvbWlzZSIsIl9nZXRTcGVlY2giLCJfc2V0Q3VycmVudFNwZWVjaCIsIl9zdGFydFNwZWVjaCIsInZlcnNpb24iLCJjdXN0b21Vc2VyQWdlbnQiLCJfd2l0aEN1c3RvbVVzZXJBZ2VudCIsInNlcnZpY2UiLCJfaXNSZWFkeSIsImF2YWlsYWJsZVZvaWNlcyIsImF2YWlsYWJsZUxhbmd1YWdlcyIsImF2YWlsYWJsZUxhbmd1YWdlQ29kZXMiLCJtaW5OZXVyYWxTZGsiLCJkZXNjcmliZVZvaWNlcyIsInJlc3BvbnNlIiwiYWxsQ29kZXMiLCJWb2ljZXMiLCJjb2RlIiwicmVhZHkiLCJjdXJyZW50VXNlckFnZW50Iiwic3VtZXJpYW5Ib3N0c1VzZXJBZ2VudCIsImNvbmNhdCIsIkxleGljb25OYW1lcyIsIl9lbmFibGVkIiwiX3NldEF1ZGlvQ29udGV4dCIsIl9vYnNlcnZlQXVkaW9Db250ZXh0IiwiX2F1ZGlvQ29udGV4dCIsIkF1ZGlvQ29udGV4dCIsIm9uc3RhdGVjaGFuZ2UiLCJBdWRpbyIsImxvb3AiLCJjcm9zc09yaWdpbiIsInByZWxvYWQiLCJkb2N1bWVudCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImxvYWQiLCJyZXN1bWVBdWRpbyIsImVuYWJsZWQiLCJhdHRhY2hUbyIsIl9saXN0ZW5lciIsIl9hdHRhY2hUbyIsImNvbnRleHQiLCJQb3NpdGlvbmFsQXVkaW8iLCJhZGQiLCJzZXRNZWRpYUVsZW1lbnRTb3VyY2UiLCJDb3JlVGV4dFRvU3BlZWNoRmVhdHVyZSIsInRocmVlQmxlbmRNb2RlcyIsIk5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZSIsIkFkZGl0aXZlQW5pbWF0aW9uQmxlbmRNb2RlIiwidGhyZWVBY3Rpb24iLCJfb25GaW5pc2hlZEV2ZW50IiwiYWN0aW9uIiwidGltZVNjYWxlUGVuZGluZyIsIl90aHJlZUFjdGlvbiIsImNsYW1wV2hlbkZpbmlzaGVkIiwiTG9vcE9uY2UiLCJMb29wUmVwZWF0IiwicmVwZXRpdGlvbnMiLCJnZXRNaXhlciIsImdldENsaXAiLCJzZXRFZmZlY3RpdmVXZWlnaHQiLCJDb3JlU2luZ2xlU3RhdGUiLCJfbWl4ZXIiLCJBbmltYXRpb25NaXhlciIsImNsaXAiLCJleGlzdGluZ0FjdGlvbiIsImNsb25lIiwiY2xpcEFjdGlvbiIsInVuY2FjaGVSb290IiwiQ29yZUFuaW1hdGlvbkZlYXR1cmUiLCJFYXNpbmciLCJhd3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNNQSxROzs7OztBQUNKO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Usc0JBQWtFO0FBQUE7O0FBQUEsUUFBdERDLFVBQXNELHVFQUF6QyxZQUFNLENBQUUsQ0FBaUM7QUFBQSxRQUEvQkMsU0FBK0I7QUFBQSxRQUFwQkMsUUFBb0I7QUFBQSxRQUFWQyxRQUFVOztBQUFBOztBQUNoRSxRQUFJLE9BQU9ILFVBQVAsS0FBc0IsVUFBMUIsRUFBc0M7QUFDcEMsWUFBTSxJQUFJSSxLQUFKLDhEQUFOO0FBR0Q7O0FBRUQsUUFBSSxPQUFPSCxTQUFQLEtBQXFCLFdBQXJCLElBQW9DLE9BQU9BLFNBQVAsS0FBcUIsVUFBN0QsRUFBeUU7QUFDdkUsWUFBTSxJQUFJRyxLQUFKLDZEQUFOO0FBR0Q7O0FBRUQsUUFBSSxPQUFPRixRQUFQLEtBQW9CLFdBQXBCLElBQW1DLE9BQU9BLFFBQVAsS0FBb0IsVUFBM0QsRUFBdUU7QUFDckUsWUFBTSxJQUFJRSxLQUFKLDREQUFOO0FBR0Q7O0FBRUQsUUFBSSxPQUFPRCxRQUFQLEtBQW9CLFdBQXBCLElBQW1DLE9BQU9BLFFBQVAsS0FBb0IsVUFBM0QsRUFBdUU7QUFDckUsWUFBTSxJQUFJQyxLQUFKLDREQUFOO0FBR0Q7O0FBRUQsUUFBSUMsR0FBSjtBQUNBLFFBQUlDLEdBQUo7QUFDQSxRQUFJQyxNQUFKO0FBQ0EsUUFBTUMsTUFBTSxHQUFHO0FBQ2JDLGNBQVEsRUFBRSxLQURHO0FBRWJDLGNBQVEsRUFBRSxLQUZHO0FBR2JDLGNBQVEsRUFBRSxLQUhHO0FBSWJDLGFB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QUNGO0FBQ0E7QUFDRTFuQixNQUFJLEVBQUpBLFFBQUlBO0FBeERTLENBQWYiLCJmaWxlIjoiMzMzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyoqXHJcbiAqIFRoZSBidWlsdC1pbiBjbGFzcyBmb3IgYXN5bmNocm9ub3VzIFByb21pc2VzLlxyXG4gKiBAZXh0ZXJuYWwgUHJvbWlzZVxyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1Byb21pc2VcclxuICovXHJcblxyXG4vKipcclxuICogQSBQcm9taXNlIG9iamVjdCB0aGF0IGNhbiBiZSByZXNvbHZlZCwgcmVqZWN0ZWQgb3IgY2FuY2VsZWQgYXQgYW55IHRpbWUgYnkgdGhlXHJcbiAqIHVzZXIuXHJcbiAqXHJcbiAqIEBleHRlbmRzIGV4dGVybmFsOlByb21pc2VcclxuICovXHJcbmNsYXNzIERlZmVycmVkIGV4dGVuZHMgUHJvbWlzZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZXhlY3V0YWJsZT0oKSA9PiB7fV0gLSBUaGUgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYnkgdGhlXHJcbiAgICogY29uc3RydWN0b3IsIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBjb25zdHJ1Y3RpbmcgdGhlIHByb21pc2UuIFRoZSBzaWduYXR1cmVcclxuICAgKiBvZiB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlOiBleGVjdXRhYmxlKCAgcmVzb2x1dGlvbkZ1bmMsIHJlamVjdGlvbkZ1bmMsIGNhbmNlbGxhdGlvbkZ1bmMgKS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZXNvbHZlIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVzb2x2ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uUmVqZWN0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVqZWN0ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzXHJcbiAgICogdGhlIHByb21pc2UuIENhbmNlbGluZyByZXN1bHRzIGluIHRoZSBwcm9taXNlIGhhdmluZyBhIHN0YXR1cyBvZiAncmVzb2x2ZWQnLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGV4ZWN1dGFibGUgPSAoKSA9PiB7fSwgb25SZXNvbHZlLCBvblJlamVjdCwgb25DYW5jZWwpIHtcclxuICAgIGlmICh0eXBlb2YgZXhlY3V0YWJsZSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgbmV3IERlZmVycmVkLiBFeGVjdXRhYmxlIG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvblJlc29sdmUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvblJlc29sdmUgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIG5ldyBEZWZlcnJlZC4gT25SZXNvbHZlIG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvblJlamVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9uUmVqZWN0ICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBuZXcgRGVmZXJyZWQuIE9uUmVqZWN0IG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvbkNhbmNlbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9uQ2FuY2VsICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBuZXcgRGVmZXJyZWQuIE9uQ2FuY2VsIG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlcztcclxuICAgIGxldCByZWo7XHJcbiAgICBsZXQgY2FuY2VsO1xyXG4gICAgY29uc3Qgc3RhdHVzID0ge1xyXG4gICAgICByZXNvbHZlZDogZmFsc2UsXHJcbiAgICAgIHJlamVjdGVkOiBmYWxzZSxcclxuICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxyXG4gICAgICBwZW5kaW5nOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBzdXBlcigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIC8vIFN0b3JlIHRoZSByZXNvbHZlclxyXG4gICAgICByZXMgPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBzdGF0dXMucmVzb2x2ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVzb2x2ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG9uUmVzb2x2ZSh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIFN0b3JlIHRoZSByZWplY3RlclxyXG4gICAgICByZWogPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBzdGF0dXMucmVqZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVqZWN0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb25SZWplY3QodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZWplY3QodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIFN0b3JlIHRoZSBjYW5jZWxlclxyXG4gICAgICBjYW5jZWwgPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBzdGF0dXMuY2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uQ2FuY2VsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb25DYW5jZWwodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBSdW4gdGhlIGV4ZWN1dGFibGUgd2l0aCBjdXN0b20gcmVzb2x2ZXIgYW5kIHJlamVjdGVyXHJcbiAgICAgIGV4ZWN1dGFibGUocmVzLCByZWosIGNhbmNlbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB0aGlzLl9yZXNvbHZlID0gcmVzO1xyXG4gICAgdGhpcy5fcmVqZWN0ID0gcmVqO1xyXG4gICAgdGhpcy5fY2FuY2VsID0gY2FuY2VsO1xyXG4gICAgdGhpcy5fZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSByZXNvbHZlZCBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCByZXNvbHZlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMucmVzb2x2ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSByZWplY3RlZCBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCByZWplY3RlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMucmVqZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBjYW5jZWxlZCBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCBjYW5jZWxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMuY2FuY2VsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBwZW5kaW5nIHN0YXRlIG9mIHRoZSBwcm9taXNlLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICovXHJcbiAgZ2V0IHBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzLnBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgcHJvbWlzZSB0byByZXNvbHZlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIFZhbHVlIHRvIHBhc3MgdG8gdGhlIHJlc29sdmVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2FueX0gLSBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSByZXNvbHZlciBmdW5jdGlvbi5cclxuICAgKi9cclxuICByZXNvbHZlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgcHJvbWlzZSB0byByZWplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gcGFzcyB0byB0aGUgcmVqZWN0ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7YW55fSAtIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHJlamVjdGVyIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG4gIHJlamVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlamVjdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgcHJvbWlzZSB0byByZXNvbHZlIGFuZCBzZXQgdGhlIGNhbmNlbGVkIHN0YXRlIHRvIHRydWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gcGFzcyB0byB0aGUgY2FuY2VsbGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2FueX0gLSBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYW5jZWxsZXIgZnVuY3Rpb24uXHJcbiAgICovXHJcbiAgY2FuY2VsKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FuY2VsKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJ1biB0aGUgcHJvbWlzZSBmdW5jdGlvbiB0byB0cnkgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZS4gUHJvbWlzZSBtdXN0IGJlXHJcbiAgICogcGVuZGluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Li4uYW55fSBhcmdzIC0gT3B0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgYWZ0ZXIgcmVzb2x2ZSBhbmQgcmVqZWN0LlxyXG4gICAqL1xyXG4gIGV4ZWN1dGUoLi4uYXJncykge1xyXG4gICAgaWYgKHRoaXMucGVuZGluZykge1xyXG4gICAgICB0aGlzLl9leGVjdXRhYmxlKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCwgdGhpcy5fY2FuY2VsLCAuLi5hcmdzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGNhbmNlbGVkIGRlZmVycmVkIHByb21pc2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gY2FuY2VsIHRoZSBwcm9taXNlIHdpdGguXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgc3RhdGljIGNhbmNlbCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBEZWZlcnJlZCgoX3Jlc29sdmUsIF9yZWplY3QsIGNhbmNlbCkgPT4ge1xyXG4gICAgICBjYW5jZWwodmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVmZXJyZWQgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvciByZWplY3Qgb25jZSBhbGwgcHJvbWlzZXNcclxuICAgKiBpbiB0aGUgaW5wdXQgYXJyYXkgaGF2ZSBiZWVuIHJlc29sdmVkIG9yIG9uZSBwcm9taXNlIGlzIGNhbmNlbGVkIG9yIHJlamVjdGVkLlxyXG4gICAqIFByb21pc2VzIGluIHRoZSBhcnJheSB0aGF0IGFyZSBEZWZlcnJlZCBwcm9taXNlcyB3aWxsIGJlIG1hbnVhbGx5IHJlc29sdmVkLFxyXG4gICAqIHJlamVjdGVkIG9yIGNhbmNlbGVkIHdoZW4gY2FsbGluZyByZXNvbHZlLCByZWplY3Qgb3IgY2FuY2VsIG9uIHRoZSByZXR1cm4gcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGFueT59IGl0ZXJhYmxlIC0gQW4gaXRlcmFibGUgc3VjaCBhcyBhbiBhcnJheS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZXNvbHZlIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVzb2x2ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uUmVqZWN0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVqZWN0ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzXHJcbiAgICogdGhlIHByb21pc2UuIENhbmNlbGluZyByZXN1bHRzIGluIHRoZSBwcm9taXNlIGhhdmluZyBhIHN0YXR1cyBvZiAnY2FuY2VsZWQnLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgRGVmZXJyZWRcclxuICAgKi9cclxuICBzdGF0aWMgYWxsKGl0ZXJhYmxlLCBvblJlc29sdmUsIG9uUmVqZWN0LCBvbkNhbmNlbCkge1xyXG4gICAgaWYgKGl0ZXJhYmxlID09IG51bGwgfHwgdHlwZW9mIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgbGV0IGUgPSBgQ2Fubm90IGV4ZWN1dGUgRGVmZXJyZWQuYWxsLiBGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGl0ZXJhYmxlLmA7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uUmVqZWN0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgZSA9IG9uUmVqZWN0KGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFycmF5ID0gWy4uLml0ZXJhYmxlXTtcclxuICAgIGNvbnN0IGRlZmVycmVkID0gYXJyYXkuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERlZmVycmVkKTtcclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgRGVmZXJyZWQoXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgcmVzb2x2ZVZhbHVlID0+IHtcclxuICAgICAgICBkZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaXRlbS5yZXNvbHZlKHJlc29sdmVWYWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGVmZXJyZWQubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvblJlc29sdmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBvblJlc29sdmUocmVzb2x2ZVZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmVWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgICBkZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaXRlbS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRlZmVycmVkLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb25SZWplY3QgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBvblJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbFZhbHVlID0+IHtcclxuICAgICAgICBkZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaXRlbS5jYW5jZWwoY2FuY2VsVmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRlZmVycmVkLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb25DYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBvbkNhbmNlbChjYW5jZWxWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBjYW5jZWxWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbnVtSXRlbXMgPSBhcnJheS5sZW5ndGg7XHJcbiAgICBjb25zdCBpdGVtVHJhY2tlciA9IHtcclxuICAgICAgZmFpbGVkOiBmYWxzZSxcclxuICAgICAgbnVtUmVzb2x2ZWQ6IDAsXHJcbiAgICAgIHJlc29sdXRpb25zOiBbXVxyXG4gICAgfVxyXG5cclxuICAgIGFycmF5LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChpdGVtVHJhY2tlci5mYWlsZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBpZiAoIShpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcclxuICAgICAgICBpdGVtVHJhY2tlci5yZXNvbHV0aW9uc1tpbmRleF0gPSBpdGVtO1xyXG4gICAgICAgIGl0ZW1UcmFja2VyLm51bVJlc29sdmVkICs9IDE7XHJcblxyXG4gICAgICAgIGlmIChpdGVtVHJhY2tlci5udW1SZXNvbHZlZCA9PT0gbnVtSXRlbXMpIHtcclxuICAgICAgICAgIHJlc3VsdC5yZXNvbHZlKGl0ZW1UcmFja2VyLnJlc29sdXRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpdGVtLnRoZW4oXHJcbiAgICAgICAgdmFsdWUgPT4ge1xyXG4gICAgICAgICAgaWYgKCFpdGVtVHJhY2tlci5mYWlsZWQgJiYgIWl0ZW0uY2FuY2VsZWQpIHtcclxuICAgICAgICAgICAgaXRlbVRyYWNrZXIucmVzb2x1dGlvbnNbaW5kZXhdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGl0ZW1UcmFja2VyLm51bVJlc29sdmVkICs9IDE7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbVRyYWNrZXIubnVtUmVzb2x2ZWQgPT09IG51bUl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0LnJlc29sdmUoaXRlbVRyYWNrZXIucmVzb2x1dGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCFpdGVtVHJhY2tlci5mYWlsZWQpIHtcclxuICAgICAgICAgICAgaXRlbVRyYWNrZXIuZmFpbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbmNlbCh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICBpZiAoIWl0ZW1UcmFja2VyLmZhaWxlZCkge1xyXG4gICAgICAgICAgICBpdGVtVHJhY2tlci5mYWlsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHQucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRGVmZXJyZWQ7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5cclxuLyoqXHJcbiAqIEEgY29sbGVjdGlvbiBvZiB1c2VmdWwgZ2VuZXJpYyBmdW5jdGlvbnMuXHJcbiAqXHJcbiAqIEBoaWRlY29uc3RydWN0b3JcclxuICovXHJcbmNsYXNzIFV0aWxzIHtcclxuICAvKipcclxuICAgKiBAc3RhdGljXHJcbiAgICpcclxuICAgKiBHZW5lcmF0ZSBhIHVuaXF1ZSBpZFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgKi9cclxuICBzdGF0aWMgY3JlYXRlSWQoKSB7XHJcbiAgICByZXR1cm4gJ3h4eHh4eHh4eHh4eDR4eHh5eHh4eHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGMgPT4ge1xyXG4gICAgICBjb25zdCByYW5kb21OdW1iZXIgPSBNYXRoLmZsb29yKChEYXRlLm5vdygpICsgTWF0aC5yYW5kb20oKSAqIDE2KSAlIDE2KTtcclxuICAgICAgaWYgKGMgPT09ICd4Jykge1xyXG4gICAgICAgIHJldHVybiByYW5kb21OdW1iZXIudG9TdHJpbmcoMTYpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFNldCBiaXQgNiBhbmQgNyB0byAwIGFuZCAxXHJcbiAgICAgIHJldHVybiAoKHJhbmRvbU51bWJlciAmIDB4MykgfCAweDgpLnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHN0YXRpY1xyXG4gICAqXHJcbiAgICogQ2hlY2sgYSBuYW1lIHN0cmluZyBhZ2FpbnN0IGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHVuaXF1ZS5cclxuICAgKiBJZiBpdCBpc24ndCwgYXBwZW5kIGluY3JlbWVudGVkIHRyYWlsaW5nIGludGVnZXJzIHRvIHRoZSBlbmQgb2YgdGhlIG5hbWVcclxuICAgKiB1bnRpbCBpdCBpcyB1bmlxdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFN0cmluZyBuYW1lIHRvIG1ha2UgdW5pcXVlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBuYW1lQXJyYXkgLSBBcnJheSBvZiBzdHJpbmcgbmFtZXMgdG8gY2hlY2sgYWdhaW5zLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0VW5pcXVlTmFtZShuYW1lLCBuYW1lQXJyYXkgPSBbXSkge1xyXG4gICAgLy8gSWYgdGhlIG5hbWUgaXNuJ3QgaW4gdGhlIGFycmF5IHJldHVybiBpdCByaWdodCBhd2F5XHJcbiAgICBpZiAoIW5hbWVBcnJheS5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICByZXR1cm4gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuYW1lU2V0ID0gbmV3IFNldChuYW1lQXJyYXkpO1xyXG5cclxuICAgIC8vIFNlcGFyYXRlIHRoZSBuYW1lIGludG8gc3RyaW5nIGFuZCB0cmFpbGluZyBudW1iZXJzXHJcbiAgICBjb25zdCBtYXRjaEdyb3VwID0gbmFtZS5tYXRjaCgvXFxkKiQvKTtcclxuICAgIGNvbnN0IHtpbmRleH0gPSBtYXRjaEdyb3VwO1xyXG4gICAgY29uc3QgYmFzZU5hbWUgPSBuYW1lLnNsaWNlKDAsIGluZGV4KTtcclxuICAgIGxldCBpbmNyZW1lbnQgPSBOdW1iZXIobWF0Y2hHcm91cFswXSk7XHJcblxyXG4gICAgLy8gRmluZCB0aGUgaGlnaGVzdCB0cmFpbGluZyBudW1iZXIgdmFsdWUgZm9yIHRoZSBiYXNlIG9mIHRoZSBuYW1lXHJcbiAgICBuYW1lU2V0LmZvckVhY2goc2V0TmFtZSA9PiB7XHJcbiAgICAgIGNvbnN0IHNldE1hdGNoR3JvdXAgPSBzZXROYW1lLm1hdGNoKC9cXGQqJC8pO1xyXG5cclxuICAgICAgaWYgKHNldE5hbWUuc2xpY2UoMCwgc2V0TWF0Y2hHcm91cC5pbmRleCkgPT09IGJhc2VOYW1lKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0SW5jcmVtZW50ID0gTnVtYmVyKHNldE1hdGNoR3JvdXBbMF0pO1xyXG5cclxuICAgICAgICBpZiAoc2V0SW5jcmVtZW50ID4gaW5jcmVtZW50KSB7XHJcbiAgICAgICAgICBpbmNyZW1lbnQgPSBzZXRJbmNyZW1lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBJbmNyZW1lbnQgdGhlIGhpZ2hlc3QgdHJhaWxpbmcgbnVtYmVyIGFuZCBhcHBlbmQgdG8gdGhlIG5hbWVcclxuICAgIHJldHVybiBgJHtiYXNlTmFtZX0ke2luY3JlbWVudCArIDF9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGRlZmVycmVkIHByb21pc2UgdGhhdCB3aWxsIHdhaXQgYSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmVcclxuICAgKiByZXNvbHZpbmcuIFBhc3MgZGVsdGEgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gdGhlIGRlZmVycmVkIHByb21pc2UncyBleGVjdXRlXHJcbiAgICogbWV0aG9kIGluIGFuIHVwZGF0ZSBsb29wIHRvIHByb2dyZXNzIHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSByZXNvbHZpbmcuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBvYmplY3RcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkZpbmlzaF0gLSBDYWxsYmFjayB0byBleGVjdXRlIG9uY2UgdGhlIHdhaXQgdGltZVxyXG4gICAqIGlzIG1ldC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vblByb2dyZXNzIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIHdhaXRcclxuICAgKiB0aW1lIHByb2dyZXNzZXMgdG93YXJkcyB0aGUgdGFyZ2V0IG51bWJlciBvZiBzZWNvbmRzLiBUaGUgYW1vdW50IG9mIHByb2dyZXNzXHJcbiAgICogYXMgYSAwLTEgcGVyY2VudGFnZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25DYW5jZWwgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB1c2VyIGNhbmNlbHNcclxuICAgKiB0aGUgd2FpdCBiZWZvcmUgY29tcGxldGlvbi5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkVycm9yIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgd2FpdCBzdG9wc1xyXG4gICAqIGJlY2F1c2UgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuIFRoZSBlcnJvciBtZXNzYWdlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzdGF0aWMgd2FpdChzZWNvbmRzID0gMCwge29uRmluaXNoLCBvblByb2dyZXNzLCBvbkNhbmNlbCwgb25FcnJvcn0gPSB7fSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHNlY29uZHMgaXMgbnVtZXJpY1xyXG4gICAgaWYgKHR5cGVvZiBzZWNvbmRzICE9PSAnbnVtYmVyJykge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYEludmFsaWQgc2Vjb25kcyB2YWx1ZSAke3NlY29uZHN9IGZvciB3YWl0LiBEZWZhdWx0aW5nIHRvIDAuYFxyXG4gICAgICApO1xyXG5cclxuICAgICAgc2Vjb25kcyA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzb2x2ZSBpbW1lZGlhdGVseSBpZiB0aGUgd2FpdCB0aW1lIGlzIG5vdCBncmVhdGVyIHRoYW4gMFxyXG4gICAgaWYgKHNlY29uZHMgPD0gMCkge1xyXG4gICAgICBpZiAodHlwZW9mIG9uRmluaXNoID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25GaW5pc2goKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY3VycmVudFRpbWUgPSAwO1xyXG4gICAgY29uc3QgdG90YWxUaW1lID0gc2Vjb25kcyAqIDEwMDA7IC8vIGNvbnZlcnQgdG8gbWlsbGlzZWNvbmRzXHJcblxyXG4gICAgLy8gRXhlY3V0YWJsZSB0byBwYXNzIHRvIERlZmVycmVkLCBtZWFudCB0byBiZSBydW4gaW4gYW4gdXBkYXRlIGxvb3BcclxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHJlc29sdmUsIHJlamVjdCwgX2NhbmNlbCwgZGVsdGFUaW1lID0gMCkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGRlbHRhVGltZSAhPT0gJ251bWJlcicpIHtcclxuICAgICAgICBjb25zdCBlID0gbmV3IEVycm9yKFxyXG4gICAgICAgICAgYEludmFsaWQgcHJvcGVydHkgd2FpdCBkZWx0YVRpbWUuIERlbHRhVGltZSBtdXN0IGJlIGEgbnVtYmVyLmBcclxuICAgICAgICApO1xyXG4gICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lIGhhcyBwYXNzZWRcclxuICAgICAgaWYgKGRlbHRhVGltZSA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2lnbmFsIHByb2dyZXNzXHJcbiAgICAgIGN1cnJlbnRUaW1lICs9IGRlbHRhVGltZTtcclxuICAgICAgaWYgKGN1cnJlbnRUaW1lIDwgMCkge1xyXG4gICAgICAgIGN1cnJlbnRUaW1lID0gMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvblByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25Qcm9ncmVzcyhNYXRoLm1pbihjdXJyZW50VGltZSAvIHRvdGFsVGltZSwgMSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTaWduYWwgY29tcGxldGlvbiBvbmNlIHRpbWUgaXMgdXBcclxuICAgICAgaWYgKGN1cnJlbnRUaW1lID49IHRvdGFsVGltZSkge1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbmV3IERlZmVycmVkKG9uVXBkYXRlLCBvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAqIEdldCBhIHJhbmRvbSBmbG9hdCBudW1iZXIgYmV0d2VlbiBhIG1pbiAoaW5jbHVzaXZlKSBhbmQgbWF4IChleGNsdXNpdmUpIHZhbHVlXHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gbWluaW11bSB2YWx1ZVxyXG4gICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IG1heGltdW0gdmFsdWVcclxuICAgICogQHJldHVybnMge2Zsb2F0fVxyXG4gICAgKi9cclxuICBzdGF0aWMgZ2V0UmFuZG9tRmxvYXQobWluLCBtYXgpIHtcclxuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICogR2V0IGEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGJldHdlZW4gYSBtaW4gKGluY2x1c2l2ZSkgYW5kIG1heCAoZXhjbHVzaXZlKSB2YWx1ZVxyXG4gICAgKiBAcGFyYW0ge251bWJlcn0gbWluIG1pbmltdW0gdmFsdWVcclxuICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCBtYXhpbXVtIHZhbHVlXHJcbiAgICAqIEByZXR1cm5zIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KSB7XHJcbiAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcclxuICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcclxuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBVdGlscztcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmNvbnN0IFJhZGlhblRvRGVncmVlID0gMTgwIC8gTWF0aC5QSTtcbmNvbnN0IERlZ3JlZVRvUmFkaWFuID0gTWF0aC5QSSAvIDE4MDtcblxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgdXNlZnVsIG1hdGggZnVuY3Rpb25zLlxuICpcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqL1xuY2xhc3MgTWF0aFV0aWxzIHtcbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIGdpdmVuIGFuZ2xlIGZyb20gcmFkaWFucyB0byBkZWdyZWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmFkaWFucyAtIEFuZ2xlIGluIHJhZGlhbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gQW5nbGUgaW4gZGVncmVlcy5cbiAgICovXG4gIHN0YXRpYyB0b0RlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUmFkaWFuVG9EZWdyZWU7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgZ2l2ZW4gYW5nbGUgZnJvbSBkZWdyZWVzIHRvIHJhZGlhbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWdyZWVzIC0gQW5nbGUgaW4gZGVncmVlcy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gLSBBbmdsZSBpbiByYWRpYW5zLlxuICAgKi9cbiAgc3RhdGljIHRvUmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBEZWdyZWVUb1JhZGlhbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW5lYXJseSBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHR3byB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tIC0gU3RhcnQgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0byAtIFRhcmdldCB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBhbW91bnQgdG8gaW50ZXJwb2xhdGUgYmV0d2VlbiBmcm9tIGFuZCB0by5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyBsZXJwKGZyb20sIHRvLCBmYWN0b3IpIHtcbiAgICByZXR1cm4gZnJvbSArICh0byAtIGZyb20pICogZmFjdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIENsYW1wIGEgbnVtYmVyIGJldHdlZW4gMiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFZhbHVlIHRvIGNsYW1wLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbj0wXSAtIE1pbnVtdW0gdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4PTFdIC0gTWF4aW11bSB2YWx1ZS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyBjbGFtcCh2YWx1ZSwgbWluID0gMCwgbWF4ID0gMSkge1xuICAgIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKHZhbHVlLCBtYXgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBjbG9zZXN0IHBvaW50IG9uIGEgZ2l2ZW4gMkQgbGluZSBzZWdlbWVudFxuICAgKiBmcm9tIGEgZ2l2ZW4gMkQgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSBGaXJzdCBwb2ludCBvbiBsaW5lIHNlZ21lbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGIgLSBTZWNvbmQgcG9pbnQgb24gbGluZSBzZWdtZW50LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gMkQgcG9pbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn1cbiAgICovXG4gIHN0YXRpYyBjbG9zZXN0UG9pbnRPbkxpbmUoYSwgYiwgcCkge1xuICAgIGNvbnN0IGRpc3RTcXIgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKGEsIGIpO1xuXG4gICAgLy8gTGluZSBzZWdtZW50IGlzIGEgc2luZ2xlIHBvaW50XG4gICAgaWYgKGRpc3RTcXIgPT09IDApIHtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGNvbnN0IHQgPVxuICAgICAgKChwWzBdIC0gYVswXSkgKiAoYlswXSAtIGFbMF0pICsgKHBbMV0gLSBhWzFdKSAqIChiWzFdIC0gYVsxXSkpIC8gZGlzdFNxcjtcblxuICAgIGxldCBwb2ludCA9IFsuLi5hXTtcbiAgICBpZiAodCA+IDEpIHtcbiAgICAgIHBvaW50ID0gWy4uLmJdO1xuICAgIH0gZWxzZSBpZiAodCA+IDApIHtcbiAgICAgIHBvaW50ID0gW2FbMF0gKyB0ICogKGJbMF0gLSBhWzBdKSwgYVsxXSArIHQgKiAoYlsxXSAtIGFbMV0pXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZGlzdGFuY2Ugc3F1YXJlZCBmb3IgdHdvIDJEIHBvaW50cy5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYSAtIDJEIHBvaW50LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBiIC0gMkQgcG9pbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBzdGF0aWMgZGlzdGFuY2VTcXVhcmVkKGEsIGIpIHtcbiAgICByZXR1cm4gKGFbMF0gLSBiWzBdKSAqIChhWzBdIC0gYlswXSkgKyAoYVsxXSAtIGJbMV0pICogKGFbMV0gLSBiWzFdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlhbmd1bGF0ZXMgYSBzZXQgb2YgMkQgcG9pbnRzIHVzaW5nIGFuIGltcGxlbWVudGF0aW9uXG4gICAqIG9mIHRoZSBCb3d5ZXItV2F0c29uIGluY3JlbWVudGFsIERlbGF1bmF5IHRyaWFuZ3VsYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn0gdmVydGljZXMgLSBBcnJheSBvZiAyRCBwb2ludHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXk8bnVtYmVyPj59IC0gQXJyYXkgb2YgdHJpYW5nbGUgaW5kaWNlcy5cbiAgICovXG4gIHN0YXRpYyBnZXREZWxhdW5heVRyaWFuZ3VsYXRpb24odmVydGljZXMpIHtcbiAgICBpZiAoIXZlcnRpY2VzIHx8IHZlcnRpY2VzLmxlbmd0aCA8IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgZGVsYXVuYXkgdHJpYW5ndWxhdGlvbiBmb3IgcG9pbnRzICR7dmVydGljZXN9LiBJbnB1dCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgdGhyZWUgcG9pbnRzLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IG1pblggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgbGV0IG1pblkgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgbGV0IG1heFggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgbGV0IG1heFkgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cbiAgICB2ZXJ0aWNlcy5mb3JFYWNoKHYgPT4ge1xuICAgICAgbWluWCA9IHZbMF0gPCBtaW5YID8gdlswXSA6IG1pblg7XG4gICAgICBtaW5ZID0gdlsxXSA8IG1pblkgPyB2WzFdIDogbWluWTtcbiAgICAgIG1heFggPSB2WzBdID4gbWF4WCA/IHZbMF0gOiBtYXhYO1xuICAgICAgbWF4WSA9IHZbMV0gPiBtYXhZID8gdlsxXSA6IG1heFk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBkWCA9IG1heFggLSBtaW5YO1xuICAgIGNvbnN0IGRZID0gbWF4WSAtIG1pblk7XG4gICAgY29uc3QgbWlkWCA9IChtaW5YICsgbWF4WCkgLyAyO1xuICAgIGNvbnN0IG1pZFkgPSAobWluWSArIG1heFkpIC8gMjtcbiAgICBjb25zdCBkTWF4ID0gZFggPiBkWSA/IGRYIDogZFk7XG5cbiAgICBjb25zdCBzdXBlckluZGljZXMgPSBbXG4gICAgICB2ZXJ0aWNlcy5sZW5ndGgsXG4gICAgICB2ZXJ0aWNlcy5sZW5ndGggKyAxLFxuICAgICAgdmVydGljZXMubGVuZ3RoICsgMixcbiAgICBdO1xuXG4gICAgY29uc3QgdmVydHNXaXRoU3VwZXIgPSBbXG4gICAgICAuLi52ZXJ0aWNlcyxcbiAgICAgIFttaWRYIC0gMjAgKiBkTWF4LCBtaWRZIC0gZE1heF0sXG4gICAgICBbbWlkWCwgbWlkWSArIDIwICogZE1heF0sXG4gICAgICBbbWlkWCArIDIwICogZE1heCwgbWlkWSAtIGRNYXhdLFxuICAgIF07XG5cbiAgICBjb25zdCBzdXBlclNvcnRlZEluZGljZXMgPSBNYXRoVXRpbHMuc29ydFBvaW50c0NDVyhcbiAgICAgIHN1cGVySW5kaWNlcyxcbiAgICAgIHZlcnRzV2l0aFN1cGVyXG4gICAgKTtcblxuICAgIGNvbnN0IHN1cGVyVHJpYW5nbGUgPSB7XG4gICAgICBpbmRpY2VzOiBzdXBlclNvcnRlZEluZGljZXMsXG4gICAgICBlZGdlczogW1xuICAgICAgICBbc3VwZXJTb3J0ZWRJbmRpY2VzWzBdLCBzdXBlclNvcnRlZEluZGljZXNbMV1dLFxuICAgICAgICBbc3VwZXJTb3J0ZWRJbmRpY2VzWzFdLCBzdXBlclNvcnRlZEluZGljZXNbMl1dLFxuICAgICAgICBbc3VwZXJTb3J0ZWRJbmRpY2VzWzJdLCBzdXBlclNvcnRlZEluZGljZXNbMF1dLFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHJpYW5nbGVzID0gW3N1cGVyVHJpYW5nbGVdO1xuXG4gICAgdmVydHNXaXRoU3VwZXIuZm9yRWFjaCgobmV3VmVydCwgbmV3SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGludmFsaWRUcmlhbmdsZXMgPSBbXTtcbiAgICAgIHRyaWFuZ2xlcy5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIE1hdGhVdGlscy5pc1BvaW50SW5DaXJjdW1DaXJjbGUoXG4gICAgICAgICAgICB2ZXJ0c1dpdGhTdXBlclt0cmlhbmdsZS5pbmRpY2VzWzBdXSxcbiAgICAgICAgICAgIHZlcnRzV2l0aFN1cGVyW3RyaWFuZ2xlLmluZGljZXNbMV1dLFxuICAgICAgICAgICAgdmVydHNXaXRoU3VwZXJbdHJpYW5nbGUuaW5kaWNlc1syXV0sXG4gICAgICAgICAgICBuZXdWZXJ0XG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBpbnZhbGlkVHJpYW5nbGVzLnB1c2godHJpYW5nbGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYm91bmRpbmdQb2x5ID0gW107XG4gICAgICBpbnZhbGlkVHJpYW5nbGVzLmZvckVhY2godHJpYW5nbGUgPT4ge1xuICAgICAgICB0cmlhbmdsZS5lZGdlcy5mb3JFYWNoKGVkZ2UgPT4ge1xuICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgaW52YWxpZFRyaWFuZ2xlcy5mb3JFYWNoKG90aGVyVHJpYW5nbGUgPT4ge1xuICAgICAgICAgICAgaWYgKHRyaWFuZ2xlICE9PSBvdGhlclRyaWFuZ2xlKSB7XG4gICAgICAgICAgICAgIG90aGVyVHJpYW5nbGUuZWRnZXMuZm9yRWFjaChvdGhlckVkZ2UgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIChlZGdlWzBdID09PSBvdGhlckVkZ2VbMF0gJiYgZWRnZVsxXSA9PT0gb3RoZXJFZGdlWzFdKSB8fFxuICAgICAgICAgICAgICAgICAgKGVkZ2VbMV0gPT09IG90aGVyRWRnZVswXSAmJiBlZGdlWzBdID09PSBvdGhlckVkZ2VbMV0pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb3VudCArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGNvdW50ID09PSAwKSBib3VuZGluZ1BvbHkucHVzaChlZGdlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaW52YWxpZFRyaWFuZ2xlcy5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcbiAgICAgICAgdHJpYW5nbGVzLnNwbGljZSh0cmlhbmdsZXMuaW5kZXhPZih0cmlhbmdsZSksIDEpO1xuICAgICAgfSk7XG5cbiAgICAgIGJvdW5kaW5nUG9seS5mb3JFYWNoKGVkZ2UgPT4ge1xuICAgICAgICBjb25zdCBzb3J0ZWRJbmRpY2VzID0gTWF0aFV0aWxzLnNvcnRQb2ludHNDQ1coXG4gICAgICAgICAgW2VkZ2VbMF0sIGVkZ2VbMV0sIG5ld0luZGV4XSxcbiAgICAgICAgICB2ZXJ0c1dpdGhTdXBlclxuICAgICAgICApO1xuXG4gICAgICAgIHRyaWFuZ2xlcy5wdXNoKHtcbiAgICAgICAgICBpbmRpY2VzOiBzb3J0ZWRJbmRpY2VzLFxuICAgICAgICAgIGVkZ2VzOiBbXG4gICAgICAgICAgICBbc29ydGVkSW5kaWNlc1swXSwgc29ydGVkSW5kaWNlc1sxXV0sXG4gICAgICAgICAgICBbc29ydGVkSW5kaWNlc1sxXSwgc29ydGVkSW5kaWNlc1syXV0sXG4gICAgICAgICAgICBbc29ydGVkSW5kaWNlc1syXSwgc29ydGVkSW5kaWNlc1swXV0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRyaWFuZ2xlc1RvUmVtb3ZlID0gW107XG4gICAgdHJpYW5nbGVzLmZvckVhY2godHJpYW5nbGUgPT4ge1xuICAgICAgdHJpYW5nbGUuaW5kaWNlcy5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgICAgaWYgKHN1cGVySW5kaWNlcy5pbmNsdWRlcyhpbmRleCkpIHtcbiAgICAgICAgICB0cmlhbmdsZXNUb1JlbW92ZS5wdXNoKHRyaWFuZ2xlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0cmlhbmdsZXNUb1JlbW92ZS5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdHJpYW5nbGVzLmluZGV4T2YodHJpYW5nbGUpO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0cmlhbmdsZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0cmlhbmdsZXMubWFwKHRyaWFuZ2xlID0+IHRyaWFuZ2xlLmluZGljZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYSBnaXZlbiAyRCBwb2ludCBpcyB3aXRoaW4gdGhlIGNpY3J1bWNpcmNsZVxuICAgKiBkZWZpbmVkIGJ5IHRocmVlIDJEIHBvaW50cy4gVGhlIHRyaWFuZ2xlIHBvaW50cyBtdXN0IGJlIGluXG4gICAqIGNvdW50ZXItY2xvY2t3aXNlIG9yZGVyIGEgLT4gYiAtPiBjLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhIC0gRmlyc3QgdHJpYW5nbGUgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGIgLSBTZWNvbmQgdHJpYW5nbGUgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGMgLSBUaGlyZCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcCAtIDJEIHBvaW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc1BvaW50SW5DaXJjdW1DaXJjbGUoYSwgYiwgYywgcCkge1xuICAgIGNvbnN0IGF4ID0gYVswXSAtIHBbMF07XG4gICAgY29uc3QgYXkgPSBhWzFdIC0gcFsxXTtcbiAgICBjb25zdCBieCA9IGJbMF0gLSBwWzBdO1xuICAgIGNvbnN0IGJ5ID0gYlsxXSAtIHBbMV07XG4gICAgY29uc3QgY3ggPSBjWzBdIC0gcFswXTtcbiAgICBjb25zdCBjeSA9IGNbMV0gLSBwWzFdO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIChheCAqIGF4ICsgYXkgKiBheSkgKiAoYnggKiBjeSAtIGN4ICogYnkpIC1cbiAgICAgICAgKGJ4ICogYnggKyBieSAqIGJ5KSAqIChheCAqIGN5IC0gY3ggKiBheSkgK1xuICAgICAgICAoY3ggKiBjeCArIGN5ICogY3kpICogKGF4ICogYnkgLSBieCAqIGF5KSA+XG4gICAgICAwXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gMkQgcG9pbnQgaXMgd2l0aGluIGEgZ2l2ZW4gdHJpYW5nbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSBGaXJzdCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYyAtIFRoaXJkIHRyaWFuZ2xlIHBvaW50LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gMkQgcG9pbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzUG9pbnRJblRyaWFuZ2xlKGEsIGIsIGMsIHApIHtcbiAgICBjb25zdCBkZW5vbSA9IChiWzFdIC0gY1sxXSkgKiAoYVswXSAtIGNbMF0pICsgKGNbMF0gLSBiWzBdKSAqIChhWzFdIC0gY1sxXSk7XG4gICAgY29uc3QgYVZhbCA9XG4gICAgICAoKGJbMV0gLSBjWzFdKSAqIChwWzBdIC0gY1swXSkgKyAoY1swXSAtIGJbMF0pICogKHBbMV0gLSBjWzFdKSkgLyBkZW5vbTtcbiAgICBjb25zdCBiVmFsID1cbiAgICAgICgoY1sxXSAtIGFbMV0pICogKHBbMF0gLSBjWzBdKSArIChhWzBdIC0gY1swXSkgKiAocFsxXSAtIGNbMV0pKSAvIGRlbm9tO1xuICAgIGNvbnN0IGNWYWwgPSAxIC0gYVZhbCAtIGJWYWw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgYVZhbCA+PSAwICYmIGFWYWwgPD0gMSAmJiBiVmFsID49IDAgJiYgYlZhbCA8PSAxICYmIGNWYWwgPj0gMCAmJiBjVmFsIDw9IDFcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNvcnRlZCBpbmRpY2VzIG9mIGEgZ2l2ZW4gc2V0IG9mIDJEIHBvaW50cyBpblxuICAgKiBjb3VudGVyLWNsb2Nrd2lzZSBvcmRlci5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gaW5kaWNlcyAtIExpc3Qgb2YgaW5kaWNlcy5cbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSB2ZXJ0aWNlcyAtIExpc3Qgb2YgMkQgcG9pbnRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn0gLSBMaXN0IG9mIHNvcnRlZCBpbmRpY2VzLlxuICAgKi9cbiAgc3RhdGljIHNvcnRQb2ludHNDQ1coaW5kaWNlcywgdmVydGljZXMpIHtcbiAgICBjb25zdCBjZW50cm9pZCA9IFswLCAwXTtcbiAgICBpbmRpY2VzLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgY2VudHJvaWRbMF0gKz0gdmVydGljZXNbaW5kZXhdWzBdO1xuICAgICAgY2VudHJvaWRbMV0gKz0gdmVydGljZXNbaW5kZXhdWzFdO1xuICAgIH0pO1xuICAgIGNlbnRyb2lkWzBdIC89IGluZGljZXMubGVuZ3RoO1xuICAgIGNlbnRyb2lkWzFdIC89IGluZGljZXMubGVuZ3RoO1xuXG4gICAgaW5kaWNlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBiVmFsID0gTWF0aC5hdGFuMihcbiAgICAgICAgdmVydGljZXNbYl1bMV0gLSBjZW50cm9pZFsxXSxcbiAgICAgICAgdmVydGljZXNbYl1bMF0gLSBjZW50cm9pZFswXVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFWYWwgPSBNYXRoLmF0YW4yKFxuICAgICAgICB2ZXJ0aWNlc1thXVsxXSAtIGNlbnRyb2lkWzFdLFxuICAgICAgICB2ZXJ0aWNlc1thXVswXSAtIGNlbnRyb2lkWzBdXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gYVZhbCAtIGJWYWw7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWNsdWF0ZXMgdGhlIGFyZWEgb2YgYSB0cmlhbmdsZVxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhIC0gRmlyc3QgdHJpYW5nbGUgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGIgLSBTZWNvbmQgdHJpYW5nbGUgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGMgLSBUaGlyZCB0cmlhbmdsZSBwb2ludC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyB0cmlhbmdsZUFyZWEoYSwgYiwgYykge1xuICAgIHJldHVybiBNYXRoLmFicyhcbiAgICAgIChhWzBdICogKGJbMV0gLSBjWzFdKSArIGJbMF0gKiAoY1sxXSAtIGFbMV0pICsgY1swXSAqIChhWzFdIC0gYlsxXSkpICogMC41XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1hZ25pdHVkZSBvZiBhIGdpdmVuIHZlY3RvciBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGdldFZlY3Rvck1hZ25pdHVkZSh2ZWN0b3IpIHtcbiAgICBpZiAoISh2ZWN0b3IgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgbWFnbml0dWRlIGZvciB2ZWN0b3IgJHt2ZWN0b3J9LiBJbnB1dCBtdXN0IGJlIGFuIEFycmF5IG51bWJlcnMuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWR1Y2VyID0gKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY3VycmVudFZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBnZXQgbWFnbml0dWRlIGZvciB2ZWN0b3IgJHt2ZWN0b3J9LiBBbGwgaXRlbXMgaW4gdGhlIGlucHV0IEFycmF5IG11c3QgYmUgbnVtYmVycy5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIChjdXJyZW50VmFsdWUgKiogMik7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGguc3FydCh2ZWN0b3IucmVkdWNlKHJlZHVjZXIsIDApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRvdCBwcm9kdWN0IGJldHdlZW4gdHdvIHZlY3RvcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvckEgLSBBcnJheSBjb25zaXN0aW5nIG9mIG51bWJlcnMuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvckIgLSBBcnJheSBjb25zaXN0aW5nIG9mIG51bWJlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBzdGF0aWMgZ2V0RG90UHJvZHVjdCh2ZWN0b3JBLCB2ZWN0b3JCKSB7XG4gICAgaWYgKCEodmVjdG9yQSBpbnN0YW5jZW9mIEFycmF5KSB8fCAhKHZlY3RvckIgaW5zdGFuY2VvZiBBcnJheSkgfHwgdmVjdG9yQS5sZW5ndGggIT09IHZlY3RvckIubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZG90IHByb2R1Y3QgYmV0d2VlbiAke3ZlY3RvckF9IGFuZCAke3ZlY3RvckJ9LiBJbnB1dHMgbXVzdCBiZSB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aC5gKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICB2ZWN0b3JBLmZvckVhY2goKHZhbHVlQSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlQiA9IHZlY3RvckJbaW5kZXhdO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlQSAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlQiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGRvdCBwcm9kdWN0IGJldHdlZW4gJHt2ZWN0b3JBfSBhbmQgJHt2ZWN0b3JCfS4gVmVjdG9ycyBtdXN0IG9ubHkgY29uc2lzdCBvZiBudW1lcmljIHZhbHVlcy5gKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ICs9IHZhbHVlQSAqIHZhbHVlQjtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBhbmdsZSBpbiByYWRpYW5zIGJldHdlZW4gdmVjdG9yQSBhbmQgdmVjdG9yQi5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yQSAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yQiAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyBnZXRBbmdsZUJldHdlZW4odmVjdG9yQSwgdmVjdG9yQikge1xuICAgIGNvbnN0IG5vcm1hbEEgPSB0aGlzLm5vcm1hbGl6ZVZlY3RvcihbLi4udmVjdG9yQV0pO1xuICAgIGNvbnN0IG5vcm1hbEIgPSB0aGlzLm5vcm1hbGl6ZVZlY3RvcihbLi4udmVjdG9yQl0pO1xuICAgIGNvbnN0IGRvdCA9IHRoaXMuZ2V0RG90UHJvZHVjdChub3JtYWxBLCBub3JtYWxCKTtcblxuICAgIHJldHVybiBNYXRoLmFjb3ModGhpcy5jbGFtcChkb3QsIC0xLCAxKSk7XG4gIH1cblxuICAvKipcbiAgICogTXVsdGlwbHkgYSAzeDMgcm90YXRpb24gbWF0cml4IHdpdGggYSB2ZWN0b3IzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3IzIC0gQXJyYXkgY29uc2lzdGluZyBvZiAzIG51bWJlcnMgcmVwcmVzZW50aW5nXG4gICAqIGEgZGlyZWN0aW9uIHZlY3Rvci5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gbWF0cml4MyAtIEFuIGFycmF5IG9mIDkgbnVtYmVycyByZXByZXNlbnRpbmcgYSByb3dcbiAgICogbWFqb3Igcm90YXRpb24gbWF0cml4LlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQW4gYXJyYXkgb2YgMyBudW1iZXJzIHJlcHJlc2VudGluZyB0aGUgbmV3IGRpcmVjdGlvblxuICAgKiBvZiB0aGUgdmVjdG9yLlxuICAgKi9cbiAgc3RhdGljIHJvdGF0ZVZlY3Rvcih2ZWN0b3IzLCBtYXRyaXgzKSB7XG4gICAgaWYgKCEodmVjdG9yMyBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgfHwgdmVjdG9yMy5sZW5ndGggIT09IDNcbiAgICAgIHx8ICF2ZWN0b3IzLmV2ZXJ5KHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHJvdGF0ZSB2ZWN0b3IgJHt2ZWN0b3IzfSBieSByb3RhdGlvbiBtYXRyaXggJHttYXRyaXgzfS4gSW5wdXQgdmVjdG9yIG11c3QgYmUgYW4gYXJyYXkgb2YgMyBudW1iZXJzLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCEobWF0cml4MyBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgfHwgbWF0cml4My5sZW5ndGggIT09IDlcbiAgICAgIHx8ICFtYXRyaXgzLmV2ZXJ5KHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHJvdGF0ZSB2ZWN0b3IgJHt2ZWN0b3IzfSBieSByb3RhdGlvbiBtYXRyaXggJHttYXRyaXgzfS4gSW5wdXQgbWF0cml4MyBtdXN0IGJlIGFuIGFycmF5IG9mIDkgbnVtYmVycy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHggPSBtYXRyaXgzWzBdICogdmVjdG9yM1swXVxuICAgICAgKyBtYXRyaXgzWzNdICogdmVjdG9yM1sxXVxuICAgICAgKyBtYXRyaXgzWzZdICogdmVjdG9yM1syXTtcbiAgICBjb25zdCB5ID0gbWF0cml4M1sxXSAqIHZlY3RvcjNbMF1cbiAgICAgICsgbWF0cml4M1s0XSAqIHZlY3RvcjNbMV1cbiAgICAgICsgbWF0cml4M1s3XSAqIHZlY3RvcjNbMl07XG4gICAgY29uc3QgeiA9IG1hdHJpeDNbMl0gKiB2ZWN0b3IzWzBdXG4gICAgICArIG1hdHJpeDNbNV0gKiB2ZWN0b3IzWzFdXG4gICAgICArIG1hdHJpeDNbOF0gKiB2ZWN0b3IzWzJdO1xuXG4gICAgcmV0dXJuIFt4LCB5LCB6XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemUgYSBnaXZlbiB2ZWN0b3IgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvciAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSBUaGUgb3JpZ2luYWwgdmVjdG9yIHdpdGggbm9ybWFsaXplZCB2YWx1ZXMsIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHN0YXRpYyBub3JtYWxpemVWZWN0b3IodmVjdG9yKSB7XG4gICAgY29uc3QgbWFnbml0dWRlID0gdGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUodmVjdG9yKTtcblxuICAgIGlmIChtYWduaXR1ZGUgPT09IDApIHtcbiAgICAgIHZlY3Rvci5maWxsKDApXG4gICAgfSBlbHNlIHtcbiAgICAgIHZlY3Rvci5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgdmVjdG9yW2luZGV4XSA9IHZhbHVlIC8gbWFnbml0dWRlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlY3RvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHRoZSAzeDMgcm90YXRpb24gbWF0cml4IGZyb20gYSBnaXZlbiA0eDQgdHJhbnNmb3JtYXRpb24gbWF0cml4LlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBtYXRyaXg0IC0gQW4gYXJyYXkgb2YgMTYgbnVtYmVycyByZXByZXNlbnRpbmcgYSByb3dcbiAgICogbWFqb3IgdHJhbnNmb3JtYXRpb24gbWF0cml4LlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQW4gYXJyYXkgb2YgOSBudW1iZXJzIHJlcHJlc2VudGluZyBhIHJvdyBtYWpvclxuICAgKiByb3RhdGlvbiBtYXRyaXguXG4gICAqL1xuICBzdGF0aWMgZ2V0Um90YXRpb25NYXRyaXgobWF0cml4NCkge1xuICAgIGlmICghKG1hdHJpeDQgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIHx8IG1hdHJpeDQubGVuZ3RoICE9PSAxNlxuICAgICAgfHwgIW1hdHJpeDQuZXZlcnkodiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgY29udmVydCBtYXRyaXggJHttYXRyaXg0fSB0byBhIHJvdGF0aW9uIG1hdHJpeC4gSW5wdXQgbWF0cml4IG11c3QgYmUgYW4gYXJyYXkgb2YgMTYgbnVtYmVycy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3Qgc2NhbGVcbiAgICBjb25zdCBzY2FsZVggPSAxIC8gKHRoaXMuZ2V0VmVjdG9yTWFnbml0dWRlKG1hdHJpeDQuc2xpY2UoMCwgNCkpIHx8IDEpO1xuICAgIGNvbnN0IHNjYWxlWSA9IDEgLyAodGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUobWF0cml4NC5zbGljZSg0LCA4KSkgfHwgMSk7XG4gICAgY29uc3Qgc2NhbGVaID0gMSAvICh0aGlzLmdldFZlY3Rvck1hZ25pdHVkZShtYXRyaXg0LnNsaWNlKDgsIDEyKSkgfHwgMSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbWF0cml4NFswXSAqIHNjYWxlWCwgbWF0cml4NFsxXSAqIHNjYWxlWCwgbWF0cml4NFsyXSAqIHNjYWxlWCxcbiAgICAgIG1hdHJpeDRbNF0gKiBzY2FsZVksIG1hdHJpeDRbNV0gKiBzY2FsZVksIG1hdHJpeDRbNl0gKiBzY2FsZVksXG4gICAgICBtYXRyaXg0WzhdICogc2NhbGVaLCBtYXRyaXg0WzldICogc2NhbGVaLCBtYXRyaXg0WzEwXSAqIHNjYWxlWlxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHNwaGVyaWNhbCBjb29yZGluYXRlcyBvZiB0aGUgZ2l2ZW4gY2FydGVzaWFuXG4gICAqIHh5eiBjb29yZGluYXRlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBQb3NpdGlvbiBhbG9uZyB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFBvc2l0aW9uIGFsb25nIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gUG9zaXRpb24gYWxvbmcgdGhlIHogYXhpcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIEFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgdGhyZWUgbnVtYmVyZXMgd2hlcmUgaW5kZXhcbiAgICogMCByZXByZXNlbnRzIHRoZSByYWRpdXMsIGluZGV4IDEgcmVwcmVzZW50cyB0aGUgdmVydGljYWwvcG9sYXIgYW5nbGUgaW4gcmFkaWFuc1xuICAgKiBhbmQgaW5kZXggMiByZXByZXNlbnRzIHRoZSBob3Jpem9udGFsL2F6aW11dGhhbCBhbmdsZSBpbiByYWRpYW5zLlxuICAgKi9cbiAgc3RhdGljIGNhcnRlc2lhblRvU3BoZXJpY2FsKHgsIHksIHopIHtcbiAgICBjb25zdCByID0gdGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUoW3gsIHksIHpdKTtcblxuICAgIC8vIFJldHVybiBpZGVudGl0eSBpZiB0aGUgdmVjdG9yIGhhcyBubyBsZW5ndGhcbiAgICBpZiAociA9PT0gMCkge1xuICAgICAgcmV0dXJuIFswLCAwLCAwXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgcixcbiAgICAgIE1hdGguYWNvcyh0aGlzLmNsYW1wKHkgLyByLCAtIDEsIDEpKSxcbiAgICAgIE1hdGguYXRhbjIoeCwgeiksXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFkdWFsbHkgY2hhbmdlIGEgdmFsdWUgb2YgYSBudW1lcmljIHByb3BlcnR5IHRvd2FyZHMgYSBnb2FsIG92ZXIgdGltZSB1c2luZ1xuICAgKiBhIGNyaXRpY2FsbHkgZGFtcGVkIHNwcmluZyBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRWYWx1ZSAtIFRoZSBzdGFydGluZyB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRhcmdldFZhbHVlLSBUaGUgZ29hbCB2YWx1ZS5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gW3ZhbHVlU3RvcmUgPSBbMCwgMF1dIC0gQW4gQXJyYXkgY29uc2lzdGluZyBvZiB0d29cbiAgICogbnVtYmVycyB3aGVyZSB0aGUgZmlyc3QgbnVtYmVyIGhvbGRzIHRoZSByZXN1bHQgdmFsdWUgYW5kIHRoZSBzZWNvbmQgaG9sZHNcbiAgICogdGhlIHZlbG9jaXR5IHRoYXQgcmVzdWx0ZWQgaW4gdGhhdCB2YWx1ZS4gVGhlIHNhbWUgYXJyYXkgc2hvdWxkIGJlIHByb3ZpZGVkXG4gICAqIHdpdGggZWFjaCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVsdGFUaW1lID0gMWUtN10gLSBUaGUgdGltZSBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoaXMgZnVuY3Rpb25cbiAgICogaW4gc2Vjb25kcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzbW9vdGhUaW1lID0gMC4zXSAtIFRoZSBhcHByb3hpbWF0ZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzXG4gICAqIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZSB0YXJnZXQgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4U3BlZWQgPSAxZTddIC0gQSBjbGFtcGluZyB2YWx1ZSBmb3IgdGhlIG1heGltdW0gc3BlZWQgdGhlXG4gICAqIHZhbHVlIGNhbiBjaGFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBUaGUgdmFsdWVTdG9yZSBhcnJheS5cbiAgICovXG4gIHN0YXRpYyBkYW1wVmFsdWUoXG4gICAgY3VycmVudFZhbHVlLFxuICAgIHRhcmdldFZhbHVlLFxuICAgIHZhbHVlU3RvcmUgPSBbMCwgMF0sXG4gICAgZGVsdGFUaW1lID0gMWUtNyxcbiAgICBzbW9vdGhUaW1lID0gMC4zLFxuICAgIG1heFNwZWVkID0gMWU3XG4gICkge1xuICAgIHNtb290aFRpbWUgPSBNYXRoLm1heCgwLjAwMDEsIHNtb290aFRpbWUpO1xuICAgIGRlbHRhVGltZSA9IE1hdGgubWF4KDFlLTcsIGRlbHRhVGltZSk7XG5cbiAgICAvLyBGaW5kIHRoZSBkZWx0YSBiZXR3ZWVuIHZhbHVlcyBhbmQgdXNlIGl0IHRvIGVzdGltYXRlIHRoZSBwcmV2aW91cyB2YWx1ZVxuICAgIGNvbnN0IGNsYW1wVGltZSA9IG1heFNwZWVkICogc21vb3RoVGltZTtcbiAgICBjb25zdCBkZWx0YVZhbHVlID0gY3VycmVudFZhbHVlIC0gdGFyZ2V0VmFsdWU7XG4gICAgY29uc3QgY2xhbXBEZWx0YVZhbHVlID0gdGhpcy5jbGFtcChkZWx0YVZhbHVlLCAtY2xhbXBUaW1lLCBjbGFtcFRpbWUpO1xuICAgIGNvbnN0IGxhc3RWYWx1ZSA9IGN1cnJlbnRWYWx1ZSAtIGNsYW1wRGVsdGFWYWx1ZTtcblxuICAgIC8vIENhbGN1bGF0ZSBkYW1waW5nIGZhY3RvcnNcbiAgICBjb25zdCBkMSA9IDIgLyBzbW9vdGhUaW1lO1xuICAgIGNvbnN0IGQyID0gZDEgKiBkZWx0YVRpbWU7XG4gICAgY29uc3QgZDMgPSAxIC8gKDEgKyBkMiArIDAuNSAqIGQyICoqIDIgKyAwLjI1ICogZDIgKiogMyk7XG4gICAgY29uc3QgZDQgPSAodmFsdWVTdG9yZVsxXSArIGQxICogY2xhbXBEZWx0YVZhbHVlKSAqIGRlbHRhVGltZTtcblxuICAgIC8vIERhbXAgdGhlIHRhcmdldCB2YWx1ZSBhbmQgdXBkYXRlIHRoZSB2ZWxvY2l0eVxuICAgIHZhbHVlU3RvcmVbMF0gPSBsYXN0VmFsdWUgKyAoY2xhbXBEZWx0YVZhbHVlICsgZDQpICogZDM7XG4gICAgdmFsdWVTdG9yZVsxXSA9ICh2YWx1ZVN0b3JlWzFdIC0gZDEgKiBkNCkgKiBkMztcblxuICAgIC8vIFByZXZlbnQgb3ZlcnNob290aW5nXG4gICAgaWYgKHRhcmdldFZhbHVlIC0gY3VycmVudFZhbHVlID4gMCA9PT0gdmFsdWVTdG9yZVswXSA+IHRhcmdldFZhbHVlKSB7XG4gICAgICB2YWx1ZVN0b3JlWzBdID0gdGFyZ2V0VmFsdWU7XG4gICAgICB2YWx1ZVN0b3JlWzFdID0gKHZhbHVlU3RvcmVbMF0gLSB0YXJnZXRWYWx1ZSkgLyBkZWx0YVRpbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlU3RvcmU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0aFV0aWxzO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRWFzaW5nT2JqZWN0IE9iamVjdCBjb250YWluaW5nIGVhc2luZyBmdW5jdGlvbnNcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IEluIC0gRWFzaW5nICdJbicgZnVuY3Rpb24uIFNob3VsZCB1c2UgdGhlIHNpZ25hdHVyZSAoazpudW1iZXIpOm51bWJlci5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IE91dCAtIEVhc2luZyAnT3V0JyBmdW5jdGlvbi4gU2hvdWxkIHVzZSB0aGUgc2lnbmF0dXJlIChrOm51bWJlcik6bnVtYmVyLlxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gSW5PdXQgLSBFYXNpbmcgJ0luT3V0JyBmdW5jdGlvbi4gU2hvdWxkIHVzZSB0aGUgc2lnbmF0dXJlIChrOm51bWJlcik6bnVtYmVyLlxuICovXG5cbi8qKlxuICogTGluZWFyIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IExpbmVhciA9IHtcbiAgTm9uZShrKSB7XG4gICAgcmV0dXJuIGs7XG4gIH0sXG4gIEluKGspIHtcbiAgICByZXR1cm4gaztcbiAgfSxcbiAgT3V0KGspIHtcbiAgICByZXR1cm4gaztcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIHJldHVybiBrO1xuICB9LFxufTtcblxuLyoqXG4gKiBRdWFkcmF0aWMgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgUXVhZHJhdGljID0ge1xuICBJbihrKSB7XG4gICAgcmV0dXJuIGsgKiBrO1xuICB9LFxuICBPdXQoaykge1xuICAgIHJldHVybiBrICogKDIgLSBrKTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGsgKj0gMjtcbiAgICBpZiAoayA8IDEpIHtcbiAgICAgIHJldHVybiAwLjUgKiBrICogaztcbiAgICB9XG4gICAgcmV0dXJuIC0wLjUgKiAoLS1rICogKGsgLSAyKSAtIDEpO1xuICB9LFxufTtcblxuLyoqXG4gKiBDdWJpYyBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBDdWJpYyA9IHtcbiAgSW4oaykge1xuICAgIHJldHVybiBrICogayAqIGs7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgcmV0dXJuIC0tayAqIGsgKiBrICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGsgKj0gMjtcbiAgICBpZiAoayA8IDEpIHtcbiAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGs7XG4gICAgfVxuXG4gICAgayAtPSAyO1xuICAgIHJldHVybiAwLjUgKiAoayAqIGsgKiBrICsgMik7XG4gIH0sXG59O1xuXG4vKipcbiAqIFF1YXJ0aWMgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgUXVhcnRpYyA9IHtcbiAgSW4oaykge1xuICAgIHJldHVybiBrICogayAqIGsgKiBrO1xuICB9LFxuICBPdXQoaykge1xuICAgIHJldHVybiAxIC0gLS1rICogayAqIGsgKiBrO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgayAqPSAyO1xuICAgIGlmIChrIDwgMSkge1xuICAgICAgcmV0dXJuIDAuNSAqIGsgKiBrICogayAqIGs7XG4gICAgfVxuXG4gICAgayAtPSAyO1xuICAgIHJldHVybiAtMC41ICogKGsgKiBrICogayAqIGsgLSAyKTtcbiAgfSxcbn07XG5cbi8qKlxuICogUXVpbnRpYyBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBRdWludGljID0ge1xuICBJbihrKSB7XG4gICAgcmV0dXJuIGsgKiBrICogayAqIGsgKiBrO1xuICB9LFxuICBPdXQoaykge1xuICAgIHJldHVybiAtLWsgKiBrICogayAqIGsgKiBrICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGsgKj0gMjtcbiAgICBpZiAoayA8IDEpIHtcbiAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrICogaztcbiAgICB9XG5cbiAgICBrIC09IDI7XG4gICAgcmV0dXJuIDAuNSAqIChrICogayAqIGsgKiBrICogayArIDIpO1xuICB9LFxufTtcblxuLyoqXG4gKiBTaW51c29pZGFsIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IFNpbnVzb2lkYWwgPSB7XG4gIEluKGspIHtcbiAgICByZXR1cm4gMSAtIE1hdGguY29zKChrICogTWF0aC5QSSkgLyAyKTtcbiAgfSxcbiAgT3V0KGspIHtcbiAgICByZXR1cm4gTWF0aC5zaW4oKGsgKiBNYXRoLlBJKSAvIDIpO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcbiAgfSxcbn07XG5cbi8qKlxuICogRXhwb25lbnRpYWwgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgRXhwb25lbnRpYWwgPSB7XG4gIEluKGspIHtcbiAgICByZXR1cm4gayA9PT0gMCA/IDAgOiAxMDI0ICoqIChrIC0gMSk7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgcmV0dXJuIGsgPT09IDEgPyAxIDogMSAtIDIgKiogKC0xMCAqIGspO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgaWYgKGsgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAoayA9PT0gMSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgayAqPSAyO1xuICAgIGlmIChrIDwgMSkge1xuICAgICAgcmV0dXJuIDAuNSAqIDEwMjQgKiogKGsgLSAxKTtcbiAgICB9XG4gICAgcmV0dXJuIDAuNSAqICgtKDIgKiogKC0xMCAqIChrIC0gMSkpKSArIDIpO1xuICB9LFxufTtcblxuLyoqXG4gKiBDaXJjdWxhciBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBDaXJjdWxhciA9IHtcbiAgSW4oaykge1xuICAgIHJldHVybiAxIC0gTWF0aC5zcXJ0KDEgLSBrICogayk7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgcmV0dXJuIE1hdGguc3FydCgxIC0gLS1rICogayk7XG4gIH0sXG4gIEluT3V0KGspIHtcbiAgICBrICo9IDI7XG4gICAgaWYgKGsgPCAxKSB7XG4gICAgICByZXR1cm4gLTAuNSAqIChNYXRoLnNxcnQoMSAtIGsgKiBrKSAtIDEpO1xuICAgIH1cblxuICAgIGsgLT0gMjtcbiAgICByZXR1cm4gMC41ICogKE1hdGguc3FydCgxIC0gayAqIGspICsgMSk7XG4gIH0sXG59O1xuXG4vKipcbiAqIEVsYXN0aWMgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgRWxhc3RpYyA9IHtcbiAgSW4oaykge1xuICAgIGxldCBzO1xuICAgIGxldCBhID0gMC4xO1xuICAgIGNvbnN0IHAgPSAwLjQ7XG5cbiAgICBpZiAoayA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKGsgPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmICghYSB8fCBhIDwgMSkge1xuICAgICAgYSA9IDE7XG4gICAgICBzID0gcCAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcbiAgICB9XG5cbiAgICBrIC09IDE7XG4gICAgcmV0dXJuIC0oYSAqIDIgKiogKDEwICogaykgKiBNYXRoLnNpbigoKGsgLSBzKSAqICgyICogTWF0aC5QSSkpIC8gcCkpO1xuICB9LFxuICBPdXQoaykge1xuICAgIGxldCBzO1xuICAgIGxldCBhID0gMC4xO1xuICAgIGNvbnN0IHAgPSAwLjQ7XG5cbiAgICBpZiAoayA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKGsgPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmICghYSB8fCBhIDwgMSkge1xuICAgICAgYSA9IDE7XG4gICAgICBzID0gcCAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYSAqIDIgKiogKC0xMCAqIGspICogTWF0aC5zaW4oKChrIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGxldCBzO1xuICAgIGxldCBhID0gMC4xO1xuICAgIGNvbnN0IHAgPSAwLjQ7XG5cbiAgICBpZiAoayA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKGsgPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmICghYSB8fCBhIDwgMSkge1xuICAgICAgYSA9IDE7XG4gICAgICBzID0gcCAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcbiAgICB9XG5cbiAgICBrICo9IDI7XG4gICAgaWYgKGsgPCAxKSB7XG4gICAgICBrIC09IDE7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAtMC41ICogKGEgKiAyICoqICgxMCAqIGspICogTWF0aC5zaW4oKChrIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBrIC09IDE7XG4gICAgcmV0dXJuIChcbiAgICAgIGEgKiAyICoqICgtMTAgKiBrKSAqIE1hdGguc2luKCgoayAtIHMpICogKDIgKiBNYXRoLlBJKSkgLyBwKSAqIDAuNSArIDFcbiAgICApO1xuICB9LFxufTtcblxuLyoqXG4gKiBCYWNrIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IEJhY2sgPSB7XG4gIEluKGspIHtcbiAgICBjb25zdCBzID0gMS43MDE1ODtcbiAgICByZXR1cm4gayAqIGsgKiAoKHMgKyAxKSAqIGsgLSBzKTtcbiAgfSxcbiAgT3V0KGspIHtcbiAgICBjb25zdCBzID0gMS43MDE1ODtcbiAgICByZXR1cm4gLS1rICogayAqICgocyArIDEpICogayArIHMpICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGNvbnN0IHMgPSAxLjcwMTU4ICogMS41MjU7XG4gICAgayAqPSAyO1xuICAgIGlmIChrIDwgMSkge1xuICAgICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayAtIHMpKTtcbiAgICB9XG5cbiAgICBrIC09IDI7XG4gICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayArIHMpICsgMik7XG4gIH0sXG59O1xuXG4vKipcbiAqIEJvdW5jZSBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBCb3VuY2UgPSB7XG4gIEluKGspIHtcbiAgICByZXR1cm4gMSAtIEJvdW5jZS5PdXQoMSAtIGspO1xuICB9LFxuICBPdXQoaykge1xuICAgIGlmIChrIDwgMSAvIDIuNzUpIHtcbiAgICAgIHJldHVybiA3LjU2MjUgKiBrICogaztcbiAgICB9IGVsc2UgaWYgKGsgPCAyIC8gMi43NSkge1xuICAgICAgayAtPSAxLjU7XG4gICAgICByZXR1cm4gNy41NjI1ICogKGsgLyAyLjc1KSAqIGsgKyAwLjc1O1xuICAgIH0gZWxzZSBpZiAoayA8IDIuNSAvIDIuNzUpIHtcbiAgICAgIGsgLT0gMi4yNTtcbiAgICAgIHJldHVybiA3LjU2MjUgKiAoayAvIDIuNzUpICogayArIDAuOTM3NTtcbiAgICB9XG4gICAgayAtPSAyLjYyNTtcbiAgICByZXR1cm4gNy41NjI1ICogKGsgLyAyLjc1KSAqIGsgKyAwLjk4NDM3NTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGlmIChrIDwgMC41KSB7XG4gICAgICByZXR1cm4gQm91bmNlLkluKGsgKiAyKSAqIDAuNTtcbiAgICB9XG4gICAgcmV0dXJuIEJvdW5jZS5PdXQoayAqIDIgLSAxKSAqIDAuNSArIDAuNTtcbiAgfSxcbn07XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcblxuLyoqXG4gKiBDbGFzcyB0aGF0IGNhbiBleGVjdXRlIGZ1bmN0aW9ucyB3aGVuIGxvY2FsIG1lc3NhZ2VzIGFyZSByZWNlaXZlZC4gTG9jYWwgbWVzc2FnZXNcbiAqIGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBpbnN0YW5jZSdzIGlkLlxuICpcbiAqIEBhbGlhcyBjb3JlL01lc3NlbmdlclxuICpcbiAqIEBwcm9wZXJ0eSB7Y29yZS9NZXNzZW5nZXJ9IEdsb2JhbE1lc3NlbmdlciAtIEEgbWVzc2VuZ2VyIHRoYXQgY2FuIGJlIHVzZWQgZm9yXG4gKiBnbG9iYWwgbWVzc2FnaW5nLiBXaGVuIHVzaW5nIHN0YXRpYyBsaXN0ZW4gYW5kIGVtaXQgbWV0aG9kcyB0aGV5IGFyZSBleGVjdXRlZFxuICogb24gdGhpcyBtZXNzZW5nZXIuXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gZXZlbnRzIHRoYXQgdGhlIE1lc3NlbmdlciBlbWl0cy5cbiAqL1xuY2xhc3MgTWVzc2VuZ2VyIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge2FueT19IGlkIC0gSWQgZm9yIHRoZSBvYmplY3QuIElmIG5vbmUgaXMgcHJvdmlkZWQgYSBuZXcgaWQgd2lsbFxuICAgKiBiZSBjcmVhdGVkLiBJZCBzaG91bGQgYmUgYWJsZSB0byBiZSByZXByZXNlbnRlZCBhcyBhIHN0cmluZy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGlkKSB7XG4gICAgdGhpcy5faWQgPSBpZCAhPT0gdW5kZWZpbmVkID8gaWQgOiBVdGlscy5jcmVhdGVJZCgpO1xuICAgIHRoaXMuX2Rpc3BhdGNoZXIgPSB3aW5kb3c7XG4gICAgdGhpcy5fY2FsbGJhY2tzID0ge307XG4gICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdHJpbmcgaWQgb2YgdGhlIG9iamVjdC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZWZpeCBhIG1lc3NhZ2Ugd2l0aCB0aGUgaW5zdGFuY2UgaWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBfY3JlYXRlTG9jYWxNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5pZH0uJHttZXNzYWdlfWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNhbGwgYSBjYWxsYmFjayBmdW5jdGlvbiBhbmQgc3VwcGx5IHRoZSBldmVudCdzXG4gICAqIGRldGFpbCBwcm9wZXJ0eSBhcyBhbiBhcmd1bWVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICpcbiAgICogQHJldHVybnMge0Z1bmN0aW9ufVxuICAgKi9cbiAgX2NyZWF0ZUxpc3RlbmVyKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGUgPT4ge1xuICAgICAgbGV0IHZhbHVlO1xuXG4gICAgICBpZiAoZS5kZXRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSBlLmRldGFpbDtcbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGV2ZW50IG9iamVjdCBhbmQgc2VuZCBpdCB0byBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRXZlbnQgdHlwZSBuYW1lLlxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gc2VuZCB0byBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDdXN0b21FdmVudH1cbiAgICovXG4gIF9jcmVhdGVFdmVudChtZXNzYWdlLCB2YWx1ZSkge1xuICAgIHJldHVybiBuZXcgQ3VzdG9tRXZlbnQobWVzc2FnZSwge2RldGFpbDogdmFsdWV9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbiBldmVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBFdmVudCB0eXBlIG5hbWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIC0gQSBsaXN0ZW5lciBmdW5jdGlvbiBnZW5lcmF0ZWQgdXNpbmcgX2NyZWF0ZUxpc3RlbmVyLlxuICAgKi9cbiAgX2FkZExpc3RlbmVyKG1lc3NhZ2UsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5fZGlzcGF0Y2hlci5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgdGhpcy5fY3JlYXRlTG9jYWxNZXNzYWdlKG1lc3NhZ2UpLFxuICAgICAgbGlzdGVuZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXIgYW4gZXZlbnQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRXZlbnQgdHlwZSBuYW1lLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIEEgbGlzdGVuZXIgZnVuY3Rpb24gZ2VuZXJhdGVkIHVzaW5nIF9jcmVhdGVMaXN0ZW5lci5cbiAgICovXG4gIF9yZW1vdmVMaXN0ZW5lcihtZXNzYWdlLCBsaXN0ZW5lcikge1xuICAgIHRoaXMuX2Rpc3BhdGNoZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgIHRoaXMuX2NyZWF0ZUxvY2FsTWVzc2FnZShtZXNzYWdlKSxcbiAgICAgIGxpc3RlbmVyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZm9yIHRoaXMgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGxpc3RlbiBmb3IuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBtZXNzYWdlIGlzIHJlY2VpdmVkLlxuICAgKi9cbiAgbGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgYWRkIGxpc3RlbmVyIGZvciAke21lc3NhZ2V9IG9uICR7dGhpcy5pZH0uIENhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbi5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdID0gW107XG4gICAgICB0aGlzLl9ldmVudExpc3RlbmVyc1ttZXNzYWdlXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGxpc3RlbmVyID0gdGhpcy5fY3JlYXRlTGlzdGVuZXIoY2FsbGJhY2spO1xuICAgIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5wdXNoKGNhbGxiYWNrKTtcbiAgICB0aGlzLl9ldmVudExpc3RlbmVyc1ttZXNzYWdlXS5wdXNoKGxpc3RlbmVyKTtcblxuICAgIHRoaXMuX2FkZExpc3RlbmVyKG1lc3NhZ2UsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IGEgZnVuY3Rpb24gZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBmb3IgdGhpc1xuICAgKiBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBtZXNzYWdlLlxuICAgKi9cbiAgc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjaykge1xuICAgIGlmICh0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIGRlZmluZWQsIGNhbGwgc3RvcExpc3RlbmluZyBvbiBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZVxuICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5sZW5ndGggLSAxOyBpID4gLTE7IGktLSkge1xuICAgICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdW2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgY2FsbGJhY2sgd2FzIGRlZmluZWQsIG1ha2Ugc3VyZSBpdCdzIGEgbGlzdGVuZXJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGlzdGVuZXIgPSB0aGlzLl9ldmVudExpc3RlbmVyc1ttZXNzYWdlXVtpbmRleF07XG4gICAgdGhpcy5fcmVtb3ZlTGlzdGVuZXIobWVzc2FnZSwgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbbWVzc2FnZV0uc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIGlmICh0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWxldGUgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdO1xuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZS1yZWdpc3RlciBjYWxsYmFjayhzKSBmcm9tIGJlaW5nIGV4ZWN1dGVkIHdoZW4gbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIGdpdmVuXG4gICAqIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcmUgcmVjZWl2ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVnZXhwfSByZWdleHAgLSByZWdleHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbHRlciBtZXNzYWdlcyB3aXRoLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIG1lc3NhZ2VzIG1hdGNoaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uXG4gICAqL1xuICBzdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gT2JqZWN0LmtleXModGhpcy5fY2FsbGJhY2tzKS5maWx0ZXIobWVzc2FnZSA9PiByZWdleHAudGVzdChtZXNzYWdlKSk7XG5cbiAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4ge1xuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IGFueSBmdW5jdGlvbnMgZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGFueSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvclxuICAgKiB0aGlzIG9iamVjdC5cbiAgICovXG4gIHN0b3BMaXN0ZW5pbmdUb0FsbCgpIHtcbiAgICBjb25zdCBtZXNzYWdlcyA9IE9iamVjdC5rZXlzKHRoaXMuX2NhbGxiYWNrcyk7XG5cbiAgICBmb3IgKGxldCBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+IC0xOyBpLS0pIHtcbiAgICAgIHRoaXMuc3RvcExpc3RlbmluZyhtZXNzYWdlc1tpXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBtZXNzYWdlLCBjYXVzaW5nIGxpc3RlbmVyIGZ1bmN0aW9ucyBmb3IgdGhlIG1lc3NhZ2Ugb24gdGhpcyBvYmplY3RcbiAgICogdG8gYmUgZXhlY3V0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZW1pdC5cbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIE9wdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gbGlzdGVuZXIgY2FsbGJhY2tzLlxuICAgKi9cbiAgZW1pdChtZXNzYWdlLCB2YWx1ZSkge1xuICAgIGlmICh0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1lc3NhZ2UgPSB0aGlzLl9jcmVhdGVMb2NhbE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgY29uc3QgZXZlbnQgPSB0aGlzLl9jcmVhdGVFdmVudChtZXNzYWdlLCB2YWx1ZSk7XG4gICAgdGhpcy5fZGlzcGF0Y2hlci5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZm9yIHRoZSBnbG9iYWwgTWVzc2VuZ2VyIGluc3RhbmNlLlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gbGlzdGVuIGZvci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuXG4gICAqL1xuICBzdGF0aWMgbGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2ssIG1lc3Nlbmdlcikge1xuICAgIHRoaXMuR2xvYmFsTWVzc2VuZ2VyLmxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrLCBtZXNzZW5nZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXZlbnQgYSBmdW5jdGlvbiBmcm9tIGJlaW5nIGV4ZWN1dGVkIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvciB0aGVcbiAgICogZ2xvYmFsIE1lc3NlbmdlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5HbG9iYWxNZXNzZW5nZXIuc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogRGUtcmVnaXN0ZXIgY2FsbGJhY2socykgZnJvbSBiZWluZyBleGVjdXRlZCBvbiB0aGUgZ2xvYmFsIG1lc3NlbmdlcnIgaW5zdGFuY2VcbiAgICogd2hlbiBtZXNzYWdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uIGFyZSByZWNlaXZlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWdleHB9IHJlZ2V4cCAtIHJlZ2V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gZmlsdGVyIG1lc3NhZ2VzIHdpdGguXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICovXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gT2JqZWN0LmtleXModGhpcy5HbG9iYWxNZXNzZW5nZXIuX2NhbGxiYWNrcykuZmlsdGVyKFxuICAgICAgbWVzc2FnZSA9PiByZWdleHAudGVzdChtZXNzYWdlKVxuICAgICk7XG5cbiAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4ge1xuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IGFueSBmdW5jdGlvbnMgZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGFueSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvclxuICAgKiB0aGUgZ2xvYmFsIE1lc3NlbmdlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHN0b3BMaXN0ZW5pbmdUb0FsbCgpIHtcbiAgICB0aGlzLkdsb2JhbE1lc3Nlbmdlci5zdG9wTGlzdGVuaW5nVG9BbGwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgbWVzc2FnZSwgY2F1c2luZyBsaXN0ZW5lciBmdW5jdGlvbnMgZm9yIHRoZSBtZXNzYWdlIG9uIHRoZSBnbG9iYWwgTWVzc2VuZ2VyXG4gICAqIGluc3RhbmNlIHRvIGJlIGV4ZWN1dGVkLlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZW1pdC5cbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIE9wdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gbGlzdGVuZXIgY2FsbGJhY2tzLlxuICAgKi9cbiAgc3RhdGljIGVtaXQobWVzc2FnZSwgdmFsdWUpIHtcbiAgICB0aGlzLkdsb2JhbE1lc3Nlbmdlci5lbWl0KG1lc3NhZ2UsIHZhbHVlKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNzZW5nZXIsIHtcbiAgR2xvYmFsTWVzc2VuZ2VyOiB7XG4gICAgdmFsdWU6IG5ldyBNZXNzZW5nZXIoKSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG4gIEVWRU5UUzoge1xuICAgIHZhbHVlOiB7fSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgTWVzc2VuZ2VyO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQ29yZU1lc3NlbmdlciBmcm9tICdjb3JlL01lc3Nlbmdlcic7XHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgY29yZS9NZXNzZW5nZXJcclxuICogQGFsaWFzIHRocmVlLmpzL01lc3NlbmdlclxyXG4gKi9cclxuY2xhc3MgTWVzc2VuZ2VyIGV4dGVuZHMgQ29yZU1lc3NlbmdlciB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IGlkIC0gSWQgZm9yIHRoZSBvYmplY3QuIElmIG5vbmUgaXMgcHJvdmlkZWQgYSBuZXcgaWQgd2lsbFxyXG4gICAqIGJlIGNyZWF0ZWQuIElkIHNob3VsZCBiZSBhYmxlIHRvIGJlIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGlkKSB7XHJcbiAgICBzdXBlcihpZCk7XHJcbiAgICB0aGlzLl9kaXNwYXRjaGVyID0gdGhpcztcclxuICB9XHJcblxyXG4gIF9jcmVhdGVFdmVudChtZXNzYWdlLCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHtkZXRhaWw6IHZhbHVlLCB0eXBlOiBtZXNzYWdlfTtcclxuICB9XHJcbn1cclxuXHJcbi8vIEFzc2lnbiBUaHJlZS5qcyBFdmVudERpc3BhdGNoZXIgZnVuY3Rpb25hbGl0eSB0byB0aGUgTWVzc2VuZ2VyIGNsYXNzXHJcbk9iamVjdC5hc3NpZ24oTWVzc2VuZ2VyLnByb3RvdHlwZSwgVEhSRUUuRXZlbnREaXNwYXRjaGVyLnByb3RvdHlwZSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTWVzc2VuZ2VyLCAnR2xvYmFsTWVzc2VuZ2VyJywge1xyXG4gIHZhbHVlOiBuZXcgTWVzc2VuZ2VyKCksXHJcbiAgd3JpdGFibGU6IGZhbHNlLFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lc3NlbmdlcjtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgTWVzc2VuZ2VyIGZyb20gJ2FwcC9NZXNzZW5nZXInO1xyXG5cclxuLyoqXHJcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCBob3N0IGZlYXR1cmVzLiBLZWVwcyBhIHJlZmVyZW5jZSB0byB0aGUgaG9zdCBvYmplY3QgbWFuYWdpbmdcclxuICogdGhlIGZlYXR1cmUuXHJcbiAqXHJcbiAqIEBhYnN0cmFjdFxyXG4gKlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gbWVzc2FnZXMgdGhhdCB0aGUgZmVhdHVyZSBlbWl0cy4gV2hlbiB0aGVcclxuICogZmVhdHVyZSBpcyBhZGRlZCB0byBhIHtAbGluayBjb3JlL0hvc3RPYmplY3R9LCBldmVudCBuYW1lcyB3aWxsIGJlIHByZWZpeGVkIGJ5IHRoZVxyXG4gKiBuYW1lIG9mIHRoZSBmZWF0dXJlIGNsYXNzICsgJy4nLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy51cGRhdGU9b25VcGRhdGVdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFt1cGRhdGVde0BsaW5rIEFic3RyYWN0SG9zdEZlYXR1cmUjdXBkYXRlfS5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFNFUlZJQ0VTIC0gQW55IEFXUyBzZXJ2aWNlcyB0aGF0IGFyZSBuZWNlc3NhcnkgZm9yIHRoZVxyXG4gKiBmZWF0dXJlIHRvIGZ1bmN0aW9uLlxyXG4gKi9cclxuY2xhc3MgQWJzdHJhY3RIb3N0RmVhdHVyZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIFRoZSBIb3N0T2JqZWN0IG1hbmFnaW5nIHRoZSBmZWF0dXJlLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGhvc3QpIHtcclxuICAgIHRoaXMuX2hvc3QgPSBob3N0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIG5hbWVzcGFjZSB0byB0aGUgaG9zdCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIHRvIGNvbnRhaW4gcHJvcGVydGllc1xyXG4gICAqIGFuZCBtZXRob2RzIGZyb20gdGhlIGZlYXR1cmUgdGhhdCB1c2VycyBvZiB0aGUgaG9zdCBuZWVkIGFjY2VzcyB0by5cclxuICAgKi9cclxuICBpbnN0YWxsQXBpKCkge1xyXG4gICAgY29uc3QgZXZlbnRzID0ge307XHJcbiAgICBjb25zdCBhcGkgPSB7RVZFTlRTOiBldmVudHN9O1xyXG5cclxuICAgIC8vIEFkZCB0aGUgY2xhc3MgbmFtZSB0byBldmVudCBuYW1lc1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMpLmZvckVhY2goKFtuYW1lLCB2YWx1ZV0pID0+IHtcclxuICAgICAgZXZlbnRzW25hbWVdID0gYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfS4ke3ZhbHVlfWA7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9ob3N0W3RoaXMuY29uc3RydWN0b3IubmFtZV0gPSBhcGk7XHJcblxyXG4gICAgcmV0dXJuIGFwaTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGhvc3QgdGhhdCBtYW5hZ2VzIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICovXHJcbiAgZ2V0IGhvc3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faG9zdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGVuZ2luZSBvd25lciBvYmplY3Qgb2YgdGhlIGhvc3QuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKi9cclxuICBnZXQgb3duZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faG9zdC5vd25lcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBhIGZlYXR1cmUgbWVzc2FnZSBmcm9tIHRoZSBob3N0IG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gTWVzc2FnZSB0byBsaXN0ZW4gZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbWVzc2FnZSBpcyByZWNlaXZlZC5cclxuICAgKi9cclxuICBsaXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgdGhpcy5faG9zdC5saXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gdG8gYSBmZWF0dXJlIG1lc3NhZ2UgZnJvbSB0aGUgZ2xvYmFsIG1lc3Nlbmdlci4gRmVhdHVyZSBtZXNzYWdlcyB3aWxsXHJcbiAgICogYmUgcHJlZml4ZWQgd2l0aCB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gTWVzc2FnZSB0byBsaXN0ZW4gZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiB0aGUgbWVzc2FnZSBpcyByZWNlaXZlZC5cclxuICAgKi9cclxuICBzdGF0aWMgbGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2spIHtcclxuICAgIG1lc3NhZ2UgPSBgJHt0aGlzLm5hbWV9LiR7bWVzc2FnZX1gO1xyXG4gICAgTWVzc2VuZ2VyLmxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGEgbWVzc2FnZSBmcm9tIHRoZSBob3N0IG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gTWVzc2FnZSB0byBzdG9wIGxpc3RlbmluZyBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXHJcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBtZXNzYWdlLlxyXG4gICAqL1xyXG4gIHN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spIHtcclxuICAgIHRoaXMuX2hvc3Quc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBhIG1lc3NhZ2UgZnJvbSB0aGUgZ2xvYmFsIG1lc3Nlbmdlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gTWVzc2FnZSB0byBzdG9wIGxpc3RlbmluZyBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXHJcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBtZXNzYWdlLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICBtZXNzYWdlID0gYCR7dGhpcy5uYW1lfS4ke21lc3NhZ2V9YDtcclxuICAgIE1lc3Nlbmdlci5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGEgbWVzc2FnZSBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uIGZyb20gdGhlXHJcbiAgICogaG9zdCBvYmplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1JlZ2V4cH0gcmVnZXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzdG9wIGxpc3RlbmluZyBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXHJcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBtZXNzYWdlLlxyXG4gICAqL1xyXG4gIHN0b3BMaXN0ZW5pbmdCeVJlZ2V4cChyZWdleHAsIGNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLl9ob3N0LnN0b3BMaXN0ZW5pbmdCeVJlZ2V4cChyZWdleHAsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGEgbWVzc2FnZSBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uIGZyb20gdGhlXHJcbiAgICogZ2xvYmFsIG1lc3Nlbmdlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UmVnZXhwfSByZWdleHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgc3RhdGljIHN0b3BMaXN0ZW5pbmdCeVJlZ2V4cChyZWdleHAsIGNhbGxiYWNrKSB7XHJcbiAgICByZWdleHAgPSBuZXcgUmVnRXhwKGBeJHt0aGlzLm5hbWV9LiR7cmVnZXhwLnNvdXJjZS5yZXBsYWNlKC9cXF4vLCAnJyl9YCk7XHJcbiAgICBNZXNzZW5nZXIuc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYWxsIG1lc3NhZ2VzLlxyXG4gICAqL1xyXG4gIHN0b3BMaXN0ZW5pbmdUb0FsbCgpIHtcclxuICAgIHRoaXMuX2hvc3Quc3RvcExpc3RlbmluZ1RvQWxsKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBhbGwgZmVhdHVyZSBtZXNzYWdlcy5cclxuICAgKi9cclxuICBzdGF0aWMgc3RvcExpc3RlbmluZ1RvQWxsKCkge1xyXG4gICAgTWVzc2VuZ2VyLnN0b3BMaXN0ZW5pbmdCeVJlZ2V4cChuZXcgUmVnRXhwKGBeJHt0aGlzLm5hbWV9LmApKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgZmVhdHVyZSBtZXNzYWdlcyBmcm9tIHRoZSBob3N0LiBGZWF0dXJlIG1lc3NhZ2VzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aFxyXG4gICAqIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBlbWl0LlxyXG4gICAqIEBwYXJhbSB7YW55PX0gdmFsdWUgLSBPcHRpb25hbCBwYXJhbWV0ZXIgdG8gcGFzcyB0byBsaXN0ZW5lciBjYWxsYmFja3MuXHJcbiAgICovXHJcbiAgZW1pdChtZXNzYWdlLCB2YWx1ZSkge1xyXG4gICAgbWVzc2FnZSA9IGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0uJHttZXNzYWdlfWA7XHJcbiAgICB0aGlzLl9ob3N0LmVtaXQobWVzc2FnZSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdCBmZWF0dXJlIG1lc3NhZ2VzIGZyb20gdGhlIGdsb2JhbCBtZXNzZW5nZXIuIEZlYXR1cmUgbWVzc2FnZXMgd2lsbCBiZSBwcmVmaXhlZFxyXG4gICAqIHdpdGggdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGVtaXQuXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIE9wdGlvbmFsIHBhcmFtZXRlciB0byBwYXNzIHRvIGxpc3RlbmVyIGNhbGxiYWNrcy5cclxuICAgKi9cclxuICBzdGF0aWMgZW1pdChtZXNzYWdlLCB2YWx1ZSkge1xyXG4gICAgbWVzc2FnZSA9IGAke3RoaXMubmFtZX0uJHttZXNzYWdlfWA7XHJcbiAgICBNZXNzZW5nZXIuZW1pdChtZXNzYWdlLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlcyBlYWNoIHRpbWUgdGhlIGhvc3QgaXMgdXBkYXRlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBBbW91bnQgb2YgdGltZSBzaW5jZSB0aGUgbGFzdCBob3N0IHVwZGF0ZSB3YXNcclxuICAgKiBjYWxsZWQuXHJcbiAgICovXHJcbiAgdXBkYXRlKGRlbHRhVGltZSkge1xyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnVwZGF0ZSwgZGVsdGFUaW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFuIHVwIG9uY2UgdGhlIGZlYXR1cmUgaXMgbm8gbG9uZ2VyIGluIHVzZS4gUmVtb3ZlIHRoZSBmZWF0dXJlIG5hbWVzcGFjZVxyXG4gICAqIGZyb20gdGhlIGhvc3QgYW5kIHJlbW92ZSByZWZlcmVuY2UgdG8gdGhlIGhvc3QuXHJcbiAgICovXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuX2hvc3RbdGhpcy5jb25zdHJ1Y3Rvci5uYW1lXSkuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgZGVsZXRlIHRoaXMuX2hvc3RbdGhpcy5jb25zdHJ1Y3Rvci5uYW1lXVtuYW1lXTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRlbGV0ZSB0aGlzLl9ob3N0W3RoaXMuY29uc3RydWN0b3IubmFtZV07XHJcbiAgICBkZWxldGUgdGhpcy5faG9zdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGxpZXMgYSBzZXF1ZW5jZSBvZiBtaXhpbiBjbGFzcyBmYWN0b3J5IGZ1bmN0aW9ucyB0byB0aGlzIGNsYXNzIGFuZFxyXG4gICAqIHJldHVybnMgdGhlIHJlc3VsdC4gRWFjaCBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byByZXR1cm4gYSBjbGFzcyB0aGF0XHJcbiAgICogZXh0ZW5kcyB0aGUgY2xhc3MgaXQgd2FzIGdpdmVuLiBUaGUgZnVuY3Rpb25zIGFyZSBhcHBsaWVkIGluIHRoZSBvcmRlclxyXG4gICAqIHRoYXQgcGFyYW1ldGVycyBhcmUgZ2l2ZW4sIG1lYW5pbmcgdGhhdCB0aGUgZmlyc3QgZmFjdG9yeSB3aWxsXHJcbiAgICogZXh0ZW5kIHRoaXMgYmFzZSBjbGFzcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IG1peGluQ2xhc3NGYWN0b3JpZXMgQ2xhc3MgZmFjdG9yeSBmdW5jdGlvbnMgdGhhdCB3aWxsXHJcbiAgICogYmUgYXBwbGllZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtDbGFzc30gQSBjbGFzcyB0aGF0IGlzIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIGZhY3RvcnkgZnVuY3Rpb25zLlxyXG4gICAqIFRoZSByZXN1bHRpbmcgY2xhc3Mgd2lsbCBhbHdheXMgaW5oZXJpdCBmcm9tIEFic3RyYWN0SG9zdEZlYXR1cmUuXHJcbiAgICovXHJcbiAgc3RhdGljIG1peCguLi5taXhpbkNsYXNzRmFjdG9yaWVzKSB7XHJcbiAgICBsZXQgUmVzdWx0Q2xhc3MgPSB0aGlzO1xyXG5cclxuICAgIG1peGluQ2xhc3NGYWN0b3JpZXMuZm9yRWFjaChtaXhpbkNsYXNzRmFjdG9yeSA9PiB7XHJcbiAgICAgIFJlc3VsdENsYXNzID0gbWl4aW5DbGFzc0ZhY3RvcnkoUmVzdWx0Q2xhc3MpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIFJlc3VsdENsYXNzO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQWJzdHJhY3RIb3N0RmVhdHVyZSwge1xyXG4gIEVWRU5UUzoge1xyXG4gICAgdmFsdWU6IHtcclxuICAgICAgdXBkYXRlOiAnb25VcGRhdGUnLFxyXG4gICAgfSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIFNFUlZJQ0VTOiB7XHJcbiAgICB2YWx1ZToge30sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBYnN0cmFjdEhvc3RGZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBNZXNzZW5nZXIgZnJvbSAnYXBwL01lc3Nlbmdlcic7XHJcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJy4vQWJzdHJhY3RIb3N0RmVhdHVyZSc7XHJcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBPYmplY3QgdGhhdCBtYW5hZ2VzIGFjY2VzcyB0byBhbGwgSG9zdCBmZWF0dXJlcy4gQ29udGFpbnMgYSByZWZlcmVuY2UgdG9cclxuICogZW5naW5lLXNwZWNpZmljIHZpc3VhbHMgaWYgYXBwbGljYWJsZS5cclxuICpcclxuICogQGV4dGVuZHMgY29yZS9NZXNzZW5nZXJcclxuICogQGFsaWFzIGNvcmUvSG9zdE9iamVjdFxyXG4gKlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gbWVzc2FnZXMgdGhhdCB0aGUgTWVzc2VuZ2VyIGVtaXRzLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy51cGRhdGU9J29uVXBkYXRlJ10gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3VwZGF0ZV17QGxpbmsgY29yZS9Ib3N0T2JqZWN0I3VwZGF0ZX0uXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLmFkZEZlYXR1cmU9J29uQWRkRmVhdHVyZSddIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogYWZ0ZXIgZWFjaCBjYWxsIHRvIFthZGRGZWF0dXJlXXtAbGluayBjb3JlL0hvc3RPYmplY3QjYWRkRmVhdHVyZX0uXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbW92ZUZlYXR1cmU9J29uUmVtb3ZlRmVhdHVyZSddIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogYWZ0ZXIgZWFjaCBjYWxsIHRvIFtyZW1vdmVGZWF0dXJlXXtAbGluayBjb3JlL0hvc3RPYmplY3QjcmVtb3ZlRmVhdHVyZX0uXHJcbiAqL1xyXG5jbGFzcyBIb3N0T2JqZWN0IGV4dGVuZHMgTWVzc2VuZ2VyIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBob3N0LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5vd25lciAtIE9wdGlvbmFsIGVuZ2luZS1zcGVjaWZpYyBvd25lciBvZiB0aGUgaG9zdC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcih7b3duZXIgPSB7fX0gPSB7fSkge1xyXG4gICAgLy8gSWYgYW4gb3duZXIgaXMgc3BlY2lmaWVkLCB1c2UgaXRzIGlkIGZvciBtZXNzYWdpbmdcclxuICAgIHN1cGVyKG93bmVyLmlkKTtcclxuXHJcbiAgICB0aGlzLl9vd25lciA9IG93bmVyO1xyXG4gICAgdGhpcy5fZmVhdHVyZXMgPSB7fTtcclxuICAgIHRoaXMuX3dhaXRzID0gW107XHJcbiAgICB0aGlzLl9sYXN0VXBkYXRlID0gdGhpcy5ub3c7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBlbmdpbmUgb3duZXIgb2JqZWN0IG9mIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge09iamVjdH1cclxuICAgKi9cclxuICBnZXQgb3duZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3duZXI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgbm93KCkge1xyXG4gICAgcmV0dXJuIERhdGUubm93KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBhbW91bnQgb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgdXBkYXRlIHdhcyBsYXN0IGNhbGxlZC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IGRlbHRhVGltZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm5vdyAtIHRoaXMuX2xhc3RVcGRhdGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgaW4gdGhlIGVuZ2luZSdzIHJlbmRlciBsb29wLiBFeGVjdXRlcyB1cGRhdGVcclxuICAgKiBsb29wcyBmb3IgYWxsIGZlYXR1cmVzLlxyXG4gICAqL1xyXG4gIHVwZGF0ZSgpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5ub3c7XHJcbiAgICBjb25zdCBkdCA9IHRoaXMuZGVsdGFUaW1lO1xyXG5cclxuICAgIC8vIFByb2dyZXNzIHN0b3JlZCB3YWl0c1xyXG4gICAgdGhpcy5fd2FpdHMuZm9yRWFjaCh3YWl0ID0+IHtcclxuICAgICAgd2FpdC5leGVjdXRlKGR0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBhbGwgZmVhdHVyZXNcclxuICAgIE9iamVjdC52YWx1ZXModGhpcy5fZmVhdHVyZXMpLmZvckVhY2goZmVhdHVyZSA9PiB7XHJcbiAgICAgIGZlYXR1cmUudXBkYXRlKGR0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIE5vdGlmeSBsaXN0ZW5lcnMgYW4gdXBkYXRlIG9jY3VyZWRcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy51cGRhdGUsIGR0KTtcclxuXHJcbiAgICB0aGlzLl9sYXN0VXBkYXRlID0gY3VycmVudFRpbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBkZWZlcnJlZCBwcm9taXNlIHRoYXQgd2lsbCB3YWl0IGEgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlXHJcbiAgICogcmVzb2x2aW5nLiBUaGUgaG9zdCB3aWxsIGNvbnRpbnVvdXNseSB1cGRhdGUgdGhlIHdhaXQgcHJvbWlzZSBkdXJpbmcgdGhlXHJcbiAgICogdXBkYXRlIGxvb3AgdW50aWwgaXQgcmVzb2x2ZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSByZXNvbHZpbmcuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBvYmplY3RcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkZpbmlzaF0gLSBDYWxsYmFjayB0byBleGVjdXRlIG9uY2UgdGhlIHdhaXQgdGltZVxyXG4gICAqIGlzIG1ldC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vblByb2dyZXNzIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIHdhaXRcclxuICAgKiB0aW1lIHByb2dyZXNzZXMgdG93YXJkcyB0aGUgdGFyZ2V0IG51bWJlciBvZiBzZWNvbmRzLiBUaGUgYW1vdW50IG9mIHByb2dyZXNzXHJcbiAgICogYXMgYSAwLTEgcGVyY2VudGFnZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25DYW5jZWwgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB1c2VyIGNhbmNlbHNcclxuICAgKiB0aGUgd2FpdCBiZWZvcmUgY29tcGxldGlvbi5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkVycm9yIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgd2FpdCBzdG9wc1xyXG4gICAqIGJlY2F1c2UgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuIFRoZSBlcnJvciBtZXNzYWdlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICB3YWl0KHNlY29uZHMsIHtvbkZpbmlzaCwgb25Qcm9ncmVzcywgb25DYW5jZWwsIG9uRXJyb3J9ID0ge30pIHtcclxuICAgIGNvbnN0IHdhaXQgPSBVdGlscy53YWl0KHNlY29uZHMsIHtvbkZpbmlzaCwgb25Qcm9ncmVzcywgb25DYW5jZWwsIG9uRXJyb3J9KTtcclxuICAgIHRoaXMuX3dhaXRzLnB1c2god2FpdCk7XHJcblxyXG4gICAgLy8gT25jZSB0aGUgd2FpdCBwcm9taXNlIGlzIG5vIGxvbmdlciBwZW5kaW5nIHJlbW92ZSBpdCBmcm9tIHRoZSB3YWl0cyBhcnJheVxyXG4gICAgY29uc3Qgb25Db21wbGV0ZSA9ICgpID0+IHtcclxuICAgICAgdGhpcy5fd2FpdHMuc3BsaWNlKHRoaXMuX3dhaXRzLmluZGV4T2Yod2FpdCksIDEpO1xyXG4gICAgfTtcclxuICAgIHdhaXQudGhlbihvbkNvbXBsZXRlLCBvbkNvbXBsZXRlKTtcclxuXHJcbiAgICByZXR1cm4gd2FpdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluc3RhbnRpYXRlIGEgbmV3IEhvc3QgZmVhdHVyZSBhbmQgc3RvcmUgaXQuIEZlYXR1cmVzIG11c3QgaW5oZXJpdCBmcm9tXHJcbiAgICogQWJzdHJhY3RIb3N0RmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEZlYXR1cmVDbGFzcyAtIENsYXNzIHRoYXQgd2lsbCBpbnN0YW50aWF0ZSB0aGUgZmVhdHVyZS4gTXVzdFxyXG4gICAqIGV4dGVuZCB7QGxpbmsgQWJzdHJhY3RIb3N0RmVhdHVyZX0uXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdIC0gV2hldGhlciBvciBub3QgdG8gb3ZlcndyaXRlIGFuIGV4aXN0aW5nXHJcbiAgICogZmVhdHVyZSBpZiBvbmUgb2YgdGhpcyB0eXBlIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBvYmplY3QuXHJcbiAgICogQHBhcmFtICB7Li4uYW55fSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgRmVhdHVyZUNsYXNzXHJcbiAgICogY29uc3RydWN0b3IuIFRoZSBIb3N0T2JqZWN0IHdpbGwgYWx3YXlzIGJlIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG9yIG5vdCBhIGZlYXR1cmUgd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZC5cclxuICAgKi9cclxuICBhZGRGZWF0dXJlKEZlYXR1cmVDbGFzcywgZm9yY2UgPSBmYWxzZSwgLi4uYXJncykge1xyXG4gICAgY29uc3QgaW5wdXRUeXBlID0gdHlwZW9mIEZlYXR1cmVDbGFzcztcclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIEZlYXR1cmVDbGFzcyBjYW4gYmUgZXhlY3V0ZWRcclxuICAgIGlmIChpbnB1dFR5cGUgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgYWRkIGZlYXR1cmUgdG8gaG9zdCAke3RoaXMuaWR9LiBGZWF0dXJlQ2xhc3MgbXVzdCBiZSBhIGNsYXNzLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmVhdHVyZSBpcyBhIGhvc3QgZmVhdHVyZVxyXG4gICAgZWxzZSBpZiAoIShGZWF0dXJlQ2xhc3MucHJvdG90eXBlIGluc3RhbmNlb2YgQWJzdHJhY3RIb3N0RmVhdHVyZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgYWRkIGZlYXR1cmUgJHtGZWF0dXJlQ2xhc3MubmFtZX0gdG8gaG9zdCAke3RoaXMuaWR9LiBGZWF0dXJlQ2xhc3MgbXVzdCBleHRlbmQgQWJzdHJhY3RIb3N0RmVhdHVyZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIEZlYXR1cmVDbGFzcyBhbHJlYWR5IGV4aXN0cyBvbiB0aGlzIG9iamVjdFxyXG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzW0ZlYXR1cmVDbGFzcy5uYW1lXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChmb3JjZSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIGBGZWF0dXJlICR7RmVhdHVyZUNsYXNzLm5hbWV9IGFscmVhZHkgZXhpc3RzIG9uIGhvc3QgJHt0aGlzLmlkfS4gRXhpc3RpbmcgZmVhdHVyZSB3aWxsIGJlIG92ZXJ3cml0dGVuLmBcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBGZWF0dXJlICR7RmVhdHVyZUNsYXNzLm5hbWV9IGFscmVhZHkgZXhpc3RzIG9uIGhvc3QgJHt0aGlzLmlkfS4gVXNlICdmb3JjZScgYXJndW1lbnQgdG8gb3ZlcndyaXRlIHRoZSBmZWF0dXJlLmBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZmVhdHVyZVxyXG4gICAgY29uc3QgZmVhdHVyZSA9IG5ldyBGZWF0dXJlQ2xhc3ModGhpcywgLi4uYXJncyk7XHJcbiAgICBmZWF0dXJlLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICB0aGlzLl9mZWF0dXJlc1tGZWF0dXJlQ2xhc3MubmFtZV0gPSBmZWF0dXJlO1xyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLmFkZEZlYXR1cmUsIEZlYXR1cmVDbGFzcy5uYW1lKTtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhIGZlYXR1cmUgZnJvbSB0aGUgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVOYW1lIC0gTmFtZSBvZiB0aGUgdHlwZSBvZiBmZWF0dXJlIHRvIHJlbW92ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IGEgZmVhdHVyZSB3YXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuXHJcbiAgICovXHJcbiAgcmVtb3ZlRmVhdHVyZSh0eXBlTmFtZSkge1xyXG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzW3R5cGVOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgRmVhdHVyZSBvZiB0eXBlICR7dHlwZU5hbWV9IGRvZXMgbm90IGV4aXN0IG9uIGhvc3QgJHt0aGlzLmlkfS4gTm8gZmVhdHVyZSB3aWxsIGJlIHJlbW92ZWQuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBSZW1vdmUgdGhlIGZlYXR1cmVcclxuICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnJlbW92ZUZlYXR1cmUsIHR5cGVOYW1lKTtcclxuICAgICAgdGhpcy5fZmVhdHVyZXNbdHlwZU5hbWVdLmRpc2NhcmQoKTtcclxuICAgICAgZGVsZXRlIHRoaXMuX2ZlYXR1cmVzW3R5cGVOYW1lXTtcclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhdGUgd2hldGhlciBhIHNwZWNpZmllZCBmZWF0dXJlIGlzIGluc3RhbGxlZCBvbiB0aGUgaG9zdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZSAtIE5hbWUgb2YgdGhlIHR5cGUgb2YgZmVhdHVyZSB0byBsb29rIGZvci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGhhc0ZlYXR1cmUodHlwZU5hbWUpIHtcclxuICAgIHJldHVybiAhIXRoaXMuX2ZlYXR1cmVzW3R5cGVOYW1lXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3QgdGhlIG5hbWVzIG9mIHRoZSBmZWF0dXJlcyBpbnN0YWxsZWQgb24gdGhlIGhvc3QuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59XHJcbiAgICovXHJcbiAgbGlzdEZlYXR1cmVzKCkge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2ZlYXR1cmVzKTtcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIb3N0T2JqZWN0LCAnRVZFTlRTJywge1xyXG4gIHZhbHVlOiB7XHJcbiAgICAuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoSG9zdE9iamVjdCkuRVZFTlRTLFxyXG4gICAgdXBkYXRlOiAnb25VcGRhdGUnLFxyXG4gICAgYWRkRmVhdHVyZTogJ29uQWRkRmVhdHVyZScsXHJcbiAgICByZW1vdmVGZWF0dXJlOiAnb25SZW1vdmVGZWF0dXJlJyxcclxuICB9LFxyXG4gIHdyaXRhYmxlOiBmYWxzZSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBIb3N0T2JqZWN0O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcblxyXG4vKipcclxuICogVGhyZWVqcyBDbG9jayBvYmplY3RcclxuICpcclxuICogQGV4dGVybmFsIFwiVEhSRUUuQ2xvY2tcIlxyXG4gKiBAc2VlIGh0dHBzOi8vdGhyZWVqcy5vcmcvZG9jcy8jYXBpL2VuL2NvcmUvQ2xvY2tcclxuICovXHJcblxyXG5pbXBvcnQgQ29yZUhvc3RPYmplY3QgZnJvbSAnY29yZS9Ib3N0T2JqZWN0JztcclxuXHJcbi8qKlxyXG4gKiBAYWxpYXMgdGhyZWUuanMvSG9zdE9iamVjdFxyXG4gKiBAZXh0ZW5kcyBjb3JlL0hvc3RPYmplY3RcclxuICovXHJcbmNsYXNzIEhvc3RPYmplY3QgZXh0ZW5kcyBDb3JlSG9zdE9iamVjdCB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgaG9zdC5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMub3duZXIgLSBPcHRpb25hbCBlbmdpbmUtc3BlY2lmaWMgb3duZXIgb2YgdGhlIGhvc3QuXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpcIlRIUkVFLkNsb2NrXCI9fSBvcHRpb25zLmNsb2NrIC0gT3B0aW9uYWwgY2xvY2sgdG8gbWFuYWdlIHRpbWUuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XHJcbiAgICBzdXBlcihvcHRpb25zKTtcclxuXHJcbiAgICB0aGlzLl9jbG9jayA9IG9wdGlvbnMuY2xvY2s7XHJcblxyXG4gICAgaWYgKHRoaXMuX2Nsb2NrKSB7XHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbm93Jywge1xyXG4gICAgICAgIGdldDogKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrLmdldEVsYXBzZWRUaW1lKCkgKiAxMDAwO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5fbGFzdFVwZGF0ZSA9IHRoaXMubm93O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgSG9zdE9iamVjdDtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXG5pbXBvcnQgSG9zdE9iamVjdCBmcm9tICdhcHAvSG9zdE9iamVjdCc7XG5cbi8qKlxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIGZlYXR1cmVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiBvdGhlciBmZWF0dXJlcyBiZWluZ1xuICogcHJlc2VudCBvbiB0aGUgaG9zdC4gRXZlbnQgZGVwZW5kZW5jaWVzIHdpbGwgYmUgbGlzdGVuZWQgZm9yIHdoZW4gYSBmZWF0dXJlIG9mXG4gKiBtYXRjaGluZyB0eXBlIGlzIGFkZGVkIHRvIHRoZSBob3N0IGFuZCB3aWxsIHN0b3AgYmVpbmcgbGlzdGVuZWQgZm9yIHdoZW4gb25lXG4gKiBpcyByZW1vdmVkLiBJZiB0aGUgZmVhdHVyZSBpcyBhbHJlYWR5IHByZXNlbnQgd2hlbiBjb25zdHJ1Y3RlZCwgZXZlbnRzIHdpbGxcbiAqIGJlIGxpc3RlbmVkIGZvciByaWdodCBhd2F5LlxuICpcbiAqIEBpbnRlcmZhY2VcbiAqXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRfREVQRU5ERU5DSUVTIC0gRXZlbnRzIHRoYXQgdGhlIGZlYXR1cmUgc2hvdWxkIHN0YXJ0L3N0b3BcbiAqIGxpc3RlbmluZyBmb3Igd2hlbiBhIGZlYXR1cmUgb2YgdHlwZSBGZWF0dXJlTmFtZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGhvc3QuXG4gKiBFdmVudCBkZXBlbmRlbmNpZXMgc2hvdWxkIGZvbGxvdyB0aGUgc2lnbmF0dXJlOlxuICogIHsgRmVhdHVyZU5hbWU6IHsgZXZlbnROYW1lOiBjYWxsYmFja05hbWUsIC4uLiB9LCAuLi4gfVxuICovXG5jbGFzcyBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIFN0YXJ0IGxpc3RlbmluZyBmb3IgZXZlbnQgZGVwZW5kZW5jaWVzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGZlYXR1cmUgdHlwZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVOYW1lIC0gdHlwZSBvZiBmZWF0dXJlIHRvIGxpc3RlbiBmb3IuXG4gICAqL1xuICBfb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpIHt9XG5cbiAgLyoqXG4gICAqIFN0b3AgbGlzdGVuaW5nIGZvciBldmVudCBkZXBlbmRlbmNpZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gZmVhdHVyZSB0eXBlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUgLSB0eXBlIG9mIGZlYXR1cmUgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxuICAgKi9cbiAgX29uRmVhdHVyZVJlbW92ZWQodHlwZU5hbWUpIHt9XG5cbiAgLyoqXG4gICAqIEBhdWdtZW50cyB7QGxpbmsgQWJzdHJhY3RIb3N0RmVhdHVyZSNkaXNjYXJkfVxuICAgKi9cbiAgZGlzY2FyZCgpIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9IGFuZCBleHRlbmRzXG4gICAqIGEgc3BlY2lmaWVkIGJhc2UgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEJhc2VDbGFzcyAtIFRoZSBjbGFzcyB0byBleHRlbmQuXG4gICAqXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XG4gICAgY29uc3QgRmVhdHVyZURlcGVuZGVudE1peGluID0gY2xhc3MgZXh0ZW5kcyBCYXNlQ2xhc3Mge1xuICAgICAgY29uc3RydWN0b3IoaG9zdCkge1xuICAgICAgICBzdXBlcihob3N0KTtcbiAgICAgICAgdGhpcy5faG9zdCA9IGhvc3Q7XG5cbiAgICAgICAgLy8gTm8gbmVlZCB0byBsaXN0ZW4gZm9yIGV2ZW50cyBpZiB0aGUgbWl4aW4gaXMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbiBtdWx0aXBsZSB0aW1lc1xuICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgLy8gU3RhcnQgbGlzdGVuaW5nIGZvciBmZWF0dXJlIGV2ZW50c1xuICAgICAgICAgIHRoaXMuX29uRmVhdHVyZUFkZGVkID0gdGhpcy5fb25GZWF0dXJlQWRkZWQuYmluZCh0aGlzKTtcbiAgICAgICAgICB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkID0gdGhpcy5fb25GZWF0dXJlUmVtb3ZlZC5iaW5kKHRoaXMpO1xuXG4gICAgICAgICAgdGhpcy5faG9zdC5saXN0ZW5UbyhcbiAgICAgICAgICAgIEhvc3RPYmplY3QuRVZFTlRTLmFkZEZlYXR1cmUsXG4gICAgICAgICAgICB0aGlzLl9vbkZlYXR1cmVBZGRlZFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5faG9zdC5saXN0ZW5UbyhcbiAgICAgICAgICAgIEhvc3RPYmplY3QuRVZFTlRTLnJlbW92ZUZlYXR1cmUsXG4gICAgICAgICAgICB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIFJlZ2lzdGVyIGZlYXR1cmVzIHRoYXQgYWxyZWFkeSBleGlzdFxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTKS5mb3JFYWNoKHR5cGVOYW1lID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9ob3N0W3R5cGVOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRoaXMuX29uRmVhdHVyZUFkZGVkKHR5cGVOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTW3R5cGVOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVNbdHlwZU5hbWVdO1xuXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXZlbnRzKS5mb3JFYWNoKChbZXZlbnROYW1lLCBjYWxsYmFja10pID0+IHtcbiAgICAgICAgICAgIHRoaXNbY2FsbGJhY2tdID0gdGhpc1tjYWxsYmFja10uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX2hvc3QubGlzdGVuVG8oXG4gICAgICAgICAgICAgIHRoaXMuX2hvc3RbdHlwZU5hbWVdLkVWRU5UU1tldmVudE5hbWVdLFxuICAgICAgICAgICAgICB0aGlzW2NhbGxiYWNrXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSkge1xuICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVNbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0RFUEVOREVOQ0lFU1t0eXBlTmFtZV07XG5cbiAgICAgICAgICBPYmplY3QuZW50cmllcyhldmVudHMpLmZvckVhY2goKFtldmVudE5hbWUsIGNhbGxiYWNrXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nKFxuICAgICAgICAgICAgICB0aGlzLl9ob3N0W3R5cGVOYW1lXS5FVkVOVFNbZXZlbnROYW1lXSxcbiAgICAgICAgICAgICAgdGhpc1tjYWxsYmFja11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGlzY2FyZCgpIHtcbiAgICAgICAgLy8gU3RvcCBsaXN0ZW5pbmcgZm9yIGZlYXR1cmUgZXZlbnRzXG4gICAgICAgIHRoaXMuX2hvc3Quc3RvcExpc3RlbmluZyhcbiAgICAgICAgICBIb3N0T2JqZWN0LkVWRU5UUy5hZGRGZWF0dXJlLFxuICAgICAgICAgIHRoaXMuX29uRmVhdHVyZUFkZGVkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2hvc3Quc3RvcExpc3RlbmluZyhcbiAgICAgICAgICBIb3N0T2JqZWN0LkVWRU5UUy5yZW1vdmVGZWF0dXJlLFxuICAgICAgICAgIHRoaXMuX29uRmVhdHVyZVJlbW92ZWRcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBTdG9wIGxpc3RlbmluZyB0byBmZWF0dXJlLXNwZWNpZmljIGV2ZW50c1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0RFUEVOREVOQ0lFUykuZm9yRWFjaCh0eXBlTmFtZSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2hvc3RbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX29uRmVhdHVyZVJlbW92ZWQodHlwZU5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3VwZXIuZGlzY2FyZCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBFVkVOVF9ERVBFTkRFTkNJRVMgPSBCYXNlQ2xhc3MuRVZFTlRfREVQRU5ERU5DSUVTIHx8IHt9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmVhdHVyZURlcGVuZGVudE1peGluLCB7XG4gICAgICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAuLi5FVkVOVF9ERVBFTkRFTkNJRVMsXG4gICAgICAgIH0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gRmVhdHVyZURlcGVuZGVudE1peGluO1xuICB9XG59XG5cbi8qKlxuICogRXZlbnQgZGVwZW5kZW5jaWVzIHNob3VsZCBmb2xsb3cgdGhlIHNpZ25hdHVyZTpcbiAqIHtcbiAqICBGZWF0dXJlTmFtZToge1xuICogICAgLy8gRXZlbnRzIHRoYXQgdGhlIGZlYXR1cmUgc2hvdWxkIHN0YXJ0L3N0b3AgbGlzdGVuaW5nIGZvciB3aGVuIGEgZmVhdHVyZVxuICogICAgLy8gb2YgdHlwZSBGZWF0dXJlTmFtZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGhvc3RcbiAqICAgIHtcbiAqICAgICAgZXZlbnROYW1lOiBjYWxsYmFja05hbWUsXG4gKiAgICAgIC4uLlxuICogICAgfSxcbiAqICB9XG4gKiB9XG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UsIHtcbiAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XG4gICAgdmFsdWU6IHt9LFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXG5pbXBvcnQgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBmcm9tICdjb3JlL0ZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UnO1xuXG4vKipcbiAqIENsYXNzIGZhY3RvcnkgaW50ZXJmYWNlIGZvciBmZWF0dXJlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlIEFuaW1hdGlvbkZlYXR1cmVcbiAqIGJlaW5nIHByZXNlbnQgb24gdGhlIGhvc3QuIExheWVyIGFuZCBhbmltYXRpb24gZXZlbnRzIHdpbGwgYXV0b21hdGljYWxseSBiZVxuICogbGlzdGVuZWQgZm9yIG9uY2UgYSBBbmltYXRpb25GZWF0dXJlIGlzIGFkZGVkIHRvIHRoZSBob3N0IGFuZCBzdG9wcGVkIG9uY2UgaXRcbiAqIGlzIHJlbW92ZWQuXG4gKlxuICogQGludGVyZmFjZVxuICogQGV4dGVuZHMgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZVxuICpcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMgLSBFdmVudHMgdGhhdCB0aGUgZmVhdHVyZSBzaG91bGQgc3RhcnQvc3RvcFxuICogbGlzdGVuaW5nIGZvciB3aGVuIGEgZmVhdHVyZSBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdC5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZSAtIEV2ZW50cyB0aGF0IGFyZVxuICogc3BlY2lmaWMgdG8gdGhlIEFuaW1hdGlvbkZlYXR1cmUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLmFkZExheWVyPSdfb25MYXllckFkZGVkJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIGFkZExheWVyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLnJlbW92ZUxheWVyPSdfb25MYXllclJlbW92ZWQnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgcmVtb3ZlTGF5ZXJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUucmVuYW1lTGF5ZXI9J19vbkxheWVyUmVuYW1lZCddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW5hbWVMYXllclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZS5hZGRBbmltYXRpb249J19vbkFuaW1hdGlvbkFkZGVkJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIGFkZEFuaW1hdGlvblxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZS5yZW1vdmVBbmltYXRpb249J19vbkFuaW1hdGlvblJlbW92ZWQnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgcmVtb3ZlQW5pbWF0aW9uXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLnJlbmFtZUFuaW1hdGlvbj0nX29uQW5pbWF0aW9uUmVuYW1lZCddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW5hbWVBbmltYXRpb25cbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqL1xuY2xhc3MgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBleHRlbmRzIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2Uge1xuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gbGF5ZXIgYWRkZWQgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCB3YXMgYWRkZWQuXG4gICAqL1xuICBfb25MYXllckFkZGVkKHtuYW1lfSkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gbGF5ZXIgcmVtb3ZlZCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IHdhcyByZW1vdmVkLlxuICAgKi9cbiAgX29uTGF5ZXJSZW1vdmVkKHtuYW1lfSkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gbGF5ZXIgcmVuYW1lZCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9sZE5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IHdhcyByZW5hbWVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lIG9mIHRoZSBsYXllci5cbiAgICovXG4gIF9vbkxheWVyUmVuYW1lZCh7b2xkTmFtZSwgbmV3TmFtZX0pIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVkIHdoZW4gYW5pbWF0aW9uIGFkZGVkIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBhbiBhbmltYXRpb24gd2FzIGFkZGVkIHRvLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBhZGRlZC5cbiAgICovXG4gIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIGFuaW1hdGlvbiByZW1vdmVkIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBhbiBhbmltYXRpb24gd2FzIHJlbW92ZWQgZnJvbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgcmVtb3ZlZC5cbiAgICovXG4gIF9vbkFuaW1hdGlvblJlbW92ZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVkIHdoZW4gYW5pbWF0aW9uIHJlbmFtZWQgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGFuIGFuaW1hdGlvbiBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZW5hbWVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lIG9mIHRoZSBhbmltYXRpb24uXG4gICAqL1xuICBfb25BbmltYXRpb25SZW5hbWVkKHtsYXllck5hbWUsIG9sZE5hbWUsIG5ld05hbWV9KSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlfVxuICAgKiBhbmQgZXh0ZW5kcyBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBCYXNlQ2xhc3MgLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9LlxuICAgKi9cbiAgc3RhdGljIE1peGluKEJhc2VDbGFzcykge1xuICAgIGNvbnN0IFBhcmVudENsYXNzID0gRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbihCYXNlQ2xhc3MpO1xuICAgIGNvbnN0IEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbiA9IGNsYXNzIGV4dGVuZHMgUGFyZW50Q2xhc3Mge1xuICAgICAgX29uTGF5ZXJBZGRlZCh7bmFtZX0pIHt9XG5cbiAgICAgIF9vbkxheWVyUmVtb3ZlZCh7bmFtZX0pIHt9XG5cbiAgICAgIF9vbkxheWVyUmVuYW1lZCh7b2xkTmFtZSwgbmV3TmFtZX0pIHt9XG5cbiAgICAgIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7fVxuXG4gICAgICBfb25BbmltYXRpb25SZW1vdmVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7fVxuXG4gICAgICBfb25BbmltYXRpb25SZW5hbWVkKHtsYXllck5hbWUsIG9sZE5hbWUsIG5ld05hbWV9KSB7fVxuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50TWl4aW4sIHtcbiAgICAgIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIC4uLlBhcmVudENsYXNzLkVWRU5UX0RFUEVOREVOQ0lFUyxcbiAgICAgICAgICAuLi5BbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLkVWRU5UX0RFUEVOREVOQ0lFUyxcbiAgICAgICAgfSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50TWl4aW47XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSwge1xuICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcbiAgICB2YWx1ZToge1xuICAgICAgQW5pbWF0aW9uRmVhdHVyZToge1xuICAgICAgICBhZGRMYXllcjogJ19vbkxheWVyQWRkZWQnLFxuICAgICAgICByZW1vdmVMYXllcjogJ19vbkxheWVyUmVtb3ZlZCcsXG4gICAgICAgIHJlbmFtZUxheWVyOiAnX29uTGF5ZXJSZW5hbWVkJyxcbiAgICAgICAgYWRkQW5pbWF0aW9uOiAnX29uQW5pbWF0aW9uQWRkZWQnLFxuICAgICAgICByZW1vdmVBbmltYXRpb246ICdfb25BbmltYXRpb25SZW1vdmVkJyxcbiAgICAgICAgcmVuYW1lQW5pbWF0aW9uOiAnX29uQW5pbWF0aW9uUmVuYW1lZCcsXG4gICAgICB9LFxuICAgIH0sXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2U7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbmltcG9ydCBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJ2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSc7XG5cbi8qKlxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIHRoYXQga2VlcHMgdHJhY2sgb2YgbGF5ZXJzIGFuZCBhbmltYXRpb25zIG9uIGEgaG9zdC5cbiAqIFRyYWNrZWQgYXNzZXRzIGFyZSBtYXJrZWQgYXMgaW5hY3RpdmUgdW50aWwgbGF5ZXJzIGFuZCBhbmltYXRpb25zIHdpdGggbWF0Y2hpbmdcbiAqIG5hbWVzIGFyZSBkZXRlY3RlZCBhcyBwcmVzZW50IG9uIHRoZSBob3N0LlxuICpcbiAqIEBpbnRlcmZhY2VcbiAqIEBleHRlbmRzIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2VcbiAqXG4gKiBAcHJvcGVydHkge09iamVjdH0gREVGQVVMVF9MQVlFUl9PUFRJT05TIC0gRGVmYXVsdCBvcHRpb25zIHRvIHVzZSB3aGVuIGV4ZWN1dGluZ1xuICoge0BsaW5rIEFuaW1hdGlvbkxheWVyfSBtZXRob2RzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lPTAuNV0gLSBEZWZhdWx0IHRpbWUgaW4gc2Vjb25kc1xuICogdG8gdXNlIHdoZW4gZXhlY3V0aW5nIHtAbGluayBBbmltYXRpb25MYXllci5zZXRCbGVuZFdlaWdodH0uXG4gKiBAcHJvcGVydHkge09iamVjdH0gW0RFRkFVTFRfTEFZRVJfT1BUSU9OUy5hbmltYXRpb25zPXt9XSAtIE1hcHMgYW5pbWF0aW9uIG5hbWVzXG4gKiB0byBkZWZhdWx0IG9wdGlvbnMgb2JqZWN0cyB0byB1c2UgZm9yIG1hbmFnZWQgYW5pbWF0aW9ucy5cbiAqL1xuY2xhc3MgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlIGV4dGVuZHMgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XG4gIC8qKlxuICAgKiBTdGFydCB0cmFja2luZyBrZWVwaW5nIHRyYWNrIG9mIHdoZXRoZXIgYSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzIHByZXNlbnRcbiAgICogb24gdGhlIGhvc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8ga2VlcCB0cmFjayBvZi5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge251bWJlcj19IG9wdGlvbnMuYmxlbmRUaW1lIC0gRGVmYXVsdCBhbW91bnQgb2YgdGltZSB0byB1c2Ugd2hlblxuICAgKiBtYW5pcHVsYXRpbmcgbGF5ZXIgd2VpZ2h0cyBvbiB0aGlzIGxheWVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXG4gICAqIG1hbmlwdWxhdGluZyBsYXllciB3ZWlnaHRzIG9uIHRoaXMgbGF5ZXIuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5hbmltYXRpb25zIC0gQW5pbWF0aW9ucyB0byBrZWVwIHRyYWNrIG9mIG9uIHRoZSBsYXllci5cbiAgICogQW5pbWF0aW9ucyBhcmUgcmVwcmVzZW50ZWQgYXMga2V5L3ZhbHVlIHBhaXJzIG9mIGFuaW1hdGlvbiBuYW1lcyBhbmQgdGhlaXJcbiAgICogb3B0aW9ucy5cbiAgICovXG4gIHJlZ2lzdGVyTGF5ZXIobmFtZSwgb3B0aW9ucyA9IHt9KSB7fVxuXG4gIC8qKlxuICAgKiBTdGFydCB0cmFja2luZyBrZWVwaW5nIHRyYWNrIG9mIHdoZXRoZXIgYW4gYW5pbWF0aW9uIHdpdGggdGhlIGdpdmVuIG5hbWUgaXNcbiAgICogcHJlc2VudCBvbiB0aGUgaG9zdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2lsbCBvd24gdGhlIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8ga2VlcCB0cmFjayBvZi5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGFuaW1hdGlvbi5cbiAgICovXG4gIHJlZ2lzdGVyQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9ucyA9IHt9KSB7fVxuXG4gIC8qKlxuICAgKiBTZXQgbGF5ZXIgd2VpZ2h0cyBvbiB0cmFja2VkIGxheWVycy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG5hbWVGaWx0ZXIgLSBQcmVkaWNhdGUgZnVuY3Rpb24gdG8gdGVzdCBlYWNoIHRyYWNrZWQgbGF5ZXJcbiAgICogd2l0aC4gQnkgZGVmYXVsdCBhbGwgbGF5ZXJzIHdpbGwgcGFzcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFdlaWdodCB2YWx1ZSB0byBzZXQgb24gbGF5ZXJzLlxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlIHdlaWdodFxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBibGVuZFRpbWUgb3B0aW9uIGlzIHVzZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlbiBzZXR0aW5nIHdlaWdodFxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBlYXNpbmdGbiBvcHRpb24gaXMgdXNlZC5cbiAgICovXG4gIHNldExheWVyV2VpZ2h0cyhuYW1lRmlsdGVyID0gKCkgPT4gdHJ1ZSwgd2VpZ2h0LCBzZWNvbmRzLCBlYXNpbmdGbikge31cblxuICAvKipcbiAgICogU2V0IGFsbCB0cmFja2VkIGxheWVycycgd2VpZ2h0cyB0byAxLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlIHdlaWdodFxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBibGVuZFRpbWUgb3B0aW9uIGlzIHVzZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlbiBzZXR0aW5nIHdlaWdodFxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBlYXNpbmdGbiBvcHRpb24gaXMgdXNlZC5cbiAgICovXG4gIGVuYWJsZShzZWNvbmRzLCBlYXNpbmdGbikge31cblxuICAvKipcbiAgICogU2V0IGFsbCB0cmFja2VkIGxheWVycycgd2VpZ2h0cyB0byAwLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlIHdlaWdodFxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBibGVuZFRpbWUgb3B0aW9uIGlzIHVzZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlbiBzZXR0aW5nIHdlaWdodFxuICAgKiBvbiBlYWNoIGxheWVyLiBJZiB1bmRlZmluZWQsIGVhY2ggbGF5ZXJzJyBlYXNpbmdGbiBvcHRpb24gaXMgdXNlZC5cbiAgICovXG4gIGRpc2FibGUoc2Vjb25kcywgZWFzaW5nRm4pIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZX1cbiAgICogYW5kIGV4dGVuZHMgYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtDbGFzc30gQmFzZUNsYXNzIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAgICpcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2V9LlxuICAgKi9cbiAgc3RhdGljIE1peGluKEJhc2VDbGFzcykge1xuICAgIGNvbnN0IFBhcmVudENsYXNzID0gQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbihCYXNlQ2xhc3MpO1xuICAgIGNvbnN0IE1hbmFnZWRBbmltYXRpb25MYXllck1peGluID0gY2xhc3MgZXh0ZW5kcyBQYXJlbnRDbGFzcyB7XG4gICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuXG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgX29uRmVhdHVyZUFkZGVkKHR5cGVOYW1lKSB7XG4gICAgICAgIHN1cGVyLl9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSk7XG5cbiAgICAgICAgaWYgKHR5cGVOYW1lICE9PSAnQW5pbWF0aW9uRmVhdHVyZScpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzID0gdGhpcy5fbWFuYWdlZExheWVycyB8fCB7fTtcblxuICAgICAgICAvLyBEZXRlY3QgbmV3IGxheWVyc1xuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUubGF5ZXJzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgdGhpcy5fb25MYXllckFkZGVkKHtuYW1lfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBfb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSkge1xuICAgICAgICBzdXBlci5fb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSk7XG5cbiAgICAgICAgaWYgKHR5cGVOYW1lICE9PSAnQW5pbWF0aW9uRmVhdHVyZScpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzID0gdGhpcy5fbWFuYWdlZExheWVycyB8fCB7fTtcblxuICAgICAgICAvLyBEZWFjdGl2YXRlIHRoZSBsYXllcnNcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5fbWFuYWdlZExheWVycykuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICB0aGlzLl9vbkxheWVyUmVtb3ZlZCh7bmFtZX0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgX29uTGF5ZXJBZGRlZCh7bmFtZX0pIHtcbiAgICAgICAgLy8gTWFyayB0aGUgbGF5ZXIgYXMgYWN0aXZlIGlmIGl0IGlzIG1hbmFnZWRcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uaXNBY3RpdmUgPSB0cnVlO1xuXG4gICAgICAgICAgLy8gRGV0ZWN0IG5ldyBhbmltYXRpb25zXG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbnMobmFtZSkuZm9yRWFjaChhbmltTmFtZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWU6IG5hbWUsIGFuaW1hdGlvbk5hbWU6IGFuaW1OYW1lfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX29uTGF5ZXJSZW1vdmVkKHtuYW1lfSkge1xuICAgICAgICAvLyBEZWFjdGl2YXRlIHRoZSBsYXllciBpZiBpdCBpcyBtYW5hZ2VkXG4gICAgICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdLmlzQWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgICAvLyBEZWFjdGl2YXRlIHRoZSBhbmltYXRpb25zXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5hbmltYXRpb25zKS5mb3JFYWNoKFxuICAgICAgICAgICAgYW5pbU5hbWUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9vbkFuaW1hdGlvblJlbW92ZWQoe1xuICAgICAgICAgICAgICAgIGxheWVyTmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICBhbmltYXRpb25OYW1lOiBhbmltTmFtZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25MYXllclJlbmFtZWQoe29sZE5hbWUsIG5ld05hbWV9KSB7XG4gICAgICAgIGNvbnN0IGxheWVyT3B0aW9ucyA9IHRoaXMuX21hbmFnZWRMYXllcnNbb2xkTmFtZV07XG5cbiAgICAgICAgLy8gUmVwbGFjZSB0aGUgbGF5ZXIga2V5IHdpdGggdGhlIG5ldyBuYW1lXG4gICAgICAgIGlmIChsYXllck9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW29sZE5hbWVdO1xuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbmV3TmFtZV0gPSBsYXllck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHtcbiAgICAgICAgLy8gTWFyayB0aGUgYW5pbWF0aW9uIGFzIGFjdGl2ZSBpZiBpdCBpcyBtYW5hZ2VkXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgICAgXS5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX29uQW5pbWF0aW9uUmVtb3ZlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge1xuICAgICAgICAvLyBEZWFjdGl2YXRlIHRoZSBhbmltYXRpb24gaWYgaXQgaXMgbWFuYWdlZFxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW1xuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICAgIF0uaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25BbmltYXRpb25SZW5hbWVkKHtsYXllck5hbWUsIG9sZE5hbWUsIG5ld05hbWV9KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW29sZE5hbWVdICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gUmVwbGFjZSB0aGUgYW5pbWF0aW9uIGtleSB3aXRoIHRoZSBuZXcgbmFtZVxuICAgICAgICAgIGNvbnN0IGFuaW1PcHRpb25zID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgICAgICBvbGROYW1lXG4gICAgICAgICAgXTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbb2xkTmFtZV07XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbbmV3TmFtZV0gPSBhbmltT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZWdpc3RlckxheWVyKG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBTdGFydCB3aXRoIGRlZmF1bHQgb3B0aW9ucyBmb3IgZWFjaCBuZXcgbGF5ZXJcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0gPSB7XG4gICAgICAgICAgICAuLi50aGlzLmNvbnN0cnVjdG9yLkRFRkFVTFRfTEFZRVJfT1BUSU9OUyxcbiAgICAgICAgICAgIGFuaW1hdGlvbnM6IHt9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgYWxsIG9wdGlvbnMgZXhjZXB0IGFuaW1hdGlvbnNcbiAgICAgICAgY29uc3QgbGF5ZXJPcHRpb25zID0gdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXTtcbiAgICAgICAgb3B0aW9ucyA9IHsuLi5vcHRpb25zfTtcbiAgICAgICAgY29uc3QgYW5pbWF0aW9uT3B0aW9ucyA9IG9wdGlvbnMuYW5pbWF0aW9ucyB8fCB7fTtcbiAgICAgICAgZGVsZXRlIG9wdGlvbnMuYW5pbWF0aW9ucztcbiAgICAgICAgT2JqZWN0LmFzc2lnbihsYXllck9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGxheWVyIGNhbiBiZSBtYW5pcHVsYXRlZCBub3dcbiAgICAgICAgbGF5ZXJPcHRpb25zLmlzQWN0aXZlID1cbiAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5sYXllcnMuaW5jbHVkZXMobmFtZSk7XG5cbiAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoYW5pbWF0aW9uT3B0aW9ucykuZm9yRWFjaCgoW2FuaW1OYW1lLCBhbmltT3B0aW9uc10pID0+IHtcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyQW5pbWF0aW9uKG5hbWUsIGFuaW1OYW1lLCBhbmltT3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICAvLyBSZWdpc3RlciB0aGUgbGF5ZXIgaWYgaXQgaGFzbid0IGJlZW4gcmVnaXN0ZXJlZCB5ZXRcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5yZWdpc3RlckxheWVyKGxheWVyTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgYW5pbWF0aW9uIG9wdGlvbnNcbiAgICAgICAgY29uc3QgYW5pbU9wdGlvbnMgPVxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdIHx8IHt9O1xuICAgICAgICBPYmplY3QuYXNzaWduKGFuaW1PcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0gPSBhbmltT3B0aW9ucztcblxuICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBhbmltYXRpb24gY2FuIGJlIG1hbmlwdWxhdGVkIG5vd1xuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXS5pc0FjdGl2ZSA9XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmlzQWN0aXZlICYmXG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbnMobGF5ZXJOYW1lKS5pbmNsdWRlcyhcbiAgICAgICAgICAgIGFuaW1hdGlvbk5hbWVcbiAgICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzZXRMYXllcldlaWdodHMobmFtZUZpbHRlciA9ICgpID0+IHRydWUsIHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pIHtcbiAgICAgICAgY29uc3QgbGF5ZXJOYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuX21hbmFnZWRMYXllcnMpLmZpbHRlcihuYW1lRmlsdGVyKTtcblxuICAgICAgICBsYXllck5hbWVzLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgY29uc3QgbGF5ZXJPcHRpb25zID0gdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXTtcblxuICAgICAgICAgIGlmIChsYXllck9wdGlvbnMuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRMYXllcldlaWdodChcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgd2VpZ2h0LFxuICAgICAgICAgICAgICBzZWNvbmRzICE9PSB1bmRlZmluZWQgPyBzZWNvbmRzIDogbGF5ZXJPcHRpb25zLmJsZW5kVGltZSxcbiAgICAgICAgICAgICAgZWFzaW5nRm4gfHwgbGF5ZXJPcHRpb25zLmVhc2luZ0ZuXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGVuYWJsZShzZWNvbmRzLCBlYXNpbmdGbikge1xuICAgICAgICB0aGlzLnNldExheWVyV2VpZ2h0cyh1bmRlZmluZWQsIDEsIHNlY29uZHMsIGVhc2luZ0ZuKTtcbiAgICAgIH1cblxuICAgICAgZGlzYWJsZShzZWNvbmRzLCBlYXNpbmdGbikge1xuICAgICAgICB0aGlzLnNldExheWVyV2VpZ2h0cyh1bmRlZmluZWQsIDAsIHNlY29uZHMsIGVhc2luZ0ZuKTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFsbEFwaSgpIHtcbiAgICAgICAgY29uc3QgYXBpID0gc3VwZXIuaW5zdGFsbEFwaSgpO1xuXG4gICAgICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XG4gICAgICAgICAgcmVnaXN0ZXJMYXllcjogdGhpcy5yZWdpc3RlckxheWVyLmJpbmQodGhpcyksXG4gICAgICAgICAgcmVnaXN0ZXJBbmltYXRpb246IHRoaXMucmVnaXN0ZXJBbmltYXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgICBzZXRMYXllcldlaWdodHM6IHRoaXMuc2V0TGF5ZXJXZWlnaHRzLmJpbmQodGhpcyksXG4gICAgICAgICAgZW5hYmxlOiB0aGlzLmVuYWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICAgIGRpc2FibGU6IHRoaXMuZGlzYWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYXBpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJNaXhpbiwge1xuICAgICAgREVGQVVMVF9MQVlFUl9PUFRJT05TOiB7XG4gICAgICAgIHZhbHVlOiBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuREVGQVVMVF9MQVlFUl9PUFRJT05TLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIE1hbmFnZWRBbmltYXRpb25MYXllck1peGluO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSwge1xuICBERUZBVUxUX0xBWUVSX09QVElPTlM6IHtcbiAgICB2YWx1ZToge2JsZW5kVGltZTogMC41LCBhbmltYXRpb25zOiB7fX0sXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXG5pbXBvcnQgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBmcm9tICdjb3JlL0ZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UnO1xuXG4vKipcbiAqIENsYXNzIGZhY3RvcnkgaW50ZXJmYWNlIGZvciBmZWF0dXJlcyB0aGF0IGFyZSBkZXBlbmRlbnQgb24gdGhlIFRleHRUb1NwZWVjaEZlYXR1cmVcbiAqIGJlaW5nIHByZXNlbnQgb24gdGhlIGhvc3QuIFNwZWVjaCBldmVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGxpc3RlbmVkIGZvciBvbmNlIGFcbiAqIFRleHRUb1NwZWVjaEZlYXR1cmUgaXMgYWRkZWQgdG8gdGhlIGhvc3QgYW5kIHN0b3BwZWQgb25jZSBpdCBpcyByZW1vdmVkLlxuICpcbiAqIEBpbnRlcmZhY2VcbiAqIEBleHRlbmRzIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2VcbiAqXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRfREVQRU5ERU5DSUVTIC0gRXZlbnRzIHRoYXQgdGhlIGZlYXR1cmUgc2hvdWxkIHN0YXJ0L3N0b3BcbiAqIGxpc3RlbmluZyBmb3Igd2hlbiBhIGZlYXR1cmUgb2YgdHlwZSBGZWF0dXJlTmFtZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGhvc3QuXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUgLSBFdmVudHMgdGhhdCBhcmVcbiAqIHNwZWNpZmljIHRvIHRoZSBUZXh0VG9TcGVlY2hGZWF0dXJlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5wbGF5PSdfb25QbGF5J10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHBsYXlcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUucGF1c2U9J19vblBhdXNlJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHBhdXNlXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnJlc3VtZT0nX29uUmVzdW1lJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHJlc3VtZVxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5zdG9wPSdfb25TdG9wJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHN0b3BcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUuc2VudGVuY2U9J19vblNlbnRlbmNlJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHNlbnRlbmNlXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLndvcmQ9J19vbldvcmQnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgd29yZFxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS52aXNlbWU9J19vblZpc2VtZSddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSB2aXNlbWVcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUuc3NtbD0nX29uU3NtbCddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSBzc21sXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKi9cbmNsYXNzIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZXh0ZW5kcyBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIEV4ZWN1dGVkIHdoZW4gc3BlZWNoIHBsYXkgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25QbGF5KCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggcGF1c2UgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25QYXVzZSgpIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVkIHdoZW4gc3BlZWNoIHJlc3VtZSBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblJlc3VtZSgpIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVkIHdoZW4gc3BlZWNoIHN0b3AgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25TdG9wKCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggc2VudGVuY2UgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25TZW50ZW5jZSgpIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVkIHdoZW4gc3BlZWNoIHdvcmQgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25Xb3JkKCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggdmlzZW1lIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uVmlzZW1lKCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggc3NtbCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblNzbWwoKSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlfVxuICAgKiBhbmQgZXh0ZW5kcyBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBCYXNlQ2xhc3MgLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9LlxuICAgKi9cbiAgc3RhdGljIE1peGluKEJhc2VDbGFzcykge1xuICAgIGNvbnN0IFBhcmVudENsYXNzID0gRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbihCYXNlQ2xhc3MpO1xuICAgIGNvbnN0IFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRNaXhpbiA9IGNsYXNzIGV4dGVuZHMgUGFyZW50Q2xhc3Mge1xuICAgICAgX29uUGxheSgpIHt9XG5cbiAgICAgIF9vblBhdXNlKCkge31cblxuICAgICAgX29uUmVzdW1lKCkge31cblxuICAgICAgX29uU3RvcCgpIHt9XG5cbiAgICAgIF9vblNlbnRlbmNlKCkge31cblxuICAgICAgX29uV29yZCgpIHt9XG5cbiAgICAgIF9vblZpc2VtZSgpIHt9XG5cbiAgICAgIF9vblNzbWwoKSB7fVxuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50TWl4aW4sIHtcbiAgICAgIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIC4uLlBhcmVudENsYXNzLkVWRU5UX0RFUEVOREVOQ0lFUyxcbiAgICAgICAgICAuLi5UZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLkVWRU5UX0RFUEVOREVOQ0lFUyxcbiAgICAgICAgfSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50TWl4aW47XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSwge1xuICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcbiAgICB2YWx1ZToge1xuICAgICAgVGV4dFRvU3BlZWNoRmVhdHVyZToge1xuICAgICAgICBwbGF5OiAnX29uUGxheScsXG4gICAgICAgIHBhdXNlOiAnX29uUGF1c2UnLFxuICAgICAgICByZXN1bWU6ICdfb25SZXN1bWUnLFxuICAgICAgICBzdG9wOiAnX29uU3RvcCcsXG4gICAgICAgIHNlbnRlbmNlOiAnX29uU2VudGVuY2UnLFxuICAgICAgICB3b3JkOiAnX29uV29yZCcsXG4gICAgICAgIHZpc2VtZTogJ19vblZpc2VtZScsXG4gICAgICAgIHNzbWw6ICdfb25Tc21sJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJy4vTWF0aFV0aWxzJztcbmltcG9ydCB7UXVhZHJhdGljfSBmcm9tICcuL2FuaW1wYWNrL0Vhc2luZyc7XG5pbXBvcnQgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlIGZyb20gJy4vYW5pbXBhY2svTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlJztcbmltcG9ydCBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJy4vYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlJztcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJy4vQWJzdHJhY3RIb3N0RmVhdHVyZSc7XG5cbi8qKlxuICogRGVmYXVsdCBtYXBwaW5nIG9mIFBvbGx5IHZpc2VtZSBuYW1lcyB0byBhbmltYXRpb24gb3B0aW9ucyBvYmplY3RzLlxuICpcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbc2lsPXtuYW1lOiAnc2lsJ31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3A9e25hbWU6ICdwJywgb3ZlcnJpZGVXZWlnaHQ6IDAuOX1dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3Q9e25hbWU6ICd0JywgYmxlbmRUaW1lOiAwLjJ9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtTPXtuYW1lOiAnUyd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtUPXtuYW1lOiAnVCd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtmPXtuYW1lOiAnZicsIG92ZXJyaWRlV2VpZ2h0OiAwLjc1fV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbaz17bmFtZTogJ2snfV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbaT17bmFtZTogJ2knfV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcj17bmFtZTogJ3InfV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcz17bmFtZTogJ3MnLCBibGVuZFRpbWU6IDAuMjV9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFt1PXtuYW1lOiAndSd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtAPXtuYW1lOiAnQCd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFthPXtuYW1lOiAnYSd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtlPXtuYW1lOiAnZScsIGJsZW5kVGltZTogMC4yfV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbRT17bmFtZTogJ0UnfV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbbz17bmFtZTogJ28nfV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbTz17bmFtZTogJ08nfV1cbiAqL1xuY29uc3QgRGVmYXVsdFZpc2VtZU1hcCA9IHtcbiAgc2lsOiB7bmFtZTogJ3NpbCd9LFxuICBwOiB7bmFtZTogJ3AnLCBvdmVycmlkZVdlaWdodDogMC45fSxcbiAgdDoge25hbWU6ICd0JywgYmxlbmRUaW1lOiAwLjJ9LFxuICBTOiB7bmFtZTogJ1MnfSxcbiAgVDoge25hbWU6ICdUJ30sXG4gIGY6IHtuYW1lOiAnZicsIG92ZXJyaWRlV2VpZ2h0OiAwLjc1fSxcbiAgazoge25hbWU6ICdrJ30sXG4gIGk6IHtuYW1lOiAnaSd9LFxuICByOiB7bmFtZTogJ3InfSxcbiAgczoge25hbWU6ICdzJywgYmxlbmRUaW1lOiAwLjI1fSxcbiAgdToge25hbWU6ICd1J30sXG4gICdAJzoge25hbWU6ICdAJ30sXG4gIGE6IHtuYW1lOiAnYSd9LFxuICBlOiB7bmFtZTogJ2UnLCBibGVuZFRpbWU6IDAuMn0sXG4gIEU6IHtuYW1lOiAnRSd9LFxuICBvOiB7bmFtZTogJ28nfSxcbiAgTzoge25hbWU6ICdPJ30sXG59O1xuXG4vKipcbiAqIExpcHN5bmMgY29udHJvbHMgdHdvIHR5cGVzIG9mIG1vdmVtZW50OiBpZGxlIGFuaW1hdGlvbiB0aGF0IHNob3VsZCBwbGF5IHdoaWxlXG4gKiBzcGVlY2ggaXMgcGxheWluZyBhbmQgdmlzZW1lIGFuaW1hdGlvbnMgY29ycmVzcG9uZGluZyB0byBQb2xseSB2aXNlbWVzIHdob3NlXG4gKiB3ZWlnaHRzIHNob3VsZCBiZSB0dXJuZWQgb24gYW5kIG9mZiBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZCBpbiB0aGUgUG9sbHkgU1NNTFxuICogdHJhbnNjcmlwdC4gTGF5ZXJzIG93bmVkIGJ5IHRoaXMgZmVhdHVyZSB3aWxsIGJlIGVuYWJsZWQgd2hpbGUgc3BlZWNoIGlzIHBsYXlpbmdcbiAqIGFuZCBkaXNhYmxlZCBvbmNlIGl0IHN0b3BzLlxuICpcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcbiAqIEBhbGlhcyBjb3JlL0xpcHN5bmNGZWF0dXJlXG4gKiBAaW1wbGVtZW50cyBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlXG4gKiBAaW1wbGVtZW50cyBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2VcbiAqL1xuY2xhc3MgTGlwc3luY0ZlYXR1cmUgZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlLm1peChcbiAgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5NaXhpbixcbiAgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLk1peGluXG4pIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IHZpc2VtZU9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgdmlzZW1lIGxheWVycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt2aXNlbWVPcHRpb25zLmJsZW5kVGltZT0wLjE1XSAtIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgaXRcbiAgICogd2lsbCB0YWtlIHRvIG1hbmlwdWxhdGUgZWFjaCBmcmVlQmxlbmQgd2VpZ2h0IG9uIHRoZSB2aXNlbWUgc3RhdGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW3Zpc2VtZU9wdGlvbnMuZGVjYXlSYXRlPXthbW91bnQ6IC41LCBzZWNvbmRzOiAuNX1dIC0gQW4gb2JqZWN0XG4gICAqIGRlc2NyaWJpbmcgdGhlIDAtMSBmYWN0b3IgdmlzZW1lIHdlaWdodCB3aWxsIGRlY2F5IGlmIHRoZSB2aXNlbWUgZHVyYXRpb24gaXNcbiAgICogbG9uZ2VyIHRoYW4gdGhlIGJsZW5kVGltZSBhbmQgdGhlIG51bWJlciBvZiBzZWNvbmRzIGl0IHdvdWxkIHRha2UgdG8gZGVjYXlcbiAgICogYnkgdGhhdCBmYWN0b3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdmlzZW1lT3B0aW9ucy5lYXNpbmdGbj1RdWFkcmF0aWMuSW5PdXRdIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb25cbiAgICogdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIHZpc2VtZSBmcmVlQmxlbmQgd2VpZ2h0cy5cbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW3Zpc2VtZU9wdGlvbnMuLmxheWVycz1bXV0gLSBBbiBhcnJheSBvZiBsYXllciBvcHRpb25zXG4gICAqIG9iamVjdHMgdG8gcmVnaXN0ZXIgYXMgdmlzZW1lIGxheWVycy5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSB0YWxraW5nT3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSB0YWxraW5nIGxheWVycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt0YWxraW5nT3B0aW9ucy5ibGVuZFRpbWU9MC43NV0gLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvXG4gICAqIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgdGFsa2luZyBpZGxlIGxheWVyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gW3RhbGtpbmdPcHRpb25zLmVhc2luZ0ZuPVF1YWRyYXRpYy5Jbk91dF0gLSBEZWZhdWx0IGVhc2luZ1xuICAgKiBmdW5jdGlvbiB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgd2VpZ2h0cyBvbiB0aGUgdGFsa2luZyBpZGxlIGxheWVycy5cbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW3RhbGtpbmdPcHRpb25zLmxheWVycz1bXV0gLSBBbiBhcnJheSBvZiBsYXllciBvcHRpb25zXG4gICAqIG9iamVjdHMgdG8gcmVnaXN0ZXIgYXMgdGFsa2luZyBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdmlzZW1lTGVhZFRpbWU9LjA2N10gLSBUaGUgYW1vdW50IG9mIHRpbWUgdG8gaW5zdHJ1Y3QgdGhlXG4gICAqIFRleHRUb1NwZWVjaEZlYXR1cmUgdG8gZW1pdCBzcGVlY2htYXJrcyBiZWZvcmUgZWFjaCBvbmUncyBhY3R1YWwgdGltZXN0YW1wXG4gICAqIGlzIHJlYWNoZWQuIFRoaXMgd2lsbCBzZXQgdGhlICdzcGVlY2hNYXJrT2Zmc2V0JyB2YXJpYWJsZSBvbiB0aGUgVGV4dFRvU3BlZWNoRmVhdHVyZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGhvc3QsXG4gICAge1xuICAgICAgYmxlbmRUaW1lOiB2aXNlbWVCbGVuZFRpbWUgPSAwLjE1LFxuICAgICAgZGVjYXlSYXRlOiB7YW1vdW50ID0gMC41LCBzZWNvbmRzID0gMC41fSA9IHt9LFxuICAgICAgZWFzaW5nRm46IHZpc2VtZUVhc2luZ0ZuID0gUXVhZHJhdGljLkluT3V0LFxuICAgICAgbGF5ZXJzOiB2aXNlbWVMYXllcnMgPSBbXSxcbiAgICB9ID0ge30sXG4gICAge1xuICAgICAgYmxlbmRUaW1lOiB0YWxraW5nQmxlbmRUaW1lID0gMC43NSxcbiAgICAgIGVhc2luZ0ZuOiB0YWxraW5nRWFzaW5nRm4gPSBRdWFkcmF0aWMuSW5PdXQsXG4gICAgICBsYXllcnM6IHRhbGtpbmdMYXllcnMgPSBbXSxcbiAgICB9ID0ge30sXG4gICAgdmlzZW1lTGVhZFRpbWUgPSAwLjA2N1xuICApIHtcbiAgICBzdXBlcihob3N0KTtcblxuICAgIHRoaXMuX3Zpc2VtZUxheWVycyA9IHt9O1xuICAgIHRoaXMuX3RhbGtpbmdMYXllcnMgPSB7fTtcbiAgICB0aGlzLnZpc2VtZUxlYWRUaW1lID0gdmlzZW1lTGVhZFRpbWU7XG5cbiAgICAvLyBSZWdpc3RlciB0aGUgdmlzZW1lIGxheWVyc1xuICAgIHZpc2VtZUxheWVycy5mb3JFYWNoKCh7bmFtZSwgYW5pbWF0aW9uLCB2aXNlbWVNYXAgPSBEZWZhdWx0VmlzZW1lTWFwfSkgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlclZpc2VtZUxheWVyKG5hbWUsIHtcbiAgICAgICAgYW5pbWF0aW9uLFxuICAgICAgICB2aXNlbWVNYXAsXG4gICAgICAgIGRlY2F5UmF0ZToge2Ftb3VudCwgc2Vjb25kc30sXG4gICAgICAgIGJsZW5kVGltZTogdmlzZW1lQmxlbmRUaW1lLFxuICAgICAgICBlYXNpbmdGbjogdmlzZW1lRWFzaW5nRm4sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSB0YWxraW5nIGxheWVyc1xuICAgIHRhbGtpbmdMYXllcnMuZm9yRWFjaCgoe25hbWUsIGFuaW1hdGlvbn0pID0+IHtcbiAgICAgIHRoaXMucmVnaXN0ZXJUYWxraW5nTGF5ZXIobmFtZSwge1xuICAgICAgICBhbmltYXRpb24sXG4gICAgICAgIGJsZW5kVGltZTogdGFsa2luZ0JsZW5kVGltZSxcbiAgICAgICAgZWFzaW5nRm46IHRhbGtpbmdFYXNpbmdGbixcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSB0aGF0IHJlZ2lzdGVyZWQgdmlzZW1lIGFuaW1hdGlvbnMgYXJlIEZyZWVCbGVuZFN0YXRlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIHZpc2VtZSBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uLlxuICAgKi9cbiAgX3JlZ2lzdGVyVmlzZW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xuICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXS5pc0FjdGl2ZSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9uVHlwZShcbiAgICAgICAgICBsYXllck5hbWUsXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICApICE9PSAnZnJlZUJsZW5kJ1xuICAgICAgKSB7XG4gICAgICAgIC8vIFdhcm4gYW5kIGRlYWN0aXZhdGUgaWYgdGhlIHJlZ2lzdGVyZWQgc3RhdGUgaXMgbm90IGZyZWVCbGVuZFxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYENhbm5vdCByZWdpc3RlciBMaXBzeW5jIHZpc2VtZSBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gVmlzZW1lIGFuaW1hdGlvbnMgbXVzdCBiZSBvZiB0eXBlICdmcmVlQmxlbmQnLmBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICBdLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgYmxlbmRXZWlnaHRzIGNhbiBiZSBtYW5pcHVsYXRlZCBub3dcbiAgICAgICAgY29uc3Qgd2VpZ2h0TmFtZXMgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9uQmxlbmROYW1lcyhcbiAgICAgICAgICBsYXllck5hbWUsXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCB7dmlzZW1lTWFwfSA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW1xuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcbiAgICAgICAgXTtcblxuICAgICAgICBPYmplY3QudmFsdWVzKHZpc2VtZU1hcCkuZm9yRWFjaCh2aXNlbWVPcHRpb25zID0+IHtcbiAgICAgICAgICB2aXNlbWVPcHRpb25zLmlzQWN0aXZlID0gd2VpZ2h0TmFtZXMuaW5jbHVkZXModmlzZW1lT3B0aW9ucy5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBhZGRlZCBmZWF0dXJlIGlzIFRleHRUb1NwZWVjaCwgdXBkYXRlIGl0cyBzcGVlY2hNYXJrT2Zmc2V0IHZhcmlhYmxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUgLSBOYW1lIG9mIHRoZSB0eXBlIG9mIGZlYXR1cmUgdGhhdCB3YXMgYWRkZWQuXG4gICAqL1xuICBfb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpIHtcbiAgICB0aGlzLl92aXNlbWVMYXllcnMgPSB0aGlzLl92aXNlbWVMYXllcnMgfHwge307XG4gICAgdGhpcy5fdGFsa2luZ0xheWVycyA9IHRoaXMuX3RhbGtpbmdMYXllcnMgfHwge307XG5cbiAgICBzdXBlci5fb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpO1xuXG4gICAgaWYgKHR5cGVOYW1lID09PSAnVGV4dFRvU3BlZWNoRmVhdHVyZScpIHtcbiAgICAgIHRoaXMuX2hvc3QuVGV4dFRvU3BlZWNoRmVhdHVyZS5zcGVlY2htYXJrT2Zmc2V0ID1cbiAgICAgICAgLXRoaXMuX3Zpc2VtZUxlYWRUaW1lIHx8IDA7XG4gICAgfVxuICB9XG5cbiAgX29uTGF5ZXJBZGRlZCh7bmFtZX0pIHtcbiAgICBzdXBlci5fb25MYXllckFkZGVkKHtuYW1lfSk7XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgdmlzZW1lIGFuaW1hdGlvblxuICAgIGlmICh0aGlzLl92aXNlbWVMYXllcnNbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24obmFtZSwgdGhpcy5fdmlzZW1lTGF5ZXJzW25hbWVdKTtcbiAgICB9XG4gIH1cblxuICBfb25BbmltYXRpb25BZGRlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge1xuICAgIHN1cGVyLl9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWV9KTtcblxuICAgIC8vIFZhbGlkYXRlIHRoZSB2aXNlbWUgYW5pbWF0aW9uXG4gICAgaWYgKHRoaXMuX3Zpc2VtZUxheWVyc1tsYXllck5hbWVdID09PSBhbmltYXRpb25OYW1lKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlclZpc2VtZUFuaW1hdGlvbihsYXllck5hbWUsIHRoaXMuX3Zpc2VtZUxheWVyc1tsYXllck5hbWVdKTtcbiAgICB9XG4gIH1cblxuICBfb25QbGF5KCkge1xuICAgIC8vIFR1cm4gb24gdGhlIGxheWVyIHdlaWdodHNcbiAgICB0aGlzLmVuYWJsZSgpO1xuXG4gICAgLy8gU2V0IHRoZSBjdXJyZW50IGFuaW1hdGlvbnNcbiAgICBbdGhpcy5fdmlzZW1lTGF5ZXJzLCB0aGlzLl90YWxraW5nTGF5ZXJzXS5mb3JFYWNoKGxheWVycyA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyhsYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWVdKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXS5pc0FjdGl2ZSkge1xuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5yZXN1bWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBfb25QYXVzZSgpIHtcbiAgICB0aGlzLl9vblN0b3AoKTtcbiAgfVxuXG4gIF9vblJlc3VtZSgpIHtcbiAgICB0aGlzLl9vblBsYXkoKTtcbiAgfVxuXG4gIF9vblN0b3AoKSB7XG4gICAgLy8gVHVybiBvZmYgdGhlIGxheWVyIHdlaWdodHNcbiAgICB0aGlzLmRpc2FibGUoKTtcblxuICAgIC8vIFBhdXNlIHRoZSBjdXJyZW50IGFuaW1hdGlvbnNcbiAgICBbdGhpcy5fdmlzZW1lTGF5ZXJzLCB0aGlzLl90YWxraW5nTGF5ZXJzXS5mb3JFYWNoKGxheWVycyA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyhsYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWVdKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXS5pc0FjdGl2ZSkge1xuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5wYXVzZUFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHZpc2VtZSBldmVudHMgYXJlIGNhdWdodCwgdHVybiBvbiB3ZWlnaHQgb2YgdGhlIG5ldyB2aXNlbWUgZm9yIHRoZSBkdXJhdGlvblxuICAgKiBvZiB0aGUgc3BlZWNoIG1hcmssIHRoZW4gdHVybiB3ZWlnaHQgYmFjayBvZmYuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCAtIEV2ZW50IGRhdGEgcGFzc2VkIGZyb20gdGhlIHNwZWVjaC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50Lm1hcmsgLSBTcGVlY2htYXJrIG9iamVjdC5cbiAgICovXG4gIGFzeW5jIF9vblZpc2VtZSh7bWFya30pIHtcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl92aXNlbWVMYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIGFuaW1OYW1lXSkgPT4ge1xuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBjYW4gYmUgbWFuaXB1bGF0ZWRcbiAgICAgIGNvbnN0IHtpc0FjdGl2ZSwgdmlzZW1lTWFwfSA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW1xuICAgICAgICBhbmltTmFtZVxuICAgICAgXTtcblxuICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRha2UgdmFyaWFibGVzIGZyb20gdGhlIHZpc2VtZSBpZiB0aGV5IGV4aXN0IGFuZCBkZWZhdWx0IHRvIHRoZSBsYXllclxuICAgICAgY29uc3Qge1xuICAgICAgICBuYW1lOiB2aXNlbWUsXG4gICAgICAgIGlzQWN0aXZlOiBpc1Zpc2VtZUFjdGl2ZSxcbiAgICAgICAgZGVjYXlSYXRlLFxuICAgICAgICBibGVuZFRpbWUsXG4gICAgICAgIGVhc2luZ0ZuLFxuICAgICAgICBvdmVycmlkZVdlaWdodCxcbiAgICAgIH0gPSB7XG4gICAgICAgIC4uLnRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSxcbiAgICAgICAgLi4udmlzZW1lTWFwW21hcmsudmFsdWVdLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdmlzZW1lTmFtZXMgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9uQmxlbmROYW1lcyhcbiAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICBhbmltTmFtZVxuICAgICAgKTtcblxuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuZXcgdmlzZW1lIGhhcyBhbiBhY3RpdmUgZnJlZUJsZW5kIHdlaWdodFxuICAgICAgaWYgKCFpc1Zpc2VtZUFjdGl2ZSB8fCAhdmlzZW1lTmFtZXMuaW5jbHVkZXModmlzZW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbmQgdGhlIHBlYWsgd2VpZ2h0IGZvciB0aGUgdmlzZW1lIGFuZCB0aGUgYW1vdW50IG9mIHRpbWUgaXQgc2hvdWxkXG4gICAgICAvLyB0YWtlIHRvIHJlYWNoIGl0XG4gICAgICBsZXQgd2VpZ2h0ID0gMTtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gbWFyay5kdXJhdGlvbiAvIDEwMDA7XG4gICAgICBpZiAoZHVyYXRpb24gPCBibGVuZFRpbWUpIHtcbiAgICAgICAgY29uc3QgbGVycEZhY3RvciA9IGJsZW5kVGltZSA+IDAgPyBkdXJhdGlvbiAvIGJsZW5kVGltZSA6IDE7XG4gICAgICAgIHdlaWdodCA9XG4gICAgICAgICAgb3ZlcnJpZGVXZWlnaHQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBvdmVycmlkZVdlaWdodFxuICAgICAgICAgICAgOiBNYXRoVXRpbHMubGVycCgwLCAxLCBsZXJwRmFjdG9yKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJsZW5kSW5UaW1lID0gTWF0aC5taW4oZHVyYXRpb24sIGJsZW5kVGltZSk7XG5cbiAgICAgIC8vIEZpbmQgdGhlIGFtb3VudCBhbmQgdGltZSB2aXNlbWUgd2lsbCBiZSBoZWxkIGZvclxuICAgICAgY29uc3QgaG9sZFRpbWUgPSBkdXJhdGlvbiAtIGJsZW5kVGltZTtcblxuICAgICAgaWYgKGhvbGRUaW1lIDwgMCkge1xuICAgICAgICAvLyBQZXJmb3JtIGluIC0+IG91dCBhbmltYXRpb25cbiAgICAgICAgdGhpcy5fYW5pbWF0ZVNpbXBsZVZpc2VtZShcbiAgICAgICAgICBsYXllck5hbWUsXG4gICAgICAgICAgYW5pbU5hbWUsXG4gICAgICAgICAgdmlzZW1lLFxuICAgICAgICAgIHdlaWdodCxcbiAgICAgICAgICBibGVuZEluVGltZSxcbiAgICAgICAgICBibGVuZFRpbWUsXG4gICAgICAgICAgZWFzaW5nRm5cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGxlcnBGYWN0b3IgPVxuICAgICAgICAgIGRlY2F5UmF0ZS5zZWNvbmRzID4gMCA/IGhvbGRUaW1lIC8gZGVjYXlSYXRlLnNlY29uZHMgOiAxO1xuICAgICAgICAvLyBQZXJmb3JtIGluIC0+IGhvbGQgLT4gb3V0IGFuaW1hdGlvblxuICAgICAgICBjb25zdCBkZWNheVdlaWdodCA9IE1hdGhVdGlscy5sZXJwKFxuICAgICAgICAgIHdlaWdodCxcbiAgICAgICAgICB3ZWlnaHQgKiBkZWNheVJhdGUuYW1vdW50LFxuICAgICAgICAgIE1hdGgubWluKDEsIGxlcnBGYWN0b3IpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2FuaW1hdGVIZWxkVmlzZW1lKFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltTmFtZSxcbiAgICAgICAgICB2aXNlbWUsXG4gICAgICAgICAgd2VpZ2h0LFxuICAgICAgICAgIGRlY2F5V2VpZ2h0LFxuICAgICAgICAgIGJsZW5kSW5UaW1lLFxuICAgICAgICAgIGhvbGRUaW1lLFxuICAgICAgICAgIGJsZW5kVGltZSxcbiAgICAgICAgICBlYXNpbmdGblxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuaW1hdGUgYSB2aXNlbWUgYmxlbmQgd2VpZ2h0IHRvd2FyZHMgYSB2YWx1ZSBhbmQgdGhlbiBiYWNrIHRvIHplcm8uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSB2aXNlbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltTmFtZSAtIE5hbWUgb2YgdGhlIGZyZWVibGVuZCBhbmltYXRpb24gdGhhdCBjb250YWluc1xuICAgKiB0aGUgdmlzZW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmlzZW1lTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHdlaWdodCB0byBtYW5pcHVsYXRlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gUGVhayB3ZWlnaHQgdG8gYW5pbWF0ZSB0b3dhcmRzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYmxlbmRJblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGVcbiAgICogcGVhayB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBibGVuZE91dFRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCBzaG91bGQgdGFrZSB0byBhbmltYXRlIGJhY2tcbiAgICogdG8gemVybyBhZnRlciByZWFjaGluZyB0aGUgcGVhayB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBkdXJpbmcgYW5pbWF0aW9uLlxuICAgKi9cbiAgX2FuaW1hdGVTaW1wbGVWaXNlbWUoXG4gICAgbGF5ZXJOYW1lLFxuICAgIGFuaW1OYW1lLFxuICAgIHZpc2VtZU5hbWUsXG4gICAgcGVha1dlaWdodCxcbiAgICBibGVuZEluVGltZSxcbiAgICBibGVuZE91dFRpbWUsXG4gICAgZWFzaW5nRm5cbiAgKSB7XG4gICAgLy8gQW5pbWF0ZSB0b3dhcmRzIHRoZSBwZWFrIHZhbHVlXG4gICAgY29uc3Qgd2VpZ2h0UHJvbWlzZSA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgIGxheWVyTmFtZSxcbiAgICAgIGFuaW1OYW1lLFxuICAgICAgdmlzZW1lTmFtZSxcbiAgICAgIHBlYWtXZWlnaHQsXG4gICAgICBibGVuZEluVGltZSxcbiAgICAgIGVhc2luZ0ZuXG4gICAgKTtcblxuICAgIC8vIEFuaW1hdGUgYmFjayB0byB6ZXJvIGlmIHRoZXJlIHdhcyBubyB3ZWlnaHQgaW50ZXJydXB0aW9uXG4gICAgd2VpZ2h0UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIGlmICghd2VpZ2h0UHJvbWlzZS5jYW5jZWxlZCkge1xuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXG4gICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgIGFuaW1OYW1lLFxuICAgICAgICAgIHZpc2VtZU5hbWUsXG4gICAgICAgICAgMCxcbiAgICAgICAgICBibGVuZE91dFRpbWUsXG4gICAgICAgICAgZWFzaW5nRm5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmltYXRlIGEgdmlzZW1lIGJsZW5kIHdlaWdodCB0b3dhcmRzIGEgdmFsdWUgYW5kIHRoZW4gYmFjayB0byB6ZXJvLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgdmlzZW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbU5hbWUgLSBOYW1lIG9mIHRoZSBmcmVlYmxlbmQgYW5pbWF0aW9uIHRoYXQgY29udGFpbnNcbiAgICogdGhlIHZpc2VtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHZpc2VtZU5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCB3ZWlnaHQgdG8gbWFuaXB1bGF0ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHBlYWtXZWlnaHQgLSBQZWFrIHdlaWdodCB0byBhbmltYXRlIHRvd2FyZHMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWNheVdlaWdodCAtIFdlaWdodCB0byBhbmltYXRlIHRvd2FyZHMgYWZ0ZXIgcmVhY2hpbmcgdGhlXG4gICAqIHBlYWsgd2VpZ2h0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gYmxlbmRJblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGVcbiAgICogcGVhayB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBob2xkVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZSBkZWNheVxuICAgKiB3ZWlnaHQgYWZ0ZXIgdGhlIHBlYWsgd2VpZ2h0IGhhcyBiZWVuIHJlYWNoZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBibGVuZE91dFRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCBzaG91bGQgdGFrZSB0byBhbmltYXRlIGJhY2tcbiAgICogdG8gemVybyBhZnRlciByZWFjaGluZyB0aGUgZGVjYXkgd2VpZ2h0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2UgZHVyaW5nIGFuaW1hdGlvbi5cbiAgICovXG4gIGFzeW5jIF9hbmltYXRlSGVsZFZpc2VtZShcbiAgICBsYXllck5hbWUsXG4gICAgYW5pbU5hbWUsXG4gICAgdmlzZW1lTmFtZSxcbiAgICBwZWFrV2VpZ2h0LFxuICAgIGRlY2F5V2VpZ2h0LFxuICAgIGJsZW5kSW5UaW1lLFxuICAgIGhvbGRUaW1lLFxuICAgIGJsZW5kT3V0VGltZSxcbiAgICBlYXNpbmdGblxuICApIHtcbiAgICAvLyBBbmltYXRlIHRvd2FyZHMgdGhlIHBlYWsgdmFsdWVcbiAgICBjb25zdCBzdGFydFByb21pc2UgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXG4gICAgICBsYXllck5hbWUsXG4gICAgICBhbmltTmFtZSxcbiAgICAgIHZpc2VtZU5hbWUsXG4gICAgICBwZWFrV2VpZ2h0LFxuICAgICAgYmxlbmRJblRpbWUsXG4gICAgICBlYXNpbmdGblxuICAgICk7XG5cbiAgICBhd2FpdCBzdGFydFByb21pc2U7XG5cbiAgICBpZiAoIXN0YXJ0UHJvbWlzZS5jYW5jZWxlZCkge1xuICAgICAgLy8gQW5pbWF0ZSB0b3dhcmRzIHRoZSBkZWNheSB2YWx1ZSBpZiB0aGVyZSB3YXMgbm8gd2VpZ2h0IGludGVycnVwdGlvblxuICAgICAgY29uc3QgaG9sZFByb21pc2UgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXG4gICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgYW5pbU5hbWUsXG4gICAgICAgIHZpc2VtZU5hbWUsXG4gICAgICAgIGRlY2F5V2VpZ2h0LFxuICAgICAgICBob2xkVGltZSxcbiAgICAgICAgZWFzaW5nRm5cbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGhvbGRQcm9taXNlO1xuXG4gICAgICBpZiAoIWhvbGRQcm9taXNlLmNhbmNlbGVkKSB7XG4gICAgICAgIC8vIEFuaW1hdGUgYmFjayB0byB6ZXJvIGlmIHRoZXJlIHdhcyBubyB3ZWlnaHQgaW50ZXJydXB0aW9uXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgICBsYXllck5hbWUsXG4gICAgICAgICAgYW5pbU5hbWUsXG4gICAgICAgICAgdmlzZW1lTmFtZSxcbiAgICAgICAgICAwLFxuICAgICAgICAgIGJsZW5kT3V0VGltZSxcbiAgICAgICAgICBlYXNpbmdGblxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRvIG5lZ2F0aXZlbHkgb2Zmc2V0IHNwZWVjaG1hcmtcbiAgICogZW1pc3Npb24gYnkuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgdmlzZW1lTGVhZFRpbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2VtZUxlYWRUaW1lO1xuICB9XG5cbiAgc2V0IHZpc2VtZUxlYWRUaW1lKHNlY29uZHMpIHtcbiAgICB0aGlzLl92aXNlbWVMZWFkVGltZSA9IHNlY29uZHM7XG5cbiAgICBpZiAodGhpcy5faG9zdC5UZXh0VG9TcGVlY2hGZWF0dXJlKSB7XG4gICAgICB0aGlzLl9ob3N0LlRleHRUb1NwZWVjaEZlYXR1cmUuc3BlZWNobWFya09mZnNldCA9IC1zZWNvbmRzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBrZWVwaW5nIHRyYWNrIG9mIGFuIGFuaW1hdGlvbiBsYXllciB0aGF0IG93bnMgYSBmcmVlQmxlbmQgYW5pbWF0aW9uXG4gICAqIHdpdGggYmxlbmRXZWlnaHRzIGNvcnJlc3BvbmRpbmcgdG8gdmlzZW1lcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuaW1hdGlvbj0ndmlzZW1lcyddIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIG9uIHRoZVxuICAgKiBsYXllciB0aGF0IHdpbGwgYmUgcGxheWVkIGR1cmluZyBzcGVlY2guIFRoaXMgYW5pbWF0aW9uIG11c3QgYmUgb2YgdHlwZVxuICAgKiBmcmVlQmxlbmQuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gZGVjYXlSYXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVjYXlSYXRlLmFtb3VudD0wLjVdIC0gVGhlIHBlcmNlbnRhZ2UgdG8gZGVjcmVhc2UgdGhlIHZpc2VtZSdzXG4gICAqIHBlYWsgdmFsdWUgYnkgb3ZlciB0aW1lIG9uY2UgdGhlIHBlYWsgdmFsdWUgaGFzIGJlZW4gcmVhY2hlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWNheVJhdGUuc2Vjb25kcz0wLjVdIC0gVGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgdG9cbiAgICogZGVjcmVhc2UgdGhlIHZpc2VtZSdzIHdlaWdodCBvbmNlIGl0IGhhcyByZWFjaGVkIGl0cyBwZWFrIHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcj19IFtvcHRpb25zLmJsZW5kVGltZT1bTGlwc3luY0ZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZV17QGxpbmsgTGlwc3luY0ZlYXR1cmUjREVGQVVMVF9MQVlFUl9PUFRJT05TI2JsZW5kVGltZX1dIC1cbiAgICogRGVmYXVsdCBhbW91bnQgb2YgdGltZSB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgYW5pbWF0aW9uIGJsZW5kV2VpZ2h0cy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMuZWFzaW5nRm4gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxuICAgKiBtYW5pcHVsYXRpbmcgYW5pbWF0aW9uIGJsZW5kV2VpZ2h0cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnZpc2VtZU1hcD1EZWZhdWx0VmlzZW1lTWFwXSAtIE9iamVjdCBjb250YWluaW5nIGtleS92YWx1ZSBwYWlycyBvZlxuICAgKiBQb2xseSB2aXNlbWUgbmFtZXMgbWFwcGVkIHRvIG9iamVjdHMgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZ1xuICAgKiBhbmltYXRpb24gYmxlbmRXZWlnaHQgYW5kIGFueSBvdGhlciBhbmltYXRpb24gb3B0aW9ucyB0byB1c2Ugc3VjaCBhcyB2aXNlbWVcbiAgICogc3BlY2lmaWMgYmxlbmQgdGltZXMgYW5kIGVhc2luZyBmdW5jdGlvbnMuXG4gICAqL1xuICByZWdpc3RlclZpc2VtZUxheWVyKFxuICAgIGxheWVyTmFtZSxcbiAgICB7XG4gICAgICBhbmltYXRpb24gPSAndmlzZW1lcycsXG4gICAgICBkZWNheVJhdGUgPSB7YW1vdW50OiAwLjUsIHNlY29uZHM6IDAuNX0sXG4gICAgICBibGVuZFRpbWUgPSBMaXBzeW5jRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lLFxuICAgICAgZWFzaW5nRm4sXG4gICAgICB2aXNlbWVNYXAgPSBEZWZhdWx0VmlzZW1lTWFwLFxuICAgIH0gPSB7fVxuICApIHtcbiAgICAvLyBSZWdpc3RlciB0aGUgbGF5ZXIgYW5kIGFuaW1hdGlvblxuICAgIHRoaXMucmVnaXN0ZXJMYXllcihsYXllck5hbWUsIHtcbiAgICAgIGRlY2F5UmF0ZSxcbiAgICAgIGJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuLFxuICAgICAgYW5pbWF0aW9uczoge1thbmltYXRpb25dOiB7dmlzZW1lTWFwfX0sXG4gICAgfSk7XG4gICAgdGhpcy5fdmlzZW1lTGF5ZXJzW2xheWVyTmFtZV0gPSBhbmltYXRpb247XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgdmlzZW1lIGFuaW1hdGlvblxuICAgIHRoaXMuX3JlZ2lzdGVyVmlzZW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBrZWVwaW5nIHRyYWNrIG9mIGFuIGFuaW1hdGlvbiBsYXllciB0aGF0IGNvbnRhaW5zIGEgbG9vcGluZyBhbmltYXRpb25cbiAgICogdG8gYmUgcGxheWVkIGR1cmluZyBzcGVlY2guXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBrZWVwIHRyYWNrIG9mLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgbGF5ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hbmltYXRpb249J3N0YW5kX3RhbGsnXSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBvbiB0aGVcbiAgICogbGF5ZXIgdGhhdCB3aWxsIGJlIHBsYXllZCBkdXJpbmcgc3BlZWNoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYmxlbmRUaW1lPVtMaXBzeW5jRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lXXtAbGluayBMaXBzeW5jRmVhdHVyZSNERUZBVUxUX0xBWUVSX09QVElPTlMjYmxlbmRUaW1lfV0gLVxuICAgKiBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyB0aGUgbGF5ZXIncyB3ZWlnaHRzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXG4gICAqIG1hbmlwdWxhdGluZyB0aGUgbGF5ZXIncyB3ZWlnaHRzLlxuICAgKi9cbiAgcmVnaXN0ZXJUYWxraW5nTGF5ZXIoXG4gICAgbGF5ZXJOYW1lLFxuICAgIHtcbiAgICAgIGFuaW1hdGlvbiA9ICdzdGFuZF90YWxrJyxcbiAgICAgIGJsZW5kVGltZSA9IExpcHN5bmNGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWUsXG4gICAgICBlYXNpbmdGbixcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGFuZCBhbmltYXRpb25cbiAgICB0aGlzLnJlZ2lzdGVyTGF5ZXIobGF5ZXJOYW1lLCB7XG4gICAgICBibGVuZFRpbWUsXG4gICAgICBlYXNpbmdGbixcbiAgICAgIGFuaW1hdGlvbnM6IHtbYW5pbWF0aW9uXToge319LFxuICAgIH0pO1xuICAgIHRoaXMuX3RhbGtpbmdMYXllcnNbbGF5ZXJOYW1lXSA9IGFuaW1hdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmFtZXNwYWNlIHRvIHRoZSBob3N0IHdpdGggdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gY29udGFpbiBwcm9wZXJ0aWVzXG4gICAqIGFuZCBtZXRob2RzIGZyb20gdGhlIGZlYXR1cmUgdGhhdCB1c2VycyBvZiB0aGUgaG9zdCBuZWVkIGFjY2VzcyB0by5cbiAgICpcbiAgICogQHNlZSBMaXBzeW5jRmVhdHVyZVxuICAgKi9cbiAgaW5zdGFsbEFwaSgpIHtcbiAgICAvKipcbiAgICAgKiBAaW5uZXJcbiAgICAgKiBAbmFtZXNwYWNlIExpcHN5bmNGZWF0dXJlXG4gICAgICovXG4gICAgY29uc3QgYXBpID0gc3VwZXIuaW5zdGFsbEFwaSgpO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXG4gICAgICogQG5hbWUgcmVnaXN0ZXJMYXllclxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSNyZWdpc3RlckxheWVyXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgKiBAbmFtZSByZWdpc3RlckFuaW1hdGlvblxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSNyZWdpc3RlckFuaW1hdGlvblxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXG4gICAgICogQG5hbWUgc2V0TGF5ZXJXZWlnaHRzXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI3NldExheWVyV2VpZ2h0c1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXG4gICAgICogQG5hbWUgZW5hYmxlXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI2VuYWJsZVxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXG4gICAgICogQG5hbWUgZGlzYWJsZVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAc2VlIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSNkaXNhYmxlXG4gICAgICovXG5cbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICogQG1ldGhvZFxuICAgICAgICogQHNlZSBjb3JlL0xpcHN5bmNGZWF0dXJlI3JlZ2lzdGVyVmlzZW1lTGF5ZXJcbiAgICAgICAqL1xuICAgICAgcmVnaXN0ZXJWaXNlbWVMYXllcjogdGhpcy5yZWdpc3RlclZpc2VtZUxheWVyLmJpbmQodGhpcyksXG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWV0aG9kXG4gICAgICAgKiBAc2VlIGNvcmUvTGlwc3luY0ZlYXR1cmUjcmVnaXN0ZXJUYWxraW5nTGF5ZXJcbiAgICAgICAqL1xuICAgICAgcmVnaXN0ZXJUYWxraW5nTGF5ZXI6IHRoaXMucmVnaXN0ZXJUYWxraW5nTGF5ZXIuYmluZCh0aGlzKSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBuYW1lIHZpc2VtZUxlYWRUaW1lXG4gICAgICogQHNlZSBjb3JlL0xpcHN5bmNGZWF0dXJlI3Zpc2VtZUxlYWRUaW1lXG4gICAgICovXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFwaSwgJ3Zpc2VtZUxlYWRUaW1lJywge1xuICAgICAgZ2V0OiAoKSA9PiB0aGlzLnZpc2VtZUxlYWRUaW1lLFxuICAgICAgc2V0OiBzZWNvbmRzID0+IHtcbiAgICAgICAgdGhpcy52aXNlbWVMZWFkVGltZSA9IHNlY29uZHM7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFwaTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaXBzeW5jRmVhdHVyZTtcbmV4cG9ydCB7RGVmYXVsdFZpc2VtZU1hcH07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovXG5pbXBvcnQgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBmcm9tICdjb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSc7XG5cbi8qKlxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIHRoYXQgcmVnaXN0ZXJzIGNhbGxiYWNrIG1ldGhvZCB3aGVuIGEgc3NtbCBzcGVlY2htYXJrIGV2ZW50IGlzIGVtaXR0ZWQuXG4gKlxuICogQGludGVyZmFjZVxuICogQGV4dGVuZHMgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZVxuICovXG5jbGFzcyBTU01MU3BlZWNobWFya0ludGVyZmFjZSBleHRlbmRzIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2Uge1xuICAvKipcbiAgICogV2hlbiBzc21sIGV2ZW50cyBhcmUgY2F1Z2h0LCB0aGlzIHdpbGwgdHJ5IHRvIHBhcnNlIHRoZSBzcGVlY2ggbWFyayB2YWx1ZSBhbmQgZXhlY3V0ZSBhbnkgZnVuY3Rpb24gd2hpY2ggbWVldHMgY3JpdGVyaWEgZGVmaW5lZCBpbiB0aGUgdmFsdWUuXG4gICAqIFNwZWVjaCBtYXJrIHZhbHVlIHdpbGwgYmUgdHJlYXRlZCBhcyBzdHJpbmdpZmllZCBqc29uIGZvcm1hdCBjb250YWluaW5nIHJlcXVpcmVkIGZlYXR1cmUgbmFtZSwgZnVuY3Rpb24gbmFtZSBhbmQgYXJndW1lbnQgYXJyYXkgdG8gcGFzcyBpbi5cbiAgICogRXhhbXBsZSBzcGVlY2ggbWFyayB2YWx1ZSBtaWdodCBsb29rIGxpa2U6ICd7XCJmZWF0dXJlXCI6XCJHZXN0dXJlRmVhdHVyZVwiLCBcIm1ldGhvZFwiOlwic3dpdGNoVG9HZXN0dXJlXCIsIFwiYXJnc1wiOltcImdlbnJpY0FcIiwgMC41XX0nXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudCAtIEV2ZW50IGRhdGEgcGFzc2VkIGZyb20gdGhlIHNwZWVjaC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50Lm1hcmsgLSBTcGVlY2htYXJrIG9iamVjdC5cbiAgICovXG4gIF9vblNzbWwoe21hcmt9KSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBTU01MU3BlZWNobWFya0ludGVyZmFjZX1cbiAgICogYW5kIGV4dGVuZHMgYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtDbGFzc30gQmFzZUNsYXNzIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAgICpcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBTU01MU3BlZWNobWFya0ludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XG4gICAgY29uc3QgUGFyZW50Q2xhc3MgPSBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluKEJhc2VDbGFzcyk7XG4gICAgY29uc3QgU1NNTFNwZWVjaE1hcmtNaXhpbiA9IGNsYXNzIGV4dGVuZHMgUGFyZW50Q2xhc3Mge1xuICAgICAgX29uU3NtbCh7bWFya30pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7ZmVhdHVyZSwgbWV0aG9kLCBhcmdzfSA9IEpTT04ucGFyc2UobWFyay52YWx1ZSk7XG4gICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IubmFtZSA9PT0gZmVhdHVyZSkge1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzW21ldGhvZF07XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgJiYgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEZ1bmN0aW9uICR7bWV0aG9kfSBkb2VzIG5vdCBleGlzdCB3aXRoaW4gZmVhdHVyZSAke2ZlYXR1cmV9YClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2goZSkge31cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIFNTTUxTcGVlY2hNYXJrTWl4aW47XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2U7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSBmcm9tICcuL2FuaW1wYWNrL01hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSc7XG5pbXBvcnQgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UgZnJvbSAnLi9hd3NwYWNrL1NTTUxTcGVlY2htYXJrSW50ZXJmYWNlJztcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJy4vQWJzdHJhY3RIb3N0RmVhdHVyZSc7XG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnLi9EZWZlcnJlZCc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XG5cbmNvbnN0IERlZmF1bHRHZXN0dXJlV29yZHMgPSB7XG4gIGJpZzogW1xuICAgICdhZGQnLFxuICAgICdhYm92ZScsXG4gICAgJ2F1dGhvcml0eScsXG4gICAgJ2JpZycsXG4gICAgJ2NvdmVyJyxcbiAgICAnZnVsbCcsXG4gICAgJ2ZseScsXG4gICAgJ2dyb3cnLFxuICAgICdncm93dGgnLFxuICAgICdoaWdoJyxcbiAgICAnaHVnZScsXG4gICAgJ2luY3JlYXNlJyxcbiAgICAnbWFqb3InLFxuICAgICdtYWpvcml0eScsXG4gICAgJ2xhcmdlJyxcbiAgICAnbGVhZGVyJyxcbiAgICAnbG90JyxcbiAgICAncmFpc2UnLFxuICAgICdyaXNlJyxcbiAgICAndGFsbCcsXG4gIF0sXG4gIGhlYXJ0OiBbXG4gICAgJ2FjY2VwdCcsXG4gICAgJ2FkbWl0JyxcbiAgICAnYmVsaWV2ZScsXG4gICAgJ2NhcmUnLFxuICAgICdmZWVsaW5nJyxcbiAgICAnZmVlbCcsXG4gICAgJ2ZyaWVuZCcsXG4gICAgJ2dyYXRlZnVsJyxcbiAgICAnaGFwcHknLFxuICAgICdoZWFydCcsXG4gICAgJ2h1bWFuJyxcbiAgICAncGFpbicsXG4gICAgJ3NhdmUnLFxuICAgICdzYWZlJyxcbiAgICAna2luZCcsXG4gICAgJ2xvdmUnLFxuICBdLFxuICBpbjogW1xuICAgICdpbmNsdWRlJyxcbiAgICAnaW5jbHVkaW5nJyxcbiAgICAnaW5zaWRlJyxcbiAgICAnaW50bycsXG4gICAgJ25vdycsXG4gICAgJ25lYXInLFxuICAgICduZWFyZXN0JyxcbiAgICAnY2xvc2VzdCcsXG4gICAgJ3RoZXJlaW4nLFxuICAgICd3aXRoaW4nLFxuICBdLFxuICBtYW55OiBbXG4gICAgJ2FsbCcsXG4gICAgJ2Fsd2F5cycsXG4gICAgJ2FueScsXG4gICAgJ2FueW9uZScsXG4gICAgJ2Ftb25nJyxcbiAgICAnYXJlYScsXG4gICAgJ2Fyb3VuZCcsXG4gICAgJ2JlYXV0aWZ1bCcsXG4gICAgJ2VudGlyZScsXG4gICAgJ2Vudmlyb25tZW50JyxcbiAgICAnZW52aXJvbm1lbnRzJyxcbiAgICAnZW52aXJvbm1lbnRhbCcsXG4gICAgJ2V2ZXJ5Ym9keScsXG4gICAgJ2V2ZXJ5b25lJyxcbiAgICAnZXZlcnl0aGluZycsXG4gICAgJ2F1ZGllbmNlJyxcbiAgICAndG90YWwnLFxuICAgICdncm91cCcsXG4gICAgJ2dyb3VwcycsXG4gICAgJ21pbGxpb24nLFxuICAgICdtaWxsaW9ucycsXG4gICAgJ290aGVycycsXG4gICAgJ2JpbGxpb24nLFxuICAgICdiaWxsaW9ucycsXG4gICAgJ2h1bmRyZWQnLFxuICAgICdodW5kcmVkcycsXG4gICAgJ21hbnknLFxuICAgICd0aG91c2FuZCcsXG4gICAgJ3Rob3VzYW5kcycsXG4gICAgJ3dvcmxkJyxcbiAgICAnd29ybGRzJyxcbiAgICAnb3V0c2lkZScsXG4gICAgJ3JldmVhbCcsXG4gIF0sXG4gIG1vdmVtZW50OiBbXG4gICAgJ2F3YXknLFxuICAgICdhY3Jvc3MnLFxuICAgICdhaGVhZCcsXG4gICAgJ2Fsb25nJyxcbiAgICAnZmFyJyxcbiAgICAnZmFzdCcsXG4gICAgJ2ZvbGxvdycsXG4gICAgJ2dvJyxcbiAgICAnbGVhdmUnLFxuICAgICdtb3ZlJyxcbiAgICAnbW92ZW1lbnQnLFxuICAgICd0aHJvdWdoJyxcbiAgICAndGhyb3VnaG91dCcsXG4gICAgJ3Rvd2FyZCcsXG4gICAgJ3RyYXZlbCcsXG4gICAgJ3R1cm5lZCcsXG4gICAgJ3Bhc3NlZCcsXG4gIF0sXG4gIG9uZTogW1xuICAgICdzaW5nbGUnLFxuICAgICdvbmUnLFxuICAgICdvbmNlJyxcbiAgICAnZmlyc3QnLFxuICAgICdmaXJzdGx5JyxcbiAgICAnb25seScsXG4gICAgJ3NvbG8nLFxuICAgICd3YXJuZWQnLFxuICAgICd0cnVseScsXG4gICAgJ3VwJyxcbiAgICAnYWxvbmUnLFxuICBdLFxuICBhZ2dyZXNzaXZlOiBbXG4gICAgJ3Bvd2VyJyxcbiAgICAncG93ZXJzJyxcbiAgICAncG93ZXJmdWwnLFxuICAgICdhc3NlcnQnLFxuICAgICdhc3NlcnRpdmUnLFxuICAgICdzdHJvbmcnLFxuICAgICdzdHJvbmdlcicsXG4gICAgJ3N0cm9uZ2VzdCcsXG4gICAgJ3N0cmVuZ3RoJyxcbiAgICAnZmxleCcsXG4gICAgJ2RhbmcnLFxuICAgICdkYW1uJyxcbiAgICAnZGFtbml0JyxcbiAgICAnZGFybicsXG4gICAgJ3NodWNrcycsXG4gICAgJ2RvaCcsXG4gICAgJ2RyYXQnLFxuICAgICdhbmdyeScsXG4gICAgJ2FuZ3JpZXInLFxuICAgICdhbmdyaWVzdCcsXG4gICAgJ2FnZ3Jlc3NpdmUnLFxuICAgICdhbm5veWVkJyxcbiAgICAnYW5ub3lpbmcnLFxuICAgICdhdHRhY2snLFxuICAgICdhdHRhY2tpbmcnLFxuICAgICdvZmZlbnNlJyxcbiAgICAnb2ZmZW5zaXZlJyxcbiAgICAnYmF0dGxlJyxcbiAgXSxcbiAgeW91OiBbJ3lvdScsICd5YWxsJywgXCJ5J2FsbFwiLCAneW91cicsICd5b3VycycsICd0aG91JywgJ3RoeSddLFxuICBkZWZlbnNlOiBbXG4gICAgJ2RlZmVuc2UnLFxuICAgICdmZWFyJyxcbiAgICAncmVwdWxzZWQnLFxuICAgICdzY2FyZWQnLFxuICAgICdzY2FyeScsXG4gICAgJ3NjYXJpZXInLFxuICAgICdzY2FyaWVzdCcsXG4gICAgJ2ZlYXJmdWwnLFxuICAgICdhZnJhaWQnLFxuICAgICdjb3dlcicsXG4gICAgJ2Nvd2VycycsXG4gICAgJ2Nvd2VyaW5nJyxcbiAgICAnaGlkZW91cycsXG4gICAgJ2Rvb21lZCcsXG4gICAgJ3RlcnJpZmllZCcsXG4gICAgJ3RlcnJpZnknLFxuICAgICd0ZXJyaWZ5aW5nJyxcbiAgICAndGVycmlmaWVzJyxcbiAgICAnc3Bvb2t5JyxcbiAgICAnc3Bvb2tpZXInLFxuICAgICdzcG9va2llc3QnLFxuICBdLFxuICB3YXZlOiBbXG4gICAgJ2hlbGxvJyxcbiAgICAnaGknLFxuICAgICdoaXlhJyxcbiAgICAnaG93ZHknLFxuICAgICd3ZWxjb21lJyxcbiAgICAnYWxvaGEnLFxuICAgICdoZXlhJyxcbiAgICAnaGV5JyxcbiAgICAnYnllJyxcbiAgICAnZ29vZGJ5ZScsXG4gICAgJ2hvbGEnLFxuICAgICdhZGlvcycsXG4gICAgJ2NoYW8nLFxuICBdLFxuICBzZWxmOiBbJ215JywgJ0knLCAnbXlzZWxmJywgJ3NlbGYnLCBcIkkndmVcIiwgJ0l2ZScsICdtZScsICdtaW5lJywgJ293biddLFxufTtcblxuLyoqXG4gKiBHZXN0dXJlIGFsbG93cyB5b3UgdG8gcGxheSBhbmltYXRpb25zIG9uIGRlbWFuZCBvbiBvbmUgb3IgbW9yZSBsYXllcnMgZnJvbSBzY3JpcHRcbiAqIG9yIHNzbWwuIElmIGdlc3R1cmUgaXMgcGxheWVkIHRoYXQgaXMgYSBRdWV1ZVN0YXRlLCB0aGUgcXVldWUgd2lsbCBhdXRvbWF0aWNhbGx5XG4gKiBiZSBwcm9ncmVzc2VkIGFmdGVyIGEgZ2l2ZW4gaG9sZCB0aW1lIGlmIGEgbG9vcGluZyBxdWV1ZWQgc3RhdGUgaXMgcmVhY2hlZC4gR2VzdHVyZVxuICogbGF5ZXJzIGNhbiBvcHRpb25hbGx5IGJlIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgd2hlbiBubyBnZXN0dXJlIGFuaW1hdGlvbiBpc1xuICogaW4gcHJvZ3Jlc3MuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZVxuICogQGltcGxlbWVudHMgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2VcbiAqIEBpbXBsZW1lbnRzIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZVxuICovXG5jbGFzcyBHZXN0dXJlRmVhdHVyZSBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmUubWl4KFxuICBTU01MU3BlZWNobWFya0ludGVyZmFjZS5NaXhpbixcbiAgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLk1peGluXG4pIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3Qgb2JqZWN0IHRoYXQgb3ducyB0aGUgZmVhdHVyZS5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGZlYXR1cmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5ob2xkVGltZSA9IDNdIC0gQW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0aGF0IG11c3RcbiAgICogZWxhcHNlIGJlZm9yZSBhZHZhbmNpbmcgYSBnZXN0dXJlIHRoYXQncyBhIHtAbGluayBRdWV1ZVN0YXRlfSB3aGVuIHRoZSBjdXJyZW50XG4gICAqIHN0YXRlIGluIHRoZSBxdWV1ZSBpcyBzZXQgdG8gbG9vcCBpbmZpbml0ZWx5LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWluaW11bUludGVydmFsID0gMC4yNV0gLSBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZVxuICAgKiBpbiBzZWNvbmRzIHRoYXQgbXVzdCBlbGFwc2UgYmVmb3JlIGFub3RoZXIgZ2VzdHVyZSBjYW4gYmUgcGxheWVkLlxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGxheWVycyAtIEFuIG9iamVjdCB0aGF0IG1hcHMgbGF5ZXIgbmFtZXMgdG8gbGF5ZXIgb3B0aW9ucy5cbiAgICogVGhlc2UgYXJlIHRoZSBsYXllcnMgdGhhdCB3aWxsIGJlIHJlZ2lzdGVyZWQgYXMgdHJhY2tlZCBnZXN0dXJlIGxheWVycy4gU2VlXG4gICAqIHtAbGluayBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UjcmVnaXN0ZXJMYXllcn0gZm9yIG1vcmUgaW5mb3JtYXRpb25cbiAgICogb24gZXhwZWN0ZWQgZm9ybWF0IGZvciBlYWNoIGxheWVyIG9wdGlvbnMgb2JqZWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3IoaG9zdCwge2hvbGRUaW1lID0gMywgbWluaW11bUludGVydmFsID0gMSwgbGF5ZXJzID0ge319ID0ge30pIHtcbiAgICBzdXBlcihob3N0KTtcblxuICAgIHRoaXMuaG9sZFRpbWUgPSBob2xkVGltZTtcbiAgICB0aGlzLm1pbmltdW1JbnRlcnZhbCA9IG1pbmltdW1JbnRlcnZhbDtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBnZXN0dXJlIGxheWVyc1xuICAgIE9iamVjdC5lbnRyaWVzKGxheWVycykuZm9yRWFjaCgoW25hbWUsIG9wdGlvbnMgPSB7fV0pID0+IHtcbiAgICAgIHRoaXMucmVnaXN0ZXJMYXllcihuYW1lLCBvcHRpb25zKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSB2YWxpZCBob2xkIHRpbWUgdmFsdWUuIElmIGhvbGQgdGltZSBpc24ndCBkZWZpbmVkIGZvciB0aGUgYW5pbWF0aW9uLFxuICAgKiB0cnkgdG8gdXNlIHRoZSBob2xkIHRpbWUgZm9yIHRoZSBsYXllci4gSWYgdGhhdCdzIG5vdCBkZWZpbmVkLCBmYWxsIGJhY2sgdG9cbiAgICogdGhlIGhvbGQgdGltZSBmb3IgdGhlIGZlYXR1cmUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBsYXllciAtIE1hbmFnZWQgbGF5ZXIgb3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhbmltYXRpb24gLSBNYW5hZ2VkIGFuaW1hdGlvbiBvcHRpb25zIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIF9nZXRIb2xkVGltZShsYXllciwgYW5pbWF0aW9uKSB7XG4gICAgY29uc3QgbGF5ZXJIb2xkVGltZSA9XG4gICAgICBsYXllci5ob2xkVGltZSAhPT0gdW5kZWZpbmVkID8gbGF5ZXIuaG9sZFRpbWUgOiB0aGlzLmhvbGRUaW1lO1xuXG4gICAgcmV0dXJuIGFuaW1hdGlvbi5ob2xkVGltZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGFuaW1hdGlvbi5ob2xkVGltZVxuICAgICAgOiBsYXllckhvbGRUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHZhbGlkIG1pbmltdW0gaW50ZXJ2YWwgdmFsdWUuIElmIG1pbmltdW0gaW50ZXJ2YWwgaXNuJ3QgZGVmaW5lZCBmb3JcbiAgICogdGhlIGFuaW1hdGlvbiwgdHJ5IHRvIHVzZSB0aGUgbWluaW11bSBpbnRlcnZhbCBmb3IgdGhlIGxheWVyLiBJZiB0aGF0J3Mgbm90XG4gICAqIGRlZmluZWQsIGZhbGwgYmFjayB0byB0aGUgbWluaW11bSBpbnRlcnZhbCBmb3IgdGhlIGZlYXR1cmUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBsYXllciAtIE1hbmFnZWQgbGF5ZXIgb3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhbmltYXRpb24gLSBNYW5hZ2VkIGFuaW1hdGlvbiBvcHRpb25zIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIF9nZXRNaW5pbXVtSW50ZXJ2YWwobGF5ZXIsIGFuaW1hdGlvbikge1xuICAgIGNvbnN0IGxheWVyTWluaW11bUludGVydmFsID1cbiAgICAgIGxheWVyLm1pbmltdW1JbnRlcnZhbCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gbGF5ZXIubWluaW11bUludGVydmFsXG4gICAgICAgIDogdGhpcy5taW5pbXVtSW50ZXJ2YWw7XG5cbiAgICByZXR1cm4gYW5pbWF0aW9uLm1pbmltdW1JbnRlcnZhbCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGFuaW1hdGlvbi5taW5pbXVtSW50ZXJ2YWxcbiAgICAgIDogbGF5ZXJNaW5pbXVtSW50ZXJ2YWw7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheU5leHRBbmltYXRpb259IGV2ZW50LiBJZiB0aGVcbiAgICogZXZlbnQgaXMgZW1pdHRlZCBmb3IgYSBtYW5hZ2VkIGFuaW1hdGlvbiBhbmQgdGhlIG5ldyBxdWV1ZWQgc3RhdGUgY2Fubm90XG4gICAqIGFkdmFuY2Ugb24gaXRzIG93biwgc3RhcnQgYSBuZXcgdGltZXIgcHJvbWlzZSB0aGF0IHdpbGwgYWR2YW5jZSB0aGUgcXVldWVcbiAgICogb25jZSBpdCByZXNvbHZlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIG9iamVjdCBwYXNzZWQgZnJvbSBwbGF5TmV4dEFuaW1hdGlvbiBldmVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgcXVldWUgc3RhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgcXVldWUgc3RhdGUgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNhbkFkdmFuY2UgLSBXaGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCBzdGF0ZSBpbiB0aGUgcXVldWVcbiAgICogY2FuIGFkdmFuY2Ugb24gaXRzIG93bi5cbiAgICogQHBhcmFtIHtib29sZWFufSBpc1F1ZXVlRW5kIC0gV2hldGhlciB0aGUgY3VycmVudCBzdGF0ZSBpbiB0aGUgcXVldWUgaXMgdGhlIGxhc3RcbiAgICogc3RhdGUgaW4gdGhlIHF1ZXVlLlxuICAgKi9cbiAgX29uTmV4dCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBjYW5BZHZhbmNlLCBpc1F1ZXVlRW5kfSkge1xuICAgIC8vIEV4aXQgaWYgdGhpcyBpc24ndCBhIG1hbmFnZWQgbGF5ZXJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEV4aXQgaWYgaXQgaXNuJ3QgYSBtYW5hZ2VkIGFuaW1hdGlvblxuICAgIGNvbnN0IGFuaW1hdGlvbiA9IGxheWVyLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV07XG4gICAgaWYgKGFuaW1hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU3RhcnQgYSBuZXcgdGltZXIgZm9yIGxvb3Bpbmcgc3RhdGVzIHRoYXQgYXJlbid0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlXG4gICAgaWYgKCFjYW5BZHZhbmNlICYmICFpc1F1ZXVlRW5kICYmIGxheWVyLmN1cnJlbnRHZXN0dXJlID09PSBhbmltYXRpb25OYW1lKSB7XG4gICAgICBjb25zdCBob2xkVGltZSA9IHRoaXMuX2dldEhvbGRUaW1lKGxheWVyLCBhbmltYXRpb24pO1xuICAgICAgbGF5ZXIuaG9sZFRpbWVyLmNhbmNlbCgpO1xuXG4gICAgICAvLyBTa2lwIHRvIHRoZSBuZXh0IGFuaW1hdGlvbiByaWdodCBhd2F5IGlmIGhvbGQgdGltZSBpcyB6ZXJvXG4gICAgICBpZiAoaG9sZFRpbWUgPD0gMCkge1xuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUucGxheU5leHRBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2FpdCBmb3IgdGhlIGdpdmVuIGhvbGQgdGltZSBiZWZvcmUgcHJvZ3Jlc3NpbmdcbiAgICAgIGVsc2Uge1xuICAgICAgICBsYXllci5ob2xkVGltZXIgPSBVdGlscy53YWl0KGhvbGRUaW1lLCB7XG4gICAgICAgICAgb25GaW5pc2g6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIEFkdmFuY2UgdGhlIHF1ZXVlIHRvIHRoZSBuZXh0IHN0YXRlXG4gICAgICAgICAgICBpZiAobGF5ZXIuY3VycmVudEdlc3R1cmUgPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBsYXlOZXh0QW5pbWF0aW9uKFxuICAgICAgICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB7QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3N0b3BBbmltYXRpb259IGV2ZW50LiBJZiB0aGVcbiAgICogZXZlbnQgaXMgZW1pdHRlZCBmb3IgYSBtYW5hZ2VkIGFuaW1hdGlvbiBjYW5jZWwgdGhlIGxheWVyJ3Mgc3RvcmVkIHRpbWVycy5cbiAgICogSWYgdGhlIGxheWVyIGlzIHNldCB0byBhdXRvLWRpc2FibGUgc2V0IGl0cyB3ZWlnaHQgdG8gMC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIG9iamVjdCBwYXNzZWQgZnJvbSBwbGF5TmV4dEFuaW1hdGlvbiBldmVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgc3RvcHBlZCBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHN0b3BwZWQuXG4gICAqL1xuICBfb25TdG9wKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyBtYW5hZ2VkXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyBtYW5hZ2VkXG4gICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXTtcbiAgICBpZiAoYW5pbWF0aW9uICE9PSB1bmRlZmluZWQgJiYgYW5pbWF0aW9uTmFtZSA9PT0gbGF5ZXIuY3VycmVudEdlc3R1cmUpIHtcbiAgICAgIGxheWVyLmN1cnJlbnRHZXN0dXJlID0gbnVsbDtcbiAgICAgIGxheWVyLnBsYXlUaW1lciA9IG51bGw7XG4gICAgICBsYXllci5ob2xkVGltZXIuY2FuY2VsKCk7XG5cbiAgICAgIC8vIFR1cm4gb2ZmIGxheWVyIHdlaWdodFxuICAgICAgaWYgKGxheWVyLmF1dG9EaXNhYmxlKSB7XG4gICAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKG5hbWUgPT4gbmFtZSA9PT0gbGF5ZXJOYW1lLCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfb25BbmltYXRpb25BZGRlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge1xuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xuXG4gICAgaWYgKGxheWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFuaW1hdGlvbiA9IGxheWVyLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV07XG5cbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSBhbmltYXRpb24gYXMgYWN0aXZlIGlmIGl0IGlzIHVubWFuYWdlZFxuICAgICAgaWYgKGFuaW1hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKTtcbiAgICAgIH1cbiAgICAgIC8vIE1hcmsgdGhlIGFuaW1hdGlvbiBhcyBhY3RpdmUgaWYgaXQgaXMgbWFuYWdlZFxuICAgICAgZWxzZSB7XG4gICAgICAgIGFuaW1hdGlvbi5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJMYXllcihuYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICBzdXBlci5yZWdpc3RlckxheWVyKG5hbWUsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBob2xkVGltZXI6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICAgIHBsYXlUaW1lcjogbnVsbCxcbiAgICAgIGN1cnJlbnRHZXN0dXJlOiBudWxsLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uaXNBY3RpdmUpIHtcbiAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25zKG5hbWUpLmZvckVhY2goYW5pbSA9PiB7XG4gICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgcmVnaXN0ZXIgYWxsIGFuaW1hdGlvbnMgb24gdGhlIGxheWVyXG4gICAgICAgIGlmICh0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdLmFuaW1hdGlvbnNbYW5pbV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMucmVnaXN0ZXJBbmltYXRpb24oXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYW5pbSxcbiAgICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uYW5pbWF0aW9uc1thbmltXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gVHJ5IHRvIGZhbGwgYmFjayB0byBhIGRlZmF1bHQgd29yZCBhcnJheVxuICAgIGlmICghKG9wdGlvbnMud29yZHMgaW5zdGFuY2VvZiBBcnJheSkgJiYgIShvcHRpb25zLndvcmRzIGluc3RhbmNlb2YgU2V0KSkge1xuICAgICAgb3B0aW9ucy53b3JkcyA9IERlZmF1bHRHZXN0dXJlV29yZHNbYW5pbWF0aW9uTmFtZV0gfHwgW107XG4gICAgfVxuXG4gICAgc3VwZXIucmVnaXN0ZXJBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gb2JqZWN0IHRoYXQgbWFwcyBzc21sIG1hcmsgc3ludGF4IHJlcXVpcmVkIHRvIHBsYXkgZWFjaCBnZXN0dXJlIHRvXG4gICAqIHRoZSB3b3JkcyBhcnJheSBhc3NvY2lhdGVkIHdpdGggZWFjaCBnZXN0dXJlLiBXb3JkcyBhcnJheXMgYXJlIGRlZmluZWQgYXQgd2hlblxuICAgKiB0aGUgZ2VzdHVyZSBhbmltYXRpb24gaXMgcmVnaXN0ZXJlZC4gR2VzdHVyZXMgd2l0aG91dCBhc3NvY2lhdGVkIHdvcmRzIHdpbGxcbiAgICogYmUgZXhjbHVkZWQgZnJvbSB0aGUgcmVzdWx0LiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCBhcyBhbiBpbnB1dFxuICAgKiBmb3Ige0BsaW5rIFRleHRUb1NwZWVjaFV0aWxzLmF1dG9HZW5lcmF0ZVNTTUxNYXJrc30gdG8gdXBkYXRlIGEgc3BlZWNoIHN0cmluZ1xuICAgKiB3aXRoIHRoZSBtYXJrdXAgcmVxdWlyZWQgdG8gcGxheSBnZXN0dXJlcyB0aW1lZCB3aXRoIHRoZWlyIGFzc29jaWF0ZWQgd29yZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuICBjcmVhdGVHZXN0dXJlTWFwKCkge1xuICAgIGNvbnN0IGdlc3R1cmVNYXAgPSB7fTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX21hbmFnZWRMYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIHthbmltYXRpb25zfV0pID0+IHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGFuaW1hdGlvbnMpLmZvckVhY2goXG4gICAgICAgIChbXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcbiAgICAgICAgICB7aG9sZFRpbWUsIG1pbmltdW1JbnRlcnZhbCwgd29yZHMsIHRyYW5zaXRpb25UaW1lfSxcbiAgICAgICAgXSkgPT4ge1xuICAgICAgICAgIC8vIE9ubHkgc3RvcmUgZ2VzdHVyZXMgdGhhdCBoYXZlIGFueSBhc3NvY2lhdGVkIHdvcmRzXG4gICAgICAgICAgaWYgKHdvcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgLi4uKGhvbGRUaW1lICYmIHsgaG9sZFRpbWUgfSksXG4gICAgICAgICAgICAgIC4uLihtaW5pbXVtSW50ZXJ2YWwgJiYgeyBtaW5pbXVtSW50ZXJ2YWwgfSksXG4gICAgICAgICAgICAgIC4uLih0cmFuc2l0aW9uVGltZSAmJiB7IHRyYW5zaXRpb25UaW1lIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHtcbiAgICAgICAgICAgICAgZmVhdHVyZTogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgICAgICAgICBtZXRob2Q6ICdwbGF5R2VzdHVyZScsXG4gICAgICAgICAgICAgIGFyZ3M6IFtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIG9wdGlvbnNdLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZ2VzdHVyZU1hcFtKU09OLnN0cmluZ2lmeShrZXkpXSA9IHdvcmRzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBnZXN0dXJlTWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHNzbWwgbWFyayBzeW50YXggcmVxdWlyZWQgdG8gcGxheSBlYWNoIGdlc3R1cmVcbiAgICogdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBhc3NvY2lhdGVkIHdvcmRzLiBUaGUgcmVzdWx0aW5nIGFycmF5IGNhbiBiZSB1c2VkIGFzXG4gICAqIGFuIGlucHV0IGZvciB7QGxpbmsgVGV4dFRvU3BlZWNoVXRpbHMuYXV0b0dlbmVyYXRlU1NNTE1hcmtzfSBvclxuICAgKiB7QGxpbmsgVGV4dFRvU3BlZWNoVXRpbHMuYWRkTWFya3NUb1VubWFya2VkU2VudGVuY2VzfSB0byB1cGRhdGUgYSBzcGVlY2hcbiAgICogc3RyaW5nIHdpdGggdGhlIG1hcmt1cCByZXF1aXJlZCB0byBwbGF5IHJhbmRvbSBnZXN0dXJlcyBhdCBlYWNoIHVubWFya2VkXG4gICAqIHNlbnRlbmNlIGluIHRoZSBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBsYXllcnMgLSBBbiBhcnJheSBvZiBuYW1lcyBvZiBtYW5hZ2VkIGxheWVycyB0byBnZW5lcmF0ZVxuICAgKiBtYXJrcyBmb3IuIElmIHVuZGVmaW5lZCwgdXNlIGFsbCBtYW5hZ2VkIGxheWVycy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fVxuICAgKi9cbiAgY3JlYXRlR2VuZXJpY0dlc3R1cmVBcnJheShsYXllcnMpIHtcbiAgICBjb25zdCBnZW5lcmljR2VzdHVyZXMgPSBbXTtcbiAgICBsYXllcnMgPSBsYXllcnMgfHwgT2JqZWN0LmtleXModGhpcy5fbWFuYWdlZExheWVycyk7XG5cbiAgICBsYXllcnMuZm9yRWFjaChsYXllck5hbWUgPT4ge1xuICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgbWFuYWdlZFxuICAgICAgaWYgKCFsYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5lbnRyaWVzKGxheWVyLmFuaW1hdGlvbnMpLmZvckVhY2goXG4gICAgICAgIChbXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcbiAgICAgICAgICB7IGhvbGRUaW1lLCBtaW5pbXVtSW50ZXJ2YWwsIHdvcmRzLCB0cmFuc2l0aW9uVGltZSB9LFxuICAgICAgICBdKSA9PiB7XG4gICAgICAgICAgLy8gT25seSBzdG9yZSBnZXN0dXJlcyB0aGF0IGRvbid0IGhhdmUgYW55IGFzc29jaWF0ZWQgd29yZHNcbiAgICAgICAgICBpZiAoIXdvcmRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgLi4uKGhvbGRUaW1lICYmIHsgaG9sZFRpbWUgfSksXG4gICAgICAgICAgICAgIC4uLihtaW5pbXVtSW50ZXJ2YWwgJiYgeyBtaW5pbXVtSW50ZXJ2YWwgfSksXG4gICAgICAgICAgICAgIC4uLih0cmFuc2l0aW9uVGltZSAmJiB7IHRyYW5zaXRpb25UaW1lIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgZmVhdHVyZTogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgICAgICAgICBtZXRob2Q6ICdwbGF5R2VzdHVyZScsXG4gICAgICAgICAgICAgIGFyZ3M6IFtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIG9wdGlvbnNdLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghZ2VuZXJpY0dlc3R1cmVzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgZ2VuZXJpY0dlc3R1cmVzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ2VuZXJpY0dlc3R1cmVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsYXkgYSBtYW5hZ2VkIGdlc3R1cmUgYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGdlc3R1cmVcbiAgICogYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBnZXN0dXJlIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgZ2VzdHVyZSBvcHRpb25zLlxuICAgKiBAcGFyYW0ge251bWJlcj19IG9wdGlvbnMuaG9sZFRpbWUgLSBUaGlzIG9wdGlvbiBvbmx5IGFwcGxpZXMgdG8ge0BsaW5rIFF1ZXVlU3RhdGV9XG4gICAqIGdlc3R1cmVzLiBXaGVuIGEgUXVldWVTdGF0ZSBnZXN0dXJlIHByb2dyZXNzZXMgdG8gYSBsb29waW5nIHN0YXRlLCB0aGlzIG9wdGlvblxuICAgKiBkZWZpbmVzIGhvdyBtYW55IHNlY29uZHMgc2hvdWxkIGVsYXBzZSBiZWZvcmUgbW92aW5nIHRoZSBxdWV1ZSBmb3J3YXJkLiBJZlxuICAgKiB1bmRlZmluZWQsIGl0IHdpbGwgZmFsbCBiYWNrIGZpcnN0IHRvIHRoZSBob2xkVGltZSBkZWZpbmVkIGluIHRoZSBvcHRpb25zIHdoZW5cbiAgICogdGhlIGdlc3R1cmUgYW5pbWF0aW9uIHdhcyByZWdpc3RlcmVkIGFuZCB0aGVuIHRvIHRoZSBob2xkVGltZSBkZWZpbmVkIG9uIHRoZVxuICAgKiBmZWF0dXJlLlxuICAgKiBAcGFyYW0ge251bWJlcj19IG9wdGlvbnMubWluaW11bUludGVydmFsIC0gVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhhdFxuICAgKiBtdXN0IGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIGEgZ2VzdHVyZSB3YXMgcGxheWVkLlxuICAgKi9cbiAgcGxheUdlc3R1cmUoXG4gICAgbGF5ZXJOYW1lLFxuICAgIGFuaW1hdGlvbk5hbWUsXG4gICAge2hvbGRUaW1lLCBtaW5pbXVtSW50ZXJ2YWwsIHRyYW5zaXRpb25UaW1lLCBmb3JjZSA9IGZhbHNlfSA9IHt9XG4gICkge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGlzIHJlZ2lzdGVyZWRcbiAgICBpZiAoXG4gICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhpcy5yZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIHtcbiAgICAgICAgaG9sZFRpbWUsXG4gICAgICAgIG1pbmltdW1JbnRlcnZhbCxcbiAgICAgICAgdHJhbnNpdGlvblRpbWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBjb25zdCBhbmltYXRpb24gPSBsYXllci5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgYWN0aXZlXG4gICAgaWYgKCFhbmltYXRpb24uaXNBY3RpdmUpIHtcbiAgICAgIC8vIENyZWF0ZSB3YXJuaW5nIG1lc3NhZ2UgYmFzZWQgb24gd2hpY2ggb2JqZWN0IGRvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICBjb25zdCB0eXBlTmFtZSA9IGxheWVyLmlzQWN0aXZlID8gJ2FuaW1hdGlvbicgOiAnbGF5ZXInO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBTa2lwcGluZyBnZXN0dXJlICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vICR7dHlwZU5hbWV9IGV4aXN0cyB3aXRoIHRoaXMgbmFtZSB5ZXQuYDtcblxuICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIERlZmVycmVkLmNhbmNlbCh7cmVhc29uOiAnaW5hY3RpdmUnLCB2YWx1ZTogdHlwZU5hbWV9KTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgZ2VzdHVyZSBpcyBhbHJlYWR5IHBsYXlpbmdcbiAgICBjb25zdCB7Y3VycmVudEdlc3R1cmV9ID0gbGF5ZXI7XG4gICAgaWYgKGN1cnJlbnRHZXN0dXJlID09PSBhbmltYXRpb25OYW1lICYmICFmb3JjZSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBTa2lwcGluZyBnZXN0dXJlICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFRoZSBnZXN0dXJlIGlzIGFscmVhZHkgcGxheWluZy4gVXNlIG9wdGlvbnMuZm9yY2UgdG8gZm9yY2UgdGhlIGdlc3R1cmUgcmVwbGF5LCB3aGljaCBtYXkgcmVzdWx0IGluIGEgaGFyZCB0cmFuc2l0aW9uLmA7XG5cbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICAgIHJldHVybiBEZWZlcnJlZC5jYW5jZWwoe3JlYXNvbjogJ3BsYXlpbmcnLCB2YWx1ZTogYW5pbWF0aW9uTmFtZX0pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBhbmltYXRpb24gb3B0aW9uc1xuICAgIGlmIChob2xkVGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbmltYXRpb24uaG9sZFRpbWUgPSBob2xkVGltZTtcbiAgICB9XG5cbiAgICBpZiAobWluaW11bUludGVydmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFuaW1hdGlvbi5taW5pbXVtSW50ZXJ2YWwgPSBtaW5pbXVtSW50ZXJ2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1pbmltdW1JbnRlcnZhbCA9IHRoaXMuX2dldE1pbmltdW1JbnRlcnZhbChsYXllciwgYW5pbWF0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayB0aGUgaW50ZXJ2YWxcbiAgICBpZiAoIWZvcmNlICYmIGxheWVyLnBsYXlUaW1lciAhPT0gbnVsbCAmJiBsYXllci5wbGF5VGltZXIgPCBtaW5pbXVtSW50ZXJ2YWwpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFNraXBwaW5nIGdlc3R1cmUgJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTWluaW11bSBpbnRlcnZhbCAke21pbmltdW1JbnRlcnZhbH0gaGFzIG5vdCBiZWVuIG1ldC5gXG4gICAgICApO1xuICAgICAgcmV0dXJuIERlZmVycmVkLmNhbmNlbCh7XG4gICAgICAgIHJlYXNvbjogJ21pbmltdW1JbnRlcnZhbCcsXG4gICAgICAgIHZhbHVlOiBtaW5pbXVtSW50ZXJ2YWwgLSBsYXllci5wbGF5VGltZXIsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQbGF5IHRoZSBhbmltYXRpb25cbiAgICBsYXllci5jdXJyZW50R2VzdHVyZSA9IGFuaW1hdGlvbk5hbWU7XG4gICAgbGF5ZXIucGxheVRpbWVyID0gMDtcbiAgICBsYXllci5ob2xkVGltZXIuY2FuY2VsKCk7XG4gICAgaWYgKGxheWVyLmF1dG9EaXNhYmxlKSB7XG4gICAgICB0aGlzLnNldExheWVyV2VpZ2h0cyhuYW1lID0+IG5hbWUgPT09IGxheWVyTmFtZSwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5wbGF5QW5pbWF0aW9uKFxuICAgICAgbGF5ZXJOYW1lLFxuICAgICAgYW5pbWF0aW9uTmFtZSxcbiAgICAgIHRyYW5zaXRpb25UaW1lXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcblxuICAgIC8vIEluY3JlbWVudCB0aGUgdGltZXJzXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fbWFuYWdlZExheWVycykuZm9yRWFjaCgoW25hbWUsIG9wdGlvbnNdKSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5pc0FjdGl2ZSAmJiAhdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldFBhdXNlZChuYW1lKSkge1xuICAgICAgICBvcHRpb25zLmhvbGRUaW1lci5leGVjdXRlKGRlbHRhVGltZSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGxheVRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgICAgb3B0aW9ucy5wbGF5VGltZXIgKz0gZGVsdGFUaW1lIC8gMTAwMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaW5zdGFsbEFwaSgpIHtcbiAgICAvKipcbiAgICAgKiBAaW5uZXJcbiAgICAgKiBAbmFtZXNwYWNlIEdlc3R1cmVGZWF0dXJlXG4gICAgICovXG4gICAgY29uc3QgYXBpID0gc3VwZXIuaW5zdGFsbEFwaSgpO1xuXG4gICAgT2JqZWN0LmFzc2lnbihhcGksIHtcbiAgICAgIC8qKlxuICAgICAgICogQG1lbWJlcm9mIEdlc3R1cmVGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgR2VzdHVyZUZlYXR1cmUjY3JlYXRlR2VzdHVyZU1hcFxuICAgICAgICovXG4gICAgICBjcmVhdGVHZXN0dXJlTWFwOiB0aGlzLmNyZWF0ZUdlc3R1cmVNYXAuYmluZCh0aGlzKSxcbiAgICAgIC8qKlxuICAgICAgICogQG1lbWJlcm9mIEdlc3R1cmVGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgR2VzdHVyZUZlYXR1cmUjY3JlYXRlR2VuZXJpY0dlc3R1cmVBcnJheVxuICAgICAgICovXG4gICAgICBjcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5OiB0aGlzLmNyZWF0ZUdlbmVyaWNHZXN0dXJlQXJyYXkuYmluZCh0aGlzKSxcbiAgICAgIC8qKlxuICAgICAgICogQG1lbWJlcm9mIEdlc3R1cmVGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgR2VzdHVyZUZlYXR1cmUjcGxheUdlc3R1cmVcbiAgICAgICAqL1xuICAgICAgcGxheUdlc3R1cmU6IHRoaXMucGxheUdlc3R1cmUuYmluZCh0aGlzKSxcbiAgICB9KTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhHZXN0dXJlRmVhdHVyZSwge1xuICBERUZBVUxUX0xBWUVSX09QVElPTlM6IHtcbiAgICB2YWx1ZToge1xuICAgICAgLi4uR2VzdHVyZUZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLFxuICAgICAgYXV0b0Rpc2FibGU6IHRydWUsXG4gICAgfSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG4gIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xuICAgIHZhbHVlOiB7XG4gICAgICAuLi5HZXN0dXJlRmVhdHVyZS5FVkVOVF9ERVBFTkRFTkNJRVMsXG4gICAgICBBbmltYXRpb25GZWF0dXJlOiB7XG4gICAgICAgIC4uLkdlc3R1cmVGZWF0dXJlLkVWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLFxuICAgICAgICBwbGF5TmV4dEFuaW1hdGlvbjogJ19vbk5leHQnLFxuICAgICAgICBzdG9wQW5pbWF0aW9uOiAnX29uU3RvcCcsXG4gICAgICAgIGludGVycnVwdEFuaW1hdGlvbjogJ19vblN0b3AnXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgR2VzdHVyZUZlYXR1cmU7XG5leHBvcnQge0RlZmF1bHRHZXN0dXJlV29yZHN9O1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBVdGlscyBmcm9tICdjb3JlL1V0aWxzJztcclxuaW1wb3J0IE1hdGhVdGlscyBmcm9tICdjb3JlL01hdGhVdGlscyc7XHJcbmltcG9ydCB7TGluZWFyfSBmcm9tICcuL0Vhc2luZyc7XHJcblxyXG4vKipcclxuICogQSBjb2xsZWN0aW9uIG9mIHVzZWZ1bCBhbmltYXRpb24gZnVuY3Rpb25zLlxyXG4gKlxyXG4gKiBAaGlkZWNvbnN0cnVjdG9yXHJcbiAqL1xyXG5jbGFzcyBBbmltYXRpb25VdGlscyB7XHJcbiAgc3RhdGljIGxlcnAoZnJvbSwgdG8sIGZhY3Rvcikge1xyXG4gICAgY29uc29sZS53YXJuKGBBbmltYXRpb25VdGlscy5sZXJwIGlzIGJlaW5nIGRlcHJlY2F0ZWQuIFVzZSBNYXRoVXRpbHMubGVycCBpbnN0ZWFkLmApO1xyXG5cclxuICAgIHJldHVybiBNYXRoVXRpbHMubGVycChmcm9tLCB0bywgZmFjdG9yKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsYW1wIGEgbnVtYmVyIGJldHdlZW4gMiB2YWx1ZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBWYWx1ZSB0byBjbGFtcC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbj0wXSAtIE1pbnVtdW0gdmFsdWUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttYXg9MV0gLSBNYXhpbXVtIHZhbHVlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBzdGF0aWMgY2xhbXAodmFsdWUsIG1pbiA9IDAsIG1heCA9IDEpIHtcclxuICAgIGNvbnNvbGUud2FybihgQW5pbWF0aW9uVXRpbHMuY2xhbXAgaXMgYmVpbmcgZGVwcmVjYXRlZC4gVXNlIE1hdGhVdGlscy5jbGFtcCBpbnN0ZWFkLmApO1xyXG5cclxuICAgIHJldHVybiBNYXRoVXRpbHMuY2xhbXAodmFsdWUsIG1pbiwgbWF4KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGRlZmVycmVkIHByb21pc2UgdGhhdCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlIHZhbHVlIG9mIGEgbnVtZXJpY1xyXG4gICAqIHByb3BlcnR5IG9mIHRoaXMgb2JqZWN0IG92ZXIgdGltZS4gUGFzcyBkZWx0YSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB0aGVcclxuICAgKiBkZWZlcnJlZCBwcm9taXNlJ3MgZXhlY3V0ZSBtZXRob2QgaW4gYW4gdXBkYXRlIGxvb3AgdG8gYW5pbWF0ZSB0aGUgcHJvcGVydHlcclxuICAgKiB0b3dhcmRzIHRoZSB0YXJnZXQgdmFsdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydHlPd25lciAtIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwcm9wZXJ0eSB0byBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGFuaW1hdGUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRhcmdldFZhbHVlIC0gVGFyZ2V0IHZhbHVlIHRvIHJlYWNoLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0XHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnNlY29uZHM9MF0gLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCB3aWxsIHRha2UgdG8gcmVhY2hcclxuICAgKiB0aGUgdGFyZ2V0IHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmVhc2luZ0ZuPUxpbmVhci5Jbk91dF0gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMub25GaW5pc2hdIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBvbmNlIHRoZSBhbmltYXRpb24gY29tcGxldGVzLlxyXG4gICAqIFRoZSB0YXJnZXQgdmFsdWUgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uUHJvZ3Jlc3MgLSBDYWxsYmFjayB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgYW5pbWF0aW9uXHJcbiAgICogcHJvcGVydHkgaXMgdXBkYXRlZCBkdXJpbmcgdGhlIGFuaW1hdGlvbi4gVGhlIHByb3BlcnR5J3MgdmFsdWUgYXQgdGhlIHRpbWUgb2ZcclxuICAgKiB0aGUgdXBkYXRlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkNhbmNlbCAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIHVzZXIgY2FuY2VscyB0aGVcclxuICAgKiBhbmltYXRpb24gYmVmb3JlIGNvbXBsZXRpb24uIFRoZSBhbmltYXRpb24gcHJvcGVydHkncyB2YWx1ZSBhdCB0aGUgdGltZSBvZlxyXG4gICAqIGNhbmNlbCBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25FcnJvciAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIGFuaW1hdGlvbiBzdG9wc1xyXG4gICAqIGJlY2F1c2UgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuIFRoZSBlcnJvciBtZXNzYWdlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgd2l0aCB0aGUgcHJvcGVydHkncyB2YWx1ZSBvbmNlIGl0IHJlYWNoZXMgdGhlXHJcbiAgICogdGFyZ2V0IHZhbHVlLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBpbnRlcnBvbGF0ZVByb3BlcnR5KFxyXG4gICAgcHJvcGVydHlPd25lcixcclxuICAgIHByb3BlcnR5TmFtZSxcclxuICAgIHRhcmdldFZhbHVlLFxyXG4gICAge3NlY29uZHMgPSAwLCBlYXNpbmdGbiwgb25GaW5pc2gsIG9uUHJvZ3Jlc3MsIG9uQ2FuY2VsLCBvbkVycm9yfSA9IHt9XHJcbiAgKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgcHJvcGVydHkgaXMgYW4gb2JqZWN0XHJcbiAgICBpZiAoIShwcm9wZXJ0eU93bmVyIGluc3RhbmNlb2YgT2JqZWN0KSkge1xyXG4gICAgICBjb25zdCBlID0gbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgaW50ZXJwb2xhdGUgcHJvcGVydHkgJHtwcm9wZXJ0eU5hbWV9LiBQcm9wZXJ0eSBvd25lciBtdXN0IGJlIGFuIG9iamVjdC5gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkVycm9yKGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSBwcm9wZXJ0eSBpcyBudW1lcmljXHJcbiAgICBpZiAoTnVtYmVyLmlzTmFOKE51bWJlcihwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV0pKSkge1xyXG4gICAgICBjb25zdCBlID0gbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgaW50ZXJwb2xhdGUgcHJvcGVydHkgJHtwcm9wZXJ0eU5hbWV9LiBQcm9wZXJ0eSBtdXN0IGJlIG51bWVyaWMuYFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkVycm9yID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25FcnJvcihlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIHRhcmdldCB2YWx1ZSBpcyBudW1lcmljXHJcbiAgICBpZiAoTnVtYmVyLmlzTmFOKE51bWJlcih0YXJnZXRWYWx1ZSkpKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBpbnRlcnBvbGF0ZSBwcm9wZXJ0eSAke3Byb3BlcnR5TmFtZX0gdG8gdmFsdWUgJHt0YXJnZXRWYWx1ZX0uIFRhcmdldCB2YWx1ZSBtdXN0IGJlIG51bWVyaWMuYFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkVycm9yID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25FcnJvcihlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXNvbHZlIGltbWVkaWF0ZWx5IGlmIHRoZSB0YXJnZXQgaGFzIGFscmVhZHkgYmVlbiByZWFjaGVkXHJcbiAgICBjb25zdCBzdGFydFZhbHVlID0gcHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdO1xyXG5cclxuICAgIGlmIChzdGFydFZhbHVlID09PSB0YXJnZXRWYWx1ZSkge1xyXG4gICAgICBpZiAodHlwZW9mIG9uRmluaXNoID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25GaW5pc2godGFyZ2V0VmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVzb2x2ZSh0YXJnZXRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGVmYXVsdCB0byBsaW5lYXIgaW50ZXJwb2xhdGlvblxyXG4gICAgaWYgKHR5cGVvZiBlYXNpbmdGbiAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBpZiAoZWFzaW5nRm4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIGBJbnZhbGlkIHByb3BlcnR5IGludGVycG9sYXRpb24gZWFzaW5nRm4uIERlZmF1bHRpbmcgdG8gbGluZWFyIGludGVycG9sYXRpb24uYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGVhc2luZ0ZuID0gTGluZWFyLkluT3V0O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGludGVycG9sYXRvciA9IFV0aWxzLndhaXQoc2Vjb25kcywge1xyXG4gICAgICBvbkZpbmlzaDogKCkgPT4ge1xyXG4gICAgICAgIHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSA9IHRhcmdldFZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9uRmluaXNoID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBvbkZpbmlzaCh0YXJnZXRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBvbkNhbmNlbDogKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb25DYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIG9uQ2FuY2VsKHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBvblByb2dyZXNzOiBwcm9ncmVzcyA9PiB7XHJcbiAgICAgICAgaWYgKHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSAhPT0gdGFyZ2V0VmFsdWUpIHtcclxuICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbGVycCBmYWN0b3JcclxuICAgICAgICAgIGNvbnN0IGVhc2VGYWN0b3IgPSBlYXNpbmdGbihwcm9ncmVzcyk7XHJcblxyXG4gICAgICAgICAgaWYgKHR5cGVvZiBlYXNlRmFjdG9yICE9PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICBjb25zdCBlID0gbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgIGBJbnZhbGlkIHByb3BlcnR5IGludGVycG9sYXRpb24gZWFzaW5nRm4uIEVhc2luZ0ZuIG11c3QgcmV0dXJuIGEgbnVtYmVyLmBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaW50ZXJwb2xhdG9yLnJlamVjdChlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdmFsdWVcclxuICAgICAgICAgIHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSA9IE1hdGhVdGlscy5sZXJwKFxyXG4gICAgICAgICAgICBzdGFydFZhbHVlLFxyXG4gICAgICAgICAgICB0YXJnZXRWYWx1ZSxcclxuICAgICAgICAgICAgZWFzZUZhY3RvclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNpZ25hbCBwcm9ncmVzc1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb25Qcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgb25Qcm9ncmVzcyhwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2lnbmFsIGNvbXBsZXRpb24gb25jZSB0aW1lIGlzIHVwXHJcbiAgICAgICAgaWYgKHByb2dyZXNzID09PSAxKSB7XHJcbiAgICAgICAgICBwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV0gPSB0YXJnZXRWYWx1ZTtcclxuICAgICAgICAgIGludGVycG9sYXRvci5yZXNvbHZlKHRhcmdldFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uRXJyb3IsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gaW50ZXJwb2xhdG9yO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uVXRpbHM7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuLi9BbmltYXRpb25VdGlscyc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYSBzdGF0ZSBpbiBvdXIgYW5pbWF0aW9uIHN5c3RlbS5cbiAqXG4gKiBAYWJzdHJhY3RcbiAqL1xuY2xhc3MgQWJzdHJhY3RTdGF0ZSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGNvbnRhaW5lciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0byBhbmQgc2hvdWxkIGJlIHZhbGlkYXRlZCBhdFxuICAgKiB0aGUgY29udGFpbmVyIGxldmVsLiBJZiBubyBuYW1lIGlzIGdpdmVuIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgY29uc3RydWN0b3JcbiAgICogbmFtZS5cbiAgICogQHBhcmFtIHt3ZWlnaHR9IFtvcHRpb25zLndlaWdodD0wXSAtIFRoZSAwLTEgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgc3RhdGUgd2lsbCBoYXZlLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5uYW1lID1cbiAgICAgIG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHRoaXMuX3dlaWdodCA9XG4gICAgICBvcHRpb25zLndlaWdodCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gTWF0aFV0aWxzLmNsYW1wKG9wdGlvbnMud2VpZ2h0LCAwLCAxKVxuICAgICAgICA6IDA7XG4gICAgdGhpcy5faW50ZXJuYWxXZWlnaHQgPSB0aGlzLl93ZWlnaHQ7XG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLl9wcm9taXNlcyA9IHtcbiAgICAgIGZpbmlzaDogRGVmZXJyZWQucmVzb2x2ZSgpLFxuICAgICAgd2VpZ2h0OiBEZWZlcnJlZC5yZXNvbHZlKCksXG4gICAgICBwbGF5OiBEZWZlcnJlZC5yZXNvbHZlKCksXG4gICAgfTtcblxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3MgPSB7XG4gICAgICBvbkZpbmlzaDogdW5kZWZpbmVkLFxuICAgICAgb25FcnJvcjogdW5kZWZpbmVkLFxuICAgICAgb25DYW5jZWw6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHN0YXRlIGlzIGN1cnJlbnRseSBwYXVzZWQuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgcGF1c2VkKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXVzZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodC5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB3ZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dlaWdodDtcbiAgfVxuXG4gIHNldCB3ZWlnaHQod2VpZ2h0KSB7XG4gICAgdGhpcy5fd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCwgMCwgMSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgd2VpZ2h0IGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IHdlaWdodFBlbmRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLndlaWdodCAmJiB0aGlzLl9wcm9taXNlcy53ZWlnaHQucGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0IG92ZXIgdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRoZSB0YXJnZXQgd2VpZ2h0IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZVxuICAgKiB0YXJnZXQgd2VpZ2h0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgaW50ZXJwb2xhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgc2V0V2VpZ2h0KHdlaWdodCwgc2Vjb25kcyA9IDAsIGVhc2luZ0ZuKSB7XG4gICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LmNhbmNlbCgpO1xuICAgIHdlaWdodCA9IE1hdGhVdGlscy5jbGFtcCh3ZWlnaHQpO1xuXG4gICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0ID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcbiAgICAgIHRoaXMsXG4gICAgICAnd2VpZ2h0JyxcbiAgICAgIHdlaWdodCxcbiAgICAgIHtzZWNvbmRzLCBlYXNpbmdGbn1cbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLndlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpbnRlcm5hbCB3ZWlnaHQuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGludGVybmFsV2VpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbFdlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWx0aXBsaWVzIHRoZSB1c2VyIHdlaWdodCBieSBhIGZhY3RvciB0byBkZXRlcm1pbmUgdGhlIGludGVybmFsIHdlaWdodC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBtdWx0aXBsaWVyIHRvIGFwcGx5IHRvIHRoZSB1c2VyIHdlaWdodC5cbiAgICovXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHRoaXMuX2ludGVybmFsV2VpZ2h0ID0gdGhpcy5fd2VpZ2h0ICogZmFjdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhbnkgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBldmFsdWF0ZWQgZXZlcnkgZnJhbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXG4gICAqL1xuICB1cGRhdGUoZGVsdGFUaW1lKSB7XG4gICAgaWYgKCF0aGlzLl9wYXVzZWQpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5fcHJvbWlzZXMpLmZvckVhY2gocHJvbWlzZSA9PiB7XG4gICAgICAgIHByb21pc2UuZXhlY3V0ZShkZWx0YVRpbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHBsYXliYWNrIG9mIHRoZSBzdGF0ZSBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgc3RhdGUgZmluaXNoZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCA9IG9uRmluaXNoO1xuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvciA9IG9uRXJyb3I7XG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbCA9IG9uQ2FuY2VsO1xuXG4gICAgdGhpcy5fcHJvbWlzZXMucGxheSA9IG5ldyBEZWZlcnJlZCh1bmRlZmluZWQsIG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG4gICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoID0gRGVmZXJyZWQuYWxsKFtcbiAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXksXG4gICAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQsXG4gICAgXSk7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdXNlIHBsYXliYWNrIG9mIHRoZSBzdGF0ZS4gVGhpcyBwcmV2ZW50cyBwZW5kaW5nIHByb21pc2VzIGZyb20gYmVpbmcgZXhlY3V0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcGF1c2UoKSB7XG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgcGxheWJhY2sgb2YgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIHN0YXRlIGZpbmlzaGVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHN0YXRlIGVuY291bnRlcnNcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHBsYXliYWNrIGlzIGNhbmNlbGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMuX3Byb21pc2VzLnBsYXkucGVuZGluZykge1xuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCA9IG9uRmluaXNoIHx8IHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2g7XG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IgPSBvbkVycm9yIHx8IHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvcjtcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWwgPSBvbkNhbmNlbCB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsO1xuXG4gICAgICB0aGlzLl9wcm9taXNlcy5wbGF5ID0gbmV3IERlZmVycmVkKFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2gsXG4gICAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvcixcbiAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbFxuICAgICAgKTtcbiAgICAgIHRoaXMuX3Byb21pc2VzLmZpbmlzaCA9IERlZmVycmVkLmFsbChbXG4gICAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXksXG4gICAgICAgIHRoaXMuX3Byb21pc2VzLndlaWdodCxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIHBsYXliYWNrIG9mIHRoZSBzdGF0ZSBhbmQgY2FuY2VsIGFueSBwZW5kaW5nIHByb21pc2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xuXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9wcm9taXNlcykuZm9yRWFjaChwcm9taXNlID0+IHtcbiAgICAgIHByb21pc2UuY2FuY2VsKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHBsYXliYWNrIG9mIHRoZSBzdGF0ZSBhbmQgcmVzb2x2ZSBhbnkgcGVuZGluZyBwcm9taXNlcy5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdG9wKCkge1xuICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XG5cbiAgICBPYmplY3QudmFsdWVzKHRoaXMuX3Byb21pc2VzKS5mb3JFYWNoKHByb21pc2UgPT4ge1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMgYW5kIHJlbW92ZSByZWZlcmVuY2UgdG8gdGhlbS5cbiAgICovXG4gIGRpc2NhcmQoKSB7XG4gICAgdGhpcy5jYW5jZWwoKTtcblxuICAgIGRlbGV0ZSB0aGlzLl9wcm9taXNlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZSB0aGUgaW50ZXJuYWwgd2VpZ2h0IHRvIDAuIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHN3aXRjaGluZyBvciB0cmFuc2l0aW9uaW5nXG4gICAqIHRvIGEgbmV3IHN0YXRlLlxuICAgKi9cbiAgZGVhY3RpdmF0ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUludGVybmFsV2VpZ2h0KDApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0U3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyBmb3Igc21vb3RoIHRyYW5zaXRpb25pbmcgYmV0d2VlbiBzdGF0ZXMgb24gYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdFN0YXRlXHJcbiAqL1xyXG5jbGFzcyBUcmFuc2l0aW9uU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdFN0YXRlIHtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuX3RvID0gbnVsbDtcclxuICAgIHRoaXMuX2Zyb20gPSBbXTtcclxuICAgIHRoaXMuX3dlaWdodFByb21pc2UgPSBEZWZlcnJlZC5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW50ZXJuYWxXZWlnaHQoKSB7XHJcbiAgICAvLyBGaW5kIHRoZSBjb21iaW5lZCB3ZWlnaHQgb2YgYWxsIHN1Yi1zdGF0ZXNcclxuICAgIGxldCB0b3RhbFdlaWdodCA9IDA7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRvdGFsV2VpZ2h0ICs9IHRoaXMuX3RvLndlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICB0b3RhbFdlaWdodCArPSBzdGF0ZS53ZWlnaHQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdG90YWxXZWlnaHQgKiB0aGlzLl9pbnRlcm5hbFdlaWdodDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xyXG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8udXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHN1Yi1zdGF0ZXMgdGhlIHRyYW5zaXRpb24gaXMgY29udHJvbGxpbmcgYW5kIHN0YXJ0IG5ldyB3ZWlnaHRcclxuICAgKiBhbmltYXRpb25zIG9uIGVhY2ggb25lLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgZWFjaCB0aW1lIHRoZSBjdXJyZW50IHN0YXRlIG9mXHJcbiAgICogYW4gYW5pbWF0aW9uIGxheWVyIGdldHMgdXBkYXRlZCB0byBhIG5ldyB2YWx1ZSBhbmQgYSB0cmFuc2l0aW9uIHRpbWUgZ3JlYXRlclxyXG4gICAqIHRoYXQgemVybyBpcyBzcGVjaWZpZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdFN0YXRlPn0gW2N1cnJlbnRTdGF0ZXM9W11dIC0gU3RhdGVzIHdob3NlIHdlaWdodCB2YWx1ZXNcclxuICAgKiB3aWxsIGJlIGFuaW1hdGVkIHRvIDAuXHJcbiAgICogQHBhcmFtIHtBYnN0cmFjdFN0YXRlPX0gdGFyZ2V0U3RhdGUgLSBTdGF0ZSB3aG9zZSB3ZWlnaHQgd2lsbCBiZSBhbmltYXRlZFxyXG4gICAqIHRvIDEuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRyYW5zaXRpb25UaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgd2lsbCBpbiBzZWNvbmRzIHRha2UgZm9yXHJcbiAgICogd2VpZ2h0IGFuaW1hdGlvbnMgdG8gY29tcGxldGUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3Igd2VpZ2h0IGFuaW1hdGlvbnMuXHJcbiAgICogRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNvbXBsZXRlIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIGFsbCB3ZWlnaHQgYW5pbWF0aW9uc1xyXG4gICAqIGNvbXBsZXRlLlxyXG4gICAqL1xyXG4gIGNvbmZpZ3VyZShcclxuICAgIGN1cnJlbnRTdGF0ZXMgPSBbXSxcclxuICAgIHRhcmdldFN0YXRlLFxyXG4gICAgdHJhbnNpdGlvblRpbWUsXHJcbiAgICBlYXNpbmdGbixcclxuICAgIG9uQ29tcGxldGVcclxuICApIHtcclxuICAgIC8vIERlYWN0aXZhdGUgYW55IHN0YXRlcyB0aGF0IGFyZW4ndCBpbiB0aGUgbmV3IGNvbmZpZ3VyYXRpb25cclxuICAgIGlmICh0aGlzLl90byA9PT0gdGFyZ2V0U3RhdGUgfHwgY3VycmVudFN0YXRlcy5pbmNsdWRlcyh0aGlzLl90bykpIHtcclxuICAgICAgdGhpcy5fdG8gPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZnJvbSA9IHRoaXMuX2Zyb20uZmlsdGVyKFxyXG4gICAgICBzdGF0ZSA9PiBzdGF0ZSAhPT0gdGFyZ2V0U3RhdGUgJiYgIWN1cnJlbnRTdGF0ZXMuaW5jbHVkZXMoc3RhdGUpXHJcbiAgICApO1xyXG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XHJcblxyXG4gICAgdGhpcy5fZnJvbSA9IGN1cnJlbnRTdGF0ZXM7XHJcbiAgICB0aGlzLl90byA9IHRhcmdldFN0YXRlO1xyXG4gICAgdGhpcy5yZXNldCh0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4sIG9uQ29tcGxldGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnQgbmV3IHdlaWdodCBhbmltYXRpb25zIHN0YXRlIHRoZSB0cmFuc2l0aW9uIGNvbnRyb2xzLiBUaGlzIHNob3VsZCBiZSBjYWxsZWRcclxuICAgKiBpZiBhbiBhbmltYXRpb24gaXMgcGxheWVkIHdpdGggYSB0cmFuc2l0aW9uIHRpbWUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGEgdHJhbnN0aW9uXHJcbiAgICogdG8gdGhhdCBhbmltYXRpb24gd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIGluIHNlY29uZHMgdGFrZSBmb3JcclxuICAgKiB3ZWlnaHQgYW5pbWF0aW9ucyB0byBjb21wbGV0ZS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciB3ZWlnaHQgYW5pbWF0aW9ucy5cclxuICAgKiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ29tcGxldGUgLSBGdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgYWxsIHdlaWdodCBhbmltYXRpb25zXHJcbiAgICogY29tcGxldGUuXHJcbiAgICovXHJcbiAgcmVzZXQodHJhbnNpdGlvblRpbWUsIGVhc2luZ0ZuLCBvbkNvbXBsZXRlKSB7XHJcbiAgICAvLyBTdG9wIGFueSBwZW5kaW5nIHByb21pc2VzXHJcbiAgICB0aGlzLl93ZWlnaHRQcm9taXNlLmNhbmNlbCgpO1xyXG5cclxuICAgIC8vIFN0YXJ0IHR3ZWVuaW5nIHdlaWdodCB0byAwIGZvciB0aGUgY3VycmVudCBzdGF0ZXNcclxuICAgIGNvbnN0IHdlaWdodFByb21pc2VzID0gdGhpcy5fZnJvbS5tYXAoc3RhdGUgPT5cclxuICAgICAgc3RhdGUuc2V0V2VpZ2h0KDAsIHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbilcclxuICAgICk7XHJcblxyXG4gICAgLy8gU3RhcnQgdHdlZW5pbmcgd2VpZ2h0IHRvIDEgZm9yIHRoZSB0YXJnZXQgc3RhdGVcclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB3ZWlnaHRQcm9taXNlcy5wdXNoKHRoaXMuX3RvLnNldFdlaWdodCgxLCB0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4pKTtcclxuICAgICAgdGhpcy5uYW1lID0gdGhpcy5fdG8ubmFtZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubmFtZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fd2VpZ2h0UHJvbWlzZSA9IERlZmVycmVkLmFsbCh3ZWlnaHRQcm9taXNlcywgKCkgPT4ge1xyXG4gICAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICAgIHN0YXRlLmNhbmNlbCgpO1xyXG4gICAgICAgIHN0YXRlLmRlYWN0aXZhdGUoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0eXBlb2Ygb25Db21wbGV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uQ29tcGxldGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2ggPSBvbkZpbmlzaDtcclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvciA9IG9uRXJyb3I7XHJcbiAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsID0gb25DYW5jZWw7XHJcblxyXG4gICAgY29uc3QgcHJvbWlzZXMgPSBbdGhpcy5fd2VpZ2h0UHJvbWlzZV07XHJcblxyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucmVzdW1lKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZXMucGxheSA9IHRoaXMuX3RvLnBsYXkoXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICk7XHJcbiAgICAgIHByb21pc2VzLnB1c2godGhpcy5fcHJvbWlzZXMucGxheSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoID0gRGVmZXJyZWQuYWxsKHByb21pc2VzLCBvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcclxuICB9XHJcblxyXG4gIHBhdXNlKCkge1xyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucGF1c2UoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by5wYXVzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdXBlci5wYXVzZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KSB7XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX3Byb21pc2VzLnBsYXkucGVuZGluZykge1xyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoID0gb25GaW5pc2ggfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaDtcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yID0gb25FcnJvciB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3I7XHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWwgPSBvbkNhbmNlbCB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHByb21pc2VzID0gW3RoaXMuX3dlaWdodFByb21pc2VdO1xyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnJlc3VtZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXkgPSB0aGlzLl90by5yZXN1bWUoXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICk7XHJcbiAgICAgIHByb21pc2VzLnB1c2godGhpcy5fcHJvbWlzZXMucGxheSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoID0gRGVmZXJyZWQuYWxsKFxyXG4gICAgICBwcm9taXNlcyxcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCxcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yLFxyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnBhdXNlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8uY2FuY2VsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fd2VpZ2h0UHJvbWlzZS5jYW5jZWwoKTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIuY2FuY2VsKCk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucGF1c2UoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by5zdG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnN0b3AoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuXHJcbiAgICB0aGlzLl93ZWlnaHRQcm9taXNlLmNhbmNlbCgpO1xyXG4gICAgZGVsZXRlIHRoaXMuX3dlaWdodFByb21pc2U7XHJcbiAgICB0aGlzLl90byA9IG51bGw7XHJcbiAgICB0aGlzLl9mcm9tLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBkZWFjdGl2YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLmRlYWN0aXZhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5kZWFjdGl2YXRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25TdGF0ZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHktZnVuY3Rpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIGdldHRlci1yZXR1cm4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZWxlc3MtY29uc3RydWN0b3IgKi9cbmltcG9ydCBUcmFuc2l0aW9uU3RhdGUgZnJvbSAnLi9zdGF0ZS9UcmFuc2l0aW9uU3RhdGUnO1xuaW1wb3J0IERlZmVycmVkIGZyb20gJy4uL0RlZmVycmVkJztcblxuLyoqXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgY29udHJvbGxpbmcgcGxheWJhY2sgb2YgYSBjb2xsZWN0aW9uIG9mIGFuaW1hdGlvbnMuXG4gKiBPbmUgYW5pbWF0aW9uIGNhbiBiZSBwbGF5ZWQgYXQgYW55IGdpdmVuIHRpbWUsIGNyb3NzZmFkaW5nIGJldHdlZW4gYW5pbWF0aW9uc1xuICogd2lsbCByZXN1bHQgaW4gcGxheWluZyBhIHtAbGluayBUcmFuc2l0aW9uU3RhdGV9LlxuICpcbiAqIEBpbnRlcmZhY2VcbiAqL1xuY2xhc3MgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHBsYXllciBpcyB1cGRhdGluZyBzdGF0ZXMuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBwYXVzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdXNlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBkZWZhdWx0IG51bWJlciBvZiBzZWNvbmRzIGl0IHRha2VzIHRvIHRyYW5zaXRpb24gdG8gYSBuZXdcbiAgICogYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHRyYW5zaXRpb25UaW1lKCkge31cblxuICBzZXQgdHJhbnNpdGlvblRpbWUoc2Vjb25kcykge31cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgZGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW4gdHJhbnNpdGlvbmluZyBhbmRcbiAgICogc2V0dGluZyB3ZWlnaHRzLlxuICAgKlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqL1xuICBnZXQgZWFzaW5nRm4oKSB7fVxuXG4gIHNldCBlYXNpbmdGbihmbikge31cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3RhdGUgdGhlIGxheWVyIGlzIGN1cnJlbnRseSBpbiBjb250cm9sIG9mLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge0Fic3RyYWN0U3RhdGV9XG4gICAqL1xuICBnZXQgY3VycmVudFN0YXRlKCkge31cblxuICAvKipcbiAgICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgc3RhdGUgdGhlIGxheWVyIGlzIGN1cnJlbnRseSBpbiBjb250cm9sIG9mLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBjdXJyZW50QW5pbWF0aW9uKCkge31cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IHRyYW5zaXRpb25pbmcgdG8gYSBuZXcgYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgaXNUcmFuc2l0aW9uaW5nKCkge31cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBsYXllcidzIGN1cnJlbnQgc3RhdGUgdG8gYSBuZXcgdmFsdWUuIElmIHRyYW5zaXRpb25UaW1lIGlzIGRlZmluZWRcbiAgICogYW5kIGdyZWF0ZXIgdGhhbiB6ZXJvLCBwZXJmb3JtIGEgc21vb3RoIGJsZW5kIGJldHdlZW4gYW55IHN0YXRlcyB0aGF0IGN1cnJlbnRseVxuICAgKiBoYXZlIG5vbi16ZXJvIHdlaWdodCB2YWx1ZXMgYW5kIHRoZSBuZXcgc3RhdGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xudWxsKX0gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHRyYW5zaXRpb24gdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwbGF5TWV0aG9kIC0gTmFtZSBvZiB0aGUgb3BlcmF0aW9uIGJlaW5nIHByZXBhcmVkIGZvciwgdG8gYmVcbiAgICogdXNlZCBpbiBlcnJvciBtZXNzYWdpbmcuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0b1xuICAgKiBzd2l0Y2ggdG8gdGhlIG5ldyBzdGF0ZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHRyYW5zaXRpb25pbmcgdG8gYVxuICAgKiBuZXcgc3RhdGUgb3ZlciB0aW1lLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuXG4gICAqL1xuICBfcHJlcGFyZUN1cnJlbnRTdGF0ZShuYW1lLCBwbGF5TWV0aG9kLCB0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4sIG9uRXJyb3IpIHt9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHBsYXliYWNrIGFuIGFuaW1hdGlvbiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRvIHBsYXkuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgYmVmb3JlIHRoZVxuICAgKiBuZXcgc3RhdGUgaGFzIGZ1bGwgaW5mbHVlbmNlIGZvciB0aGUgbGF5ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGJsZW5kaW5nIGlmIHRyYW5zaXRpb25UaW1lXG4gICAqIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIGFuaW1hdGlvbiBmaW5pc2hlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBhbmltYXRpb24gZW5jb3VudGVyc1xuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk5leHQgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIGFuIGFuaW1hdGlvbiBxdWV1ZSBpc1xuICAgKiBwbGF5ZWQgYW5kIGl0IGFkdmFuY2VzIHRvIHRoZSBuZXh0IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgcGxheUFuaW1hdGlvbihcbiAgICBuYW1lLFxuICAgIHRyYW5zaXRpb25UaW1lLFxuICAgIGVhc2luZ0ZuLFxuICAgIG9uRmluaXNoLFxuICAgIG9uRXJyb3IsXG4gICAgb25DYW5jZWwsXG4gICAgb25OZXh0XG4gICkge31cblxuICAvKipcbiAgICogQ2FuY2VsIHBsYXliYWNrIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjYW5jZWxBbmltYXRpb24oKSB7fVxuXG4gIC8qKlxuICAgKiBQYXVzZSBwbGF5YmFjayBvZiB0aGUgY3VycmVudCBhbmltYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcGF1c2VBbmltYXRpb24oKSB7fVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgcGxheWJhY2sgb2YgYW4gYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gcmVzdW1lIHBsYXliYWNrIGZvci4gRGVmYXVsdFxuICAgKiBpcyB0aGUgbGF5ZXIncyBjdXJyZW50IGFuaW1hdGlvbiBuYW1lLlxuICAgKiBAcGFyYW0ge251bWJlcj19IHRyYW5zaXRpb25UaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIGJlZm9yZSB0aGVcbiAgICogbmV3IHN0YXRlIGhhcyBmdWxsIGluZmx1ZW5jZSBmb3IgdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIHN0YXRlIGZpbmlzaGVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHN0YXRlIGVuY291bnRlcnNcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHBsYXliYWNrIGlzIGNhbmNlbGVkLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25OZXh0IC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBhbiBhbmltYXRpb24gcXVldWUgaXNcbiAgICogcGxheWVkIGFuZCBpdCBhZHZhbmNlcyB0byB0aGUgbmV4dCBhbmltYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHJlc3VtZUFuaW1hdGlvbihcbiAgICBuYW1lLFxuICAgIHRyYW5zaXRpb25UaW1lLFxuICAgIGVhc2luZ0ZuLFxuICAgIG9uRmluaXNoLFxuICAgIG9uRXJyb3IsXG4gICAgb25DYW5jZWwsXG4gICAgb25OZXh0XG4gICkge31cblxuICAvKipcbiAgICogU3RvcCBwbGF5YmFjayBvZiB0aGUgY3VycmVudCBhbmltYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3RvcEFuaW1hdGlvbigpIHt9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY3VycmVudCBhbmltYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXG4gICAqL1xuICB1cGRhdGUoZGVsdGFUaW1lKSB7fVxuXG4gIC8qKlxuICAgKiBEaXNjYXJkIHRoZSB0cmFuc2l0aW9uIHN0YXRlLlxuICAgKi9cbiAgZGlzY2FyZCgpIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIEFuaW1hdGlvblBsYXllckludGVyZmFjZX0gYW5kIGV4dGVuZHNcbiAgICogYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtDbGFzc30gW0Jhc2VDbGFzcyA9IGNsYXNze31dIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAgICpcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2V9LlxuICAgKi9cbiAgc3RhdGljIE1peGluKEJhc2VDbGFzcyA9IGNsYXNzIHt9KSB7XG4gICAgY29uc3QgQW5pbWF0aW9uUGxheWVyTWl4aW4gPSBjbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7XG4gICAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucywgLi4uYXJncyk7XG5cbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlID0gbmV3IFRyYW5zaXRpb25TdGF0ZSgpO1xuICAgICAgICB0aGlzLl9zdGF0ZXMgPSB0aGlzLl9zdGF0ZXMgIT09IHVuZGVmaW5lZCA/IHRoaXMuX3N0YXRlcyA6IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRpbWUgPVxuICAgICAgICAgIE51bWJlcihvcHRpb25zLnRyYW5zaXRpb25UaW1lKSA+PSAwXG4gICAgICAgICAgICA/IE51bWJlcihvcHRpb25zLnRyYW5zaXRpb25UaW1lKVxuICAgICAgICAgICAgOiAwO1xuXG4gICAgICAgIHRoaXMuX2Vhc2luZ0ZuID1cbiAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy5lYXNpbmdGbiA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuZWFzaW5nRm4gOiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGdldCBwYXVzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXVzZWQ7XG4gICAgICB9XG5cbiAgICAgIGdldCB0cmFuc2l0aW9uVGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25UaW1lO1xuICAgICAgfVxuXG4gICAgICBzZXQgdHJhbnNpdGlvblRpbWUoc2Vjb25kcykge1xuICAgICAgICBzZWNvbmRzID0gTnVtYmVyKHNlY29uZHMpO1xuXG4gICAgICAgIGlmICghKHNlY29uZHMgPj0gMCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IHNldCB0cmFuc2l0aW9uIHRpbWUgZm9yICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSB0byAke3NlY29uZHN9LiBTZWNvbmRzIG11c3QgYmUgYSBudW1lcmljIHZhbHVlIGdyZWF0aGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25UaW1lID0gc2Vjb25kcztcbiAgICAgIH1cblxuICAgICAgZ2V0IGVhc2luZ0ZuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWFzaW5nRm47XG4gICAgICB9XG5cbiAgICAgIHNldCBlYXNpbmdGbihmbikge1xuICAgICAgICB0aGlzLl9lYXNpbmdGbiA9IGZuO1xuICAgICAgfVxuXG4gICAgICBnZXQgY3VycmVudFN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlO1xuICAgICAgfVxuXG4gICAgICBnZXQgY3VycmVudEFuaW1hdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBnZXQgaXNUcmFuc2l0aW9uaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlID09PSB0aGlzLl90cmFuc2l0aW9uU3RhdGU7XG4gICAgICB9XG5cbiAgICAgIF9wcmVwYXJlQ3VycmVudFN0YXRlKFxuICAgICAgICBuYW1lLFxuICAgICAgICBwbGF5TWV0aG9kLFxuICAgICAgICB0cmFuc2l0aW9uVGltZSxcbiAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgIG9uRXJyb3JcbiAgICAgICkge1xuICAgICAgICBpZiAobmFtZSAhPT0gbnVsbCAmJiAhdGhpcy5fc3RhdGVzLmhhcyhuYW1lKSkge1xuICAgICAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90ICR7cGxheU1ldGhvZH0gYW5pbWF0aW9uICR7bmFtZX0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG9uRXJyb3IoZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldFN0YXRlID0gbmFtZSAhPT0gbnVsbCA/IHRoaXMuX3N0YXRlcy5nZXQobmFtZSkgOiBudWxsO1xuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmV3IHN0YXRlIGlzbid0IGFscmVhZHkgcGxheWluZ1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50QW5pbWF0aW9uICE9PSBuYW1lKSB7XG4gICAgICAgICAgLy8gU3dpdGNoIHRvIHRoZSBuZXcgc3RhdGUgaW1tZWRpYXRlbHlcbiAgICAgICAgICBpZiAodHJhbnNpdGlvblRpbWUgPD0gMCkge1xuICAgICAgICAgICAgLy8gQ2FuY2VsIHRoZSBjdXJyZW50IHN0YXRlIGFuZCBzZXQgaXRzIHdlaWdodCB0byAwXG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLndlaWdodCA9IDA7XG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS5kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZSA9IHRhcmdldFN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBCbGVuZCB0byB0aGUgbmV3IHN0YXRlIG92ZXIgdGltZVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHRyYW5zaXRpb24gb3V0IG9mIGFueSBzdGF0ZXMgd2l0aCBub24temVybyB3ZWlnaHRcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZXMgPSBbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5maWx0ZXIoXG4gICAgICAgICAgICAgIHMgPT4gcyAhPT0gdGFyZ2V0U3RhdGUgJiYgKHMud2VpZ2h0IHx8IHMud2VpZ2h0UGVuZGluZylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdHJhbnNpdGlvbiBzdGF0ZSB3aXRoIG5ldyBpbnB1dHNcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25TdGF0ZS5jb25maWd1cmUoXG4gICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZXMsXG4gICAgICAgICAgICAgIHRhcmdldFN0YXRlLFxuICAgICAgICAgICAgICB0cmFuc2l0aW9uVGltZSxcbiAgICAgICAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSB0YXJnZXRTdGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uU3RhdGUud2VpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID0gdGhpcy5fdHJhbnNpdGlvblN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwbGF5TWV0aG9kID09PSAncGxheScpIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUuY2FuY2VsKCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlID09PSB0aGlzLl90cmFuc2l0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25TdGF0ZS5yZXNldCh0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4sICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID0gdGFyZ2V0U3RhdGU7XG4gICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25TdGF0ZS53ZWlnaHQgPSAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIHdlaWdodCBmb3IgdGhlIG5ldyBjdXJyZW50IHN0YXRlIHNvIGl0IGhhcyBmdWxsIGluZmx1ZW5jZSBmb3IgdGhlIHBsYXllclxuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUud2VpZ2h0ID0gMTtcbiAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLnVwZGF0ZUludGVybmFsV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcbiAgICAgIH1cblxuICAgICAgcGxheUFuaW1hdGlvbihcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHJhbnNpdGlvblRpbWUsXG4gICAgICAgIGVhc2luZ0ZuLFxuICAgICAgICBvbkZpbmlzaCxcbiAgICAgICAgb25FcnJvcixcbiAgICAgICAgb25DYW5jZWwsXG4gICAgICAgIG9uTmV4dFxuICAgICAgKSB7XG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgbGV0IHJlamVjdCA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuX3ByZXBhcmVDdXJyZW50U3RhdGUoXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgJ3BsYXknLFxuICAgICAgICAgICAgdHJhbnNpdGlvblRpbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IHRyYW5zaXRpb25UaW1lXG4gICAgICAgICAgICAgIDogdGhpcy5fdHJhbnNpdGlvblRpbWUsXG4gICAgICAgICAgICBlYXNpbmdGbiAhPT0gdW5kZWZpbmVkID8gZWFzaW5nRm4gOiB0aGlzLl9lYXNpbmdGbixcbiAgICAgICAgICAgIG9uRXJyb3JcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgZXJyb3IgPSBlO1xuICAgICAgICAgIHJlamVjdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVqZWN0KSB7XG4gICAgICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpO1xuICAgICAgfVxuXG4gICAgICBwYXVzZUFuaW1hdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUucGF1c2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzdW1lQW5pbWF0aW9uKFxuICAgICAgICBuYW1lLFxuICAgICAgICB0cmFuc2l0aW9uVGltZSxcbiAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgIG9uRmluaXNoLFxuICAgICAgICBvbkVycm9yLFxuICAgICAgICBvbkNhbmNlbCxcbiAgICAgICAgb25OZXh0XG4gICAgICApIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICBuYW1lID0gdGhpcy5fY3VycmVudFN0YXRlLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIGxldCByZWplY3QgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLl9wcmVwYXJlQ3VycmVudFN0YXRlKFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICdyZXN1bWUnLFxuICAgICAgICAgICAgdHJhbnNpdGlvblRpbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IHRyYW5zaXRpb25UaW1lXG4gICAgICAgICAgICAgIDogdGhpcy5fdHJhbnNpdGlvblRpbWUsXG4gICAgICAgICAgICBlYXNpbmdGbiAhPT0gdW5kZWZpbmVkID8gZWFzaW5nRm4gOiB0aGlzLl9lYXNpbmdGbixcbiAgICAgICAgICAgIG9uRXJyb3JcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgZXJyb3IgPSBlO1xuICAgICAgICAgIHJlamVjdCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVqZWN0KSB7XG4gICAgICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwsIG9uTmV4dCk7XG4gICAgICB9XG5cbiAgICAgIGNhbmNlbEFuaW1hdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUuY2FuY2VsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0b3BBbmltYXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnN0b3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdXBkYXRlKGRlbHRhVGltZSkge1xuICAgICAgICBpZiAoc3VwZXIudXBkYXRlKSB7XG4gICAgICAgICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLnVwZGF0ZShkZWx0YVRpbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRpc2NhcmQoKSB7XG4gICAgICAgIGlmIChzdXBlci5kaXNjYXJkKSB7XG4gICAgICAgICAgc3VwZXIuZGlzY2FyZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLmRpc2NhcmQoKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3RyYW5zaXRpb25TdGF0ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIEFuaW1hdGlvblBsYXllck1peGluO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFuaW1hdGlvblBsYXllckludGVyZmFjZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5LWZ1bmN0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBnZXR0ZXItcmV0dXJuICovXG5cbmltcG9ydCBVdGlscyBmcm9tICcuLi8uLi9VdGlscyc7XG5cbi8qKlxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIG1hbmlwdWxhdGluZyBhIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFic3RyYWN0U3RhdGV9LlxuICpcbiAqIEBpbnRlcmZhY2VcbiAqL1xuY2xhc3MgU3RhdGVDb250YWluZXJJbnRlcmZhY2Uge1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBzdGF0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QWJzdHJhY3RTdGF0ZX1cbiAgICovXG4gIGdldFN0YXRlKG5hbWUpIHt9XG5cbiAgLyoqXG4gICAqIEdldHMgYW4gYXJyYXkgb2YgdGhlIG5hbWVzIG9mIGFsbCBzdGF0ZXMgaW4gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHR5cGUge0FycmF5LjxzdHJpbmc+fVxuICAgKi9cbiAgZ2V0U3RhdGVOYW1lcygpIHt9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBzdGF0ZSB0byBiZSBjb250cm9sbGVkIGJ5IHRoZSBjb250YWluZXIuIFN0YXRlcyBhcmUgc3RvcmVkIGtleWVkXG4gICAqIGJ5IHRoZWlyIG5hbWUgcHJvcGVydHksIHdoaWNoIG11c3QgYmUgdW5pcXVlLiBJZiBpdCBpc24ndCwgYSBudW1iZXIgd2lsbFxuICAgKiBiZSBhZGRlZCBvciBpbmNyZW1lbnRlZCB1bnRpbCBhIHVuaXF1ZSBrZXkgaXMgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U3RhdGV9IHN0YXRlIC0gU3RhdGUgdG8gYWRkIHRvIHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVW5pcXVlIG5hbWUgb2YgdGhlIHN0YXRlLlxuICAgKi9cbiAgYWRkU3RhdGUoc3RhdGUpIHt9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBzdGF0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGZyb20gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBzdGF0ZSB0byByZW1vdmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IGEgc3RhdGUgd2FzIHJlbW92ZWQuXG4gICAqL1xuICByZW1vdmVTdGF0ZShuYW1lKSB7fVxuXG4gIC8qKlxuICAgKiBSZW5hbWVzIGEgc3RhdGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiB0aGUgY29udGFpbmVyLiBOYW1lIG11c3QgYmUgdW5pcXVlXG4gICAqIHRvIHRoZSBjb250YWluZXIsIGlmIGl0IGlzbid0IHRoZSBuYW1lIHdpbGwgYmUgaW5jcmVtZW50ZWQgdW50aWwgaXQgaXMgdW5pcXVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudE5hbWUgLSBOYW1lIG9mIHRoZSBzdGF0ZSB0byByZW5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmFtZSB0byB1cGRhdGUgdGhlIHN0YXRlIHdpdGguXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBuYW1lIGZvciB0aGUgc3RhdGUuXG4gICAqL1xuICByZW5hbWVTdGF0ZShjdXJyZW50TmFtZSwgbmV3TmFtZSkge31cblxuICAvKipcbiAgICogRGlzY2FyZHMgYWxsIHN0YXRlcy5cbiAgICovXG4gIGRpc2NhcmRTdGF0ZXMoKSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBTdGF0ZUNvbnRhaW5lckludGVyZmFjZX0gYW5kIGV4dGVuZHNcbiAgICogYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtDbGFzc30gW0Jhc2VDbGFzcyA9IGNsYXNze31dIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAgICpcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBTdGF0ZUNvbnRhaW5lckludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzID0gY2xhc3Mge30pIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIG1peGluIGFkZHMgZnVuY3Rpb25hbGl0eSBmb3IgbWFuaXB1bGF0aW5nIHVuaXF1ZWx5LW5hbWVkIGFuaW1hdGlvbiBzdGF0ZXMgaW5cbiAgICAgKiBhIG1hcC5cbiAgICAgKi9cbiAgICBjb25zdCBTdGF0ZUNvbnRhaW5lck1peGluID0gY2xhc3MgZXh0ZW5kcyBCYXNlQ2xhc3Mge1xuICAgICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCAuLi5hcmdzKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIC4uLmFyZ3MpO1xuXG4gICAgICAgIHRoaXMuX3N0YXRlcyA9IHRoaXMuX3N0YXRlcyAhPT0gdW5kZWZpbmVkID8gdGhpcy5fc3RhdGVzIDogbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBnZXRTdGF0ZShuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZXMuZ2V0KG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBnZXRTdGF0ZU5hbWVzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuX3N0YXRlcy5rZXlzKCldO1xuICAgICAgfVxuXG4gICAgICBhZGRTdGF0ZShzdGF0ZSkge1xuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXRlIGlzIG5vdCBhbHJlYWR5IGluIHRoaXMgY29udGFpbmVyXG4gICAgICAgIGlmIChbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5pbmNsdWRlcyhzdGF0ZSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgQ2Fubm90IGFkZCBhbmltYXRpb24gdG8gc3RhdGUgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gd2FzIGFscmVhZHkgYWRkZWQuYFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXRlIG5hbWUgaXMgdW5pcXVlXG4gICAgICAgIGNvbnN0IHVuaXF1ZU5hbWUgPSBVdGlscy5nZXRVbmlxdWVOYW1lKHN0YXRlLm5hbWUsIFtcbiAgICAgICAgICAuLi50aGlzLl9zdGF0ZXMua2V5cygpLFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAoc3RhdGUubmFtZSAhPT0gdW5pcXVlTmFtZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBBbmltYXRpb24gbmFtZSAke3N0YXRlLm5hbWV9IGlzIG5vdCB1bmlxdWUgZm9yIHN0YXRlICR7dGhpcy5uYW1lfS4gTmV3IGFuaW1hdGlvbiB3aWxsIGJlIGFkZGVkIHdpdGggbmFtZSAke3VuaXF1ZU5hbWV9LmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0YXRlLm5hbWUgPSB1bmlxdWVOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3RhdGVzLnNldChzdGF0ZS5uYW1lLCBzdGF0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHN0YXRlLm5hbWU7XG4gICAgICB9XG5cbiAgICAgIHJlbW92ZVN0YXRlKG5hbWUpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHN0YXRlIGlzIGluIHRoaXMgY29udGFpbmVyXG4gICAgICAgIGlmICghdGhpcy5fc3RhdGVzIHx8ICF0aGlzLl9zdGF0ZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYERpZCBub3QgcmVtb3ZlIGFuaW1hdGlvbiAke25hbWV9IGZyb20gc3RhdGUgJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N0YXRlcy5nZXQobmFtZSkuZGlzY2FyZCgpO1xuICAgICAgICB0aGlzLl9zdGF0ZXMuZGVsZXRlKG5hbWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmVuYW1lU3RhdGUoY3VycmVudE5hbWUsIG5ld05hbWUpIHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzdGF0ZSBpcyBpbiB0aGlzIGNvbnRhaW5lclxuICAgICAgICBpZiAoIXRoaXMuX3N0YXRlcyB8fCAhdGhpcy5fc3RhdGVzLmhhcyhjdXJyZW50TmFtZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IHJlbmFtZSBhbmltYXRpb24gJHtjdXJyZW50TmFtZX0gaW4gJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZXMuZ2V0KGN1cnJlbnROYW1lKTtcblxuICAgICAgICAvLyBFeGl0IGlmIHRoZSBuYW1lcyBhcmUgdGhlIHNhbWVcbiAgICAgICAgaWYgKGN1cnJlbnROYW1lID09PSBuZXdOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnROYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHVuaXF1ZVxuICAgICAgICBjb25zdCB1bmlxdWVOYW1lID0gVXRpbHMuZ2V0VW5pcXVlTmFtZShcbiAgICAgICAgICBuZXdOYW1lLFxuICAgICAgICAgIFsuLi50aGlzLl9zdGF0ZXMua2V5cygpXS5maWx0ZXIocyA9PiBzLm5hbWUgIT09IGN1cnJlbnROYW1lKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChuZXdOYW1lICE9PSB1bmlxdWVOYW1lKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYEFuaW1hdGlvbiBuYW1lICR7bmV3TmFtZX0gaXMgbm90IHVuaXF1ZSBpbiBzdGF0ZSAke3RoaXMubmFtZX0uIEFuaW1hdGlvbiB3aWxsIGJlIHJlbmFtZWQgdG8gJHt1bmlxdWVOYW1lfS5gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBuZXdOYW1lID0gdW5pcXVlTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLm5hbWUgPSBuZXdOYW1lO1xuICAgICAgICB0aGlzLl9zdGF0ZXMuZGVsZXRlKGN1cnJlbnROYW1lKTtcbiAgICAgICAgdGhpcy5fc3RhdGVzLnNldChzdGF0ZS5uYW1lLCBzdGF0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHN0YXRlLm5hbWU7XG4gICAgICB9XG5cbiAgICAgIGRpc2NhcmRTdGF0ZXMoKSB7XG4gICAgICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgICAgICBzdGF0ZS5kaXNjYXJkKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGF0ZXM7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3RhdGVDb250YWluZXJNaXhpbjtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgU3RhdGVDb250YWluZXJJbnRlcmZhY2U7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcbmltcG9ydCBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UgZnJvbSAnLi4vQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlJztcbmltcG9ydCBTdGF0ZUNvbnRhaW5lckludGVyZmFjZSBmcm9tICcuL1N0YXRlQ29udGFpbmVySW50ZXJmYWNlJztcblxuLyoqXG4gKiBDbGFzcyBmb3IgcGxheWluZyBhbiBvcmRlcmVkIGFycmF5IG9mIGFuaW1hdGlvbiBzdGF0ZXMgaW4gc2VxdWVuY2UuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RTdGF0ZVxuICogQGltcGxlbWVudHMgQEFuaW1hdGlvblBsYXllckludGVyZmFjZVxuICovXG5jbGFzcyBRdWV1ZVN0YXRlIGV4dGVuZHMgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlLk1peGluKFxuICBTdGF0ZUNvbnRhaW5lckludGVyZmFjZS5NaXhpbihBYnN0cmFjdFN0YXRlKVxuKSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSAtIE9wdGlvbnMgZm9yIHRoZSBzdGF0ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hdXRvQWR2YW5jZT10cnVlXSAtIFdoZXRoZXIgdG8gYXV0bWF0aWNhbGx5IGFkdmFuY2VcbiAgICogdG8gdGhlIG5leHQgc3RhdGUgaW4gdGhlIHF1ZXVlIGFzIGVhY2ggc3RhdGUgY29tcGxldGVzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdFN0YXRlPn0gW3F1ZXVlU3RhdGVzPVtdXSAtIEFycmF5IG9mIHN0YXRlcyB0byBiZSBwbGF5ZWRcbiAgICogaW4gb3JkZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIHF1ZXVlU3RhdGVzID0gW10pIHtcbiAgICBzdXBlcihvcHRpb25zKTtcblxuICAgIHF1ZXVlU3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgdGhpcy5hZGRTdGF0ZShzdGF0ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9xdWV1ZSA9IHRoaXMuX3N0YXRlcy5rZXlzKCk7XG4gICAgdGhpcy5fZG9uZSA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIHRoZSBhbmltYXRpb24gcXVldWUgaGFzIHJlYWNoZWQgdGhlIGVuZC5cbiAgICovXG4gIGdldCBkb25lKCkge1xuICAgIHJldHVybiB0aGlzLl9kb25lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGludGVybmFsIHdlaWdodC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgaW50ZXJuYWxXZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZVxuICAgICAgPyB0aGlzLl9jdXJyZW50U3RhdGUuaW50ZXJuYWxXZWlnaHQgKiB0aGlzLl9pbnRlcm5hbFdlaWdodFxuICAgICAgOiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RhcnQgdGhlIHF1ZXVlIGl0ZXJhdG9yLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc2V0KCkge1xuICAgIHRoaXMuX3F1ZXVlID0gdGhpcy5fc3RhdGVzLmtleXMoKTtcbiAgICBjb25zdCB7dmFsdWUsIGRvbmV9ID0gdGhpcy5fcXVldWUubmV4dCgpO1xuICAgIHRoaXMuX2RvbmUgPSBkb25lO1xuXG4gICAgcmV0dXJuIHZhbHVlIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogTXVsdGlwbGllcyB0aGUgdXNlciB3ZWlnaHQgYnkgYSBmYWN0b3IgdG8gZGV0ZXJtaW5lIHRoZSBpbnRlcm5hbCB3ZWlnaHQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmYWN0b3IgLSAwLTEgbXVsdGlwbGllciB0byBhcHBseSB0byB0aGUgdXNlciB3ZWlnaHQuXG4gICAqL1xuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgdGhpcy5fY3VycmVudFN0YXRlLnVwZGF0ZUludGVybmFsV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIG5leHQgYW5pbWF0aW9uIGluIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uTmV4dCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIGFuIGFuaW1hdGlvbiBjb21wbGV0ZXNcbiAgICogYW5kIHRoZSBxdWV1ZSBtb3ZlcyB0byB0aGUgbmV4dCBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3dyYXA9ZmFsc2VdIC0gV2hldGhlciBvciBub3QgdG8gc3RhcnQgdGhlIHF1ZXVlIGZyb20gdGhlXG4gICAqIGJlZ2lubmluZyBhZ2FpbiBpZiB0aGUgZW5kIGhhcyBiZWVuIHJlYWNoZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIG5leHQob25OZXh0LCB3cmFwID0gZmFsc2UpIHtcbiAgICAvLyBNb3ZlIHRoZSBxdWV1ZSBmb3J3YXJkXG4gICAgY29uc3Qge3ZhbHVlOiBuYW1lLCBkb25lfSA9IHRoaXMuX3F1ZXVlLm5leHQoKTtcbiAgICB0aGlzLl9kb25lID0gZG9uZTtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcblxuICAgIC8vIFRoZSBxdWV1ZSBoYXMgcmVhY2hlZCB0aGUgZW5kXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIC8vIFN0YXJ0IHRoZSBxdWV1ZSBvdmVyXG4gICAgICBpZiAod3JhcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF5KFxuICAgICAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2gsXG4gICAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yLFxuICAgICAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWwsXG4gICAgICAgICAgb25OZXh0XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyBTdG9wIHRoZSBxdWV1ZVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX3Byb21pc2VzLmZpbmlzaC5yZXNvbHZlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2lnbmFsIHRoZSBuZXh0IGFuaW1hdGlvbiBpcyBzdGFydGluZ1xuICAgIGlmICh0eXBlb2Ygb25OZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBsYXN0TmFtZSA9IFsuLi50aGlzLl9zdGF0ZXMua2V5cygpXVt0aGlzLl9zdGF0ZXMuc2l6ZSAtIDFdO1xuICAgICAgY29uc3QgaXNRdWV1ZUVuZCA9IG5hbWUgPT09IGxhc3ROYW1lO1xuICAgICAgb25OZXh0KHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY2FuQWR2YW5jZTogdGhpcy5nZXRTdGF0ZShuYW1lKS5sb29wQ291bnQgIT09IEluZmluaXR5ICYmICFpc1F1ZXVlRW5kLFxuICAgICAgICBpc1F1ZXVlRW5kLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU3RhcnQgdGhlIG5leHQgYW5pbWF0aW9uXG4gICAgdGhpcy5wbGF5QW5pbWF0aW9uKFxuICAgICAgbmFtZSxcbiAgICAgIHRoaXMuX3RyYW5zaXRpb25UaW1lLFxuICAgICAgdGhpcy5fZWFzaW5nRm4sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5fcGF1c2VkICYmICF0aGlzLmlzVHJhbnNpdGlvbmluZykge1xuICAgICAgICAgIHRoaXMubmV4dChvbk5leHQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XG4gIH1cblxuICBwbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KSB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuX3Jlc2V0KCk7XG4gICAgc3VwZXIucGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xuXG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHRoaXMuX3Byb21pc2VzLmZpbmlzaC5yZXNvbHZlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNpZ25hbCB0aGUgbmV4dCBhbmltYXRpb24gaXMgc3RhcnRpbmdcbiAgICAgIGlmIChuYW1lICE9PSB0aGlzLmN1cnJlbnRBbmltYXRpb24gJiYgdHlwZW9mIG9uTmV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBsYXN0TmFtZSA9IFsuLi50aGlzLl9zdGF0ZXMua2V5cygpXVt0aGlzLl9zdGF0ZXMuc2l6ZSAtIDFdO1xuICAgICAgICBjb25zdCBpc1F1ZXVlRW5kID0gbmFtZSA9PT0gbGFzdE5hbWU7XG4gICAgICAgIG9uTmV4dCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBjYW5BZHZhbmNlOiBuYW1lXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U3RhdGUobmFtZSkubG9vcENvdW50ICE9PSBJbmZpbml0eSAmJiAhaXNRdWV1ZUVuZFxuICAgICAgICAgICAgOiB0cnVlLFxuICAgICAgICAgIGlzUXVldWVFbmQ6ICFuYW1lIHx8IGlzUXVldWVFbmQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBTdGFydCB0aGUgbmV4dCBhbmltYXRpb25cbiAgICAgIHRoaXMucGxheUFuaW1hdGlvbihcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID8gdGhpcy5fdHJhbnNpdGlvblRpbWUgOiAwLFxuICAgICAgICB0aGlzLl9lYXNpbmdGbixcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5fcGF1c2VkICYmICF0aGlzLmlzVHJhbnNpdGlvbmluZykge1xuICAgICAgICAgICAgdGhpcy5uZXh0KG9uTmV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XG4gIH1cblxuICBwYXVzZSgpIHtcbiAgICBjb25zdCBwYXVzZWQgPSBzdXBlci5wYXVzZSgpO1xuICAgIHRoaXMucGF1c2VBbmltYXRpb24oKTtcblxuICAgIHJldHVybiBwYXVzZWQ7XG4gIH1cblxuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpIHtcbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwsIG9uTmV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLnJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xuXG4gICAgICB0aGlzLnJlc3VtZUFuaW1hdGlvbihcbiAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLm5hbWUsXG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25UaW1lLFxuICAgICAgICB0aGlzLl9lYXNpbmdGbixcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5fcGF1c2VkICYmICF0aGlzLmlzVHJhbnNpdGlvbmluZykge1xuICAgICAgICAgICAgdGhpcy5uZXh0KG9uTmV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xuICAgIH1cbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICBjb25zdCBjYW5jZWxlZCA9IHN1cGVyLmNhbmNlbCgpO1xuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgdGhpcy5fY3VycmVudFN0YXRlLmNhbmNlbCgpO1xuICAgIH1cblxuICAgIHJldHVybiBjYW5jZWxlZDtcbiAgfVxuXG4gIHN0b3AoKSB7XG4gICAgY29uc3Qgc3RvcHBlZCA9IHN1cGVyLnN0b3AoKTtcbiAgICB0aGlzLnN0b3BBbmltYXRpb24oKTtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgIHJldHVybiBzdG9wcGVkO1xuICB9XG5cbiAgZGlzY2FyZCgpIHtcbiAgICBzdXBlci5kaXNjYXJkKCk7XG5cbiAgICB0aGlzLmRpc2NhcmRTdGF0ZXMoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBRdWV1ZVN0YXRlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcbmltcG9ydCBTdGF0ZUNvbnRhaW5lckludGVyZmFjZSBmcm9tICcuL1N0YXRlQ29udGFpbmVySW50ZXJmYWNlJztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhIHN0YXRlIHRoYXQgYmxlbmRzIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQWJzdHJhY3RTdGF0ZX0uXG4gKlxuICogQGFic3RyYWN0XG4gKiBAaW1wbGVtZW50cyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZVxuICovXG5jbGFzcyBBYnN0cmFjdEJsZW5kU3RhdGUgZXh0ZW5kcyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZS5NaXhpbihBYnN0cmFjdFN0YXRlKSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgYmxlbmRTdGF0ZXMgPSBbXSwgLi4uYXJncykge1xuICAgIHN1cGVyKG9wdGlvbnMsIC4uLmFyZ3MpO1xuICAgIGJsZW5kU3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgdGhpcy5hZGRTdGF0ZShzdGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3VtIG9mIGludGVybmFsIHdlaWdodHMgb2YgdGhlIHN1Yi1zdGF0ZXMuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGludGVybmFsV2VpZ2h0KCkge1xuICAgIGxldCBibGVuZFdlaWdodHMgPSAwO1xuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIGJsZW5kV2VpZ2h0cyArPSBzdGF0ZS5pbnRlcm5hbFdlaWdodDtcbiAgICB9KTtcbiAgICByZXR1cm4gYmxlbmRXZWlnaHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHdlaWdodCBvZiBhIHN0YXRlIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBzdGF0ZSB0byByZXR1cm4gdGhlIHdlaWdodCBmcm9tLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIFdlaWdodCBvZiB0aGUgc3RhdGUuXG4gICAqL1xuICBnZXRCbGVuZFdlaWdodChuYW1lKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKG5hbWUpO1xuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgZ2V0IHdlaWdodCBvZiBzdGF0ZSAke25hbWV9IGZyb20gQmxlbmRTdGF0ZSAke3RoaXMubmFtZX0uIE5vIHN0YXRlIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZS53ZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgd2VpZ2h0IG9mIGEgc3RhdGUgY29udHJvbGxlZCBieSB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHNldCB0aGUgd2VpZ2h0IG9mLlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgc3RhdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHNldEJsZW5kV2VpZ2h0KG5hbWUsIHdlaWdodCwgc2Vjb25kcyA9IDAsIGVhc2luZ0ZuKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKG5hbWUpO1xuXG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBzZXQgd2VpZ2h0IG9mIHN0YXRlICR7bmFtZX0gZnJvbSBCbGVuZFN0YXRlICR7dGhpcy5uYW1lfS4gTm8gc3RhdGUgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCk7XG4gICAgcmV0dXJuIHN0YXRlLnNldFdlaWdodCh3ZWlnaHQsIHNlY29uZHMsIGVhc2luZ0ZuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWx0aXBsaWVzIHRoZSB3ZWlnaHQgb2YgZWFjaCBzdWItc3RhdGUgYnkgYSBmYWN0b3IgdG8gZGV0ZXJtaW5lIHRoZSBpbnRlcm5hbCB3ZWlnaHQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmYWN0b3IgLSAwLTEgbXVsdGlwbGllciB0byBhcHBseSB0byB0aGUgdXNlciB3ZWlnaHQuXG4gICAqL1xuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xuXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgc3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhbnkgdmFsdWVzIG9mIHRoZSBzdWItc3RhdGVzIHRoYXQgbmVlZCB0byBiZSBldmFsdWF0ZWQgZXZlcnkgZnJhbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXG4gICAqL1xuICB1cGRhdGUoZGVsdGFUaW1lKSB7XG4gICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XG5cbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS51cGRhdGUoZGVsdGFUaW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBwbGF5YmFjayBvZiB0aGUgc3ViLXN0YXRlcyBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgc3RhdGUgZmluaXNoZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbc3VwZXIucGxheSgpXTtcblxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHByb21pc2VzLnB1c2goc3RhdGUucGxheSgpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gRGVmZXJyZWQuYWxsKHByb21pc2VzLCBvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdXNlIHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzLiBUaGlzIHByZXZlbnRzIHBlbmRpbmcgcHJvbWlzZXMgZnJvbSBiZWluZyBleGVjdXRlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwYXVzZSgpIHtcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS5wYXVzZSgpO1xuICAgIH0pO1xuICAgIHJldHVybiBzdXBlci5wYXVzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBwbGF5YmFjayBvZiB0aGUgc3ViLXN0YXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBzdGF0ZSBmaW5pc2hlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgcmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCkge1xuICAgIGNvbnN0IHByb21pc2VzID0gW3N1cGVyLnJlc3VtZSgpXTtcblxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHByb21pc2VzLnB1c2goc3RhdGUucmVzdW1lKCkpO1xuICAgIH0pO1xuICAgIHJldHVybiBEZWZlcnJlZC5hbGwocHJvbWlzZXMsIG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzIGFuZCBjYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN0YXRlLmNhbmNlbCgpO1xuICAgIH0pO1xuICAgIHJldHVybiBzdXBlci5jYW5jZWwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzIGFuZCByZXNvbHZlIGFueSBwZW5kaW5nIHByb21pc2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0b3AoKSB7XG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgc3RhdGUuc3RvcCgpO1xuICAgIH0pO1xuICAgIHJldHVybiBzdXBlci5zdG9wKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzY2FyZHMgYWxsIHN1Yi1zdGF0ZSByZXNvdXJjZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZGlzY2FyZCgpIHtcbiAgICBzdXBlci5kaXNjYXJkKCk7XG5cbiAgICB0aGlzLmRpc2NhcmRTdGF0ZXMoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBYnN0cmFjdEJsZW5kU3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IEFic3RyYWN0QmxlbmRTdGF0ZSBmcm9tICcuL0Fic3RyYWN0QmxlbmRTdGF0ZSc7XG5cbi8qKlxuICogQ2xhc3MgZm9yIGJsZW5kaW5nIE4gbnVtYmVyIG9mIGJsZW5kIHN0YXRlcy5cbiAqXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdEJsZW5kU3RhdGVcbiAqL1xuY2xhc3MgRnJlZUJsZW5kU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdEJsZW5kU3RhdGUge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gLSBPcHRpb25zIGZvciB0aGUgY29udGFpbmVyIHN0YXRlLlxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdFN0YXRlPn0gW2JsZW5kU3RhdGVzPVtdXSAtIEJsZW5kIHN0YXRlcyB0byBiZSBjb250cm9sbGVkIGJ5XG4gICAqIHRoaXMgY29udGFpbmVyLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCBibGVuZFN0YXRlcyA9IFtdKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYmxlbmRTdGF0ZXMpO1xuICB9XG5cbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcblxuICAgIC8vIERldGVybWluZSB0aGUgdG90YWwgYWN0aXZlIHdlaWdodCBvZiBibGVuZCBzdGF0ZXNcbiAgICBsZXQgc3VtV2VpZ2h0cyA9IDA7XG5cbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdW1XZWlnaHRzICs9IHN0YXRlLndlaWdodDtcbiAgICB9KTtcblxuICAgIC8vIEVuc3VyZSB0aGUgc3VtIG9mIGJsZW5kIHN0YXRlIGludGVybmFsIHdlaWdodHMgZG9lcyBub3QgZXhjZWVkIGNvbnRhaW5lciBpbnRlcm5hbCB3ZWlnaHRcbiAgICBmYWN0b3IgLz0gTWF0aC5tYXgoc3VtV2VpZ2h0cywgMSk7XG5cbiAgICAvLyBTdW0gb2YgYmxlbmQgc3RhdGUgaW50ZXJuYWwgd2VpZ2h0cyBzaG91bGQgbm90IGV4Y2VlZCBjb250YWluZXIgaW50ZXJuYWwgd2VpZ2h0XG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgc3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yICogdGhpcy5fd2VpZ2h0KTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGcmVlQmxlbmRTdGF0ZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XG5pbXBvcnQgQWJzdHJhY3RCbGVuZFN0YXRlIGZyb20gJy4vQWJzdHJhY3RCbGVuZFN0YXRlJztcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuLi9BbmltYXRpb25VdGlscyc7XG5cbi8qKlxuICogQ2xhc3MgZm9yIGJsZW5kaW5nIE4gbnVtYmVyIG9mIGJsZW5kIHN0YXRlcyBiYXNlZCBvbiBhIHNpbmdsZVxuICogcGFyYW1ldGVyLlxuICpcbiAqIEBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZVxuICovXG5jbGFzcyBCbGVuZDFkU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdEJsZW5kU3RhdGUge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBPcHRpb25zIGZvciB0aGUgY29udGFpbmVyIHN0YXRlXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0QmxlbmRTdGF0ZT59IFtibGVuZFN0YXRlcz1bXV0gLSBCbGVuZCBzdGF0ZXMgdG8gYmVcbiAgICogY29udHJvbGxlZCBieSB0aGlzIGNvbnRhaW5lci5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gW2JsZW5kVGhyZXNob2xkcz1bXV0gLSBUaHJlc2hvbGQgdmFsdWVzIGZvciBhY3RpdmF0aW5nXG4gICAqIGVhY2ggYmxlbmQgc3RhdGUuXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBbcGhhc2VNYXRjaGVzPVtdXSAtIEJvb2xlYW5zIGluZGljYXRpbmcgd2hldGhlciBvciBub3RcbiAgICogZWFjaCBibGVuZCBzdGF0ZSBzaG91bGQgYmUgcGhhc2UgbWF0Y2hlZC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnMgPSB7fSxcbiAgICBibGVuZFN0YXRlcyA9IFtdLFxuICAgIGJsZW5kVGhyZXNob2xkcyA9IFtdLFxuICAgIHBoYXNlTWF0Y2hlcyA9IFtdXG4gICkge1xuICAgIHN1cGVyKG9wdGlvbnMsIGJsZW5kU3RhdGVzKTtcblxuICAgIHRoaXMuX2JsZW5kVmFsdWUgPSAwO1xuICAgIHRoaXMuX3Byb21pc2VzID0ge1xuICAgICAgLi4udGhpcy5fcHJvbWlzZXMsXG4gICAgICBibGVuZFZhbHVlOiBEZWZlcnJlZC5yZXNvbHZlKCksXG4gICAgfTtcblxuICAgIC8vIFZhbGlkYXRlIHRoZXJlIGFyZSBubyBkdXBsaWNhdGUgdGhyZXNob2xkc1xuICAgIGNvbnN0IG5vblplcm9EaWZmZXJlbnRTaXplID1cbiAgICAgIGJsZW5kU3RhdGVzLmxlbmd0aCAhPT0gMCAmJiBibGVuZFN0YXRlcy5sZW5ndGggIT09IGJsZW5kVGhyZXNob2xkcy5sZW5ndGg7XG4gICAgaWYgKG5vblplcm9EaWZmZXJlbnRTaXplKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIEJsZW5kMWRTdGF0ZSB3aXRoIGJsZW5kVGhyZXNob2xkcyAke2JsZW5kVGhyZXNob2xkc30uIEJsZW5kVGhyZXNob2xkcyBjb3VudCBkb2VzIG5vdCBtYXRjaCBibGVuZFN0YXRlcyBjb3VudC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5zRHVwbGljYXRlcyA9XG4gICAgICBuZXcgU2V0KGJsZW5kVGhyZXNob2xkcykuc2l6ZSAhPT0gYmxlbmRUaHJlc2hvbGRzLmxlbmd0aDtcbiAgICBpZiAoY29udGFpbnNEdXBsaWNhdGVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIEJsZW5kMWRTdGF0ZSB3aXRoIGJsZW5kVGhyZXNob2xkcyAke2JsZW5kVGhyZXNob2xkc30uIEJsZW5kVGhyZXNob2xkcyBjb250YWlucyBkdXBsaWNhdGUgdmFsdWVzYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSB0aHJlc2hvbGRzIG1hcFxuICAgIHRoaXMuX3RocmVzaG9sZHMgPSBbXTtcbiAgICBbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5mb3JFYWNoKChzdGF0ZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZHMucHVzaCh7XG4gICAgICAgIHZhbHVlOiBibGVuZFRocmVzaG9sZHNbaW5kZXhdLFxuICAgICAgICBuYW1lOiBzdGF0ZS5uYW1lLFxuICAgICAgICBwaGFzZU1hdGNoOiBwaGFzZU1hdGNoZXNbaW5kZXhdIHx8IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zb3J0VGhyZXNob2xkcygpO1xuICAgIHRoaXMuX2ZvcmNlTm9UaHJlc2hvbGREdXBlcyA9IHRydWU7XG5cbiAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IG51bGw7XG5cbiAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBibGVuZCBwYXJhbWV0ZXIgdmFsdWUuXG4gICAqL1xuICBnZXQgYmxlbmRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYmxlbmRWYWx1ZTtcbiAgfVxuXG4gIHNldCBibGVuZFZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5fYmxlbmRWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIGJsZW5kIHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cbiAgICovXG4gIGdldCBibGVuZFZhbHVlUGVuZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZSAmJiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlLnBlbmRpbmc7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodCBvdmVyIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVsbH0gbmFtZSAtIFVudXNlZCBwYXJhbWV0ZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUaGUgdGFyZ2V0IHdlaWdodCB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmRzPTBdIC0gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGVcbiAgICogdGFyZ2V0IHdlaWdodC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGludGVycG9sYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHNldEJsZW5kV2VpZ2h0KG5hbWUsIHZhbHVlLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlLmNhbmNlbCgpO1xuXG4gICAgdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZSA9IEFuaW1hdGlvblV0aWxzLmludGVycG9sYXRlUHJvcGVydHkoXG4gICAgICB0aGlzLFxuICAgICAgJ2JsZW5kVmFsdWUnLFxuICAgICAgdmFsdWUsXG4gICAgICB7XG4gICAgICAgIHNlY29uZHMsXG4gICAgICAgIGVhc2luZ0ZuLFxuICAgICAgICBvblByb2dyZXNzOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlQmxlbmRXZWlnaHRzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRmluaXNoOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlQmxlbmRXZWlnaHRzKCk7XG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRCbGVuZFdlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5ibGVuZFZhbHVlO1xuICB9XG5cbiAgYWRkU3RhdGUoc3RhdGUsIHRocmVzaG9sZFZhbHVlID0gMCwgcGhhc2VNYXRjaCA9IGZhbHNlKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkcyA9IHRoaXMuX3RocmVzaG9sZHMgfHwgW107XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGFscmVhZHkgYSBzdGF0ZSB3aXRoIHRoaXMgdGhyZXNob2xkXG4gICAgY29uc3Qgc2FtZVZhbHVlID0gdGhpcy5fdGhyZXNob2xkcy5maW5kKFxuICAgICAgdGhyZXNob2xkID0+IHRocmVzaG9sZC52YWx1ZSA9PT0gdGhyZXNob2xkVmFsdWVcbiAgICApO1xuICAgIGlmICh0aGlzLl9mb3JjZU5vVGhyZXNob2xkRHVwZXMgJiYgc2FtZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBzZXQgYmxlbmQgdGhyZXNob2xkIG9mICR7dGhyZXNob2xkVmFsdWV9IGZvciBzdGF0ZSAke3N0YXRlLm5hbWV9IG9uICR7dGhpcy5uYW1lfS4gQSBzdGF0ZSBhbHJlYWR5IGV4aXN0cyB3aXRoIHRoYXQgdGhyZXNob2xkLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3VwZXIuYWRkU3RhdGUoc3RhdGUpO1xuICAgIHRoaXMuX3RocmVzaG9sZHMucHVzaCh7XG4gICAgICB2YWx1ZTogdGhyZXNob2xkVmFsdWUsXG4gICAgICBuYW1lOiBzdGF0ZS5uYW1lLFxuICAgICAgcGhhc2VNYXRjaDogcGhhc2VNYXRjaCB8fCBmYWxzZSxcbiAgICB9KTtcblxuICAgIHRoaXMuX3NvcnRUaHJlc2hvbGRzKCk7XG5cbiAgICByZXR1cm4gc3RhdGUubmFtZTtcbiAgfVxuXG4gIHJlbW92ZVN0YXRlKG5hbWUpIHtcbiAgICBjb25zdCByZW1vdmVkID0gc3VwZXIucmVtb3ZlU3RhdGUobmFtZSk7XG5cbiAgICBpZiAocmVtb3ZlZCkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl90aHJlc2hvbGRzLmZpbmRJbmRleChcbiAgICAgICAgdGhyZXNob2xkID0+IHRocmVzaG9sZC5uYW1lID09PSBuYW1lXG4gICAgICApO1xuICAgICAgdGhpcy5fdGhyZXNob2xkcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHJldHVybiByZW1vdmVkO1xuICB9XG5cbiAgcmVuYW1lU3RhdGUoY3VycmVudE5hbWUsIG5ld05hbWUpIHtcbiAgICBuZXdOYW1lID0gc3VwZXIucmVuYW1lU3RhdGUoY3VycmVudE5hbWUsIG5ld05hbWUpO1xuXG4gICAgY29uc3QgdGhyZXNob2xkID0gdGhpcy5fdGhyZXNob2xkcy5maW5kKFxuICAgICAgdGhyZXNob2xkID0+IHRocmVzaG9sZC5uYW1lID09PSBjdXJyZW50TmFtZVxuICAgICk7XG4gICAgdGhyZXNob2xkLm5hbWUgPSBuZXdOYW1lO1xuXG4gICAgcmV0dXJuIG5ld05hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdGhyZXNob2xkIHZhbHVlIG9mIGEgYmxlbmQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHRvIGdldCB0aGUgdGhyZXNob2xkIG9mLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaHJlaG9sZCB2YWx1ZS5cbiAgICovXG4gIGdldEJsZW5kVGhyZXNob2xkKG5hbWUpIHtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLm5hbWUgPT09IG5hbWVcbiAgICApO1xuXG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgZ2V0IGJsZW5kIHRocmVzaG9sZCBvZiBzdGF0ZSAke25hbWV9IG9uICR7dGhpcy5uYW1lfS4gTm8gc3RhdGUgZXhpc3RzIHdpdGggdGhhdCBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRocmVzaG9sZC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0aHJlc2hvbGQgdmFsdWUgb2YgYSBibGVuZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgdG8gc2V0IHRoZSB0aHJlc2hvbGQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFZhbHVlIG9mIHRoZSB0aHJlc2hvbGQgdG8gc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBTZXQgdGhyZXNob2xkIHZhbHVlLlxuICAgKi9cbiAgc2V0QmxlbmRUaHJlc2hvbGQobmFtZSwgdmFsdWUpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGFscmVhZHkgYSBzdGF0ZSB3aXRoIHRoaXMgdGhyZXNob2xkXG4gICAgY29uc3Qgc2FtZVZhbHVlID0gdGhpcy5fdGhyZXNob2xkcy5maW5kKFxuICAgICAgdGhyZXNob2xkID0+IHRocmVzaG9sZC52YWx1ZSA9PT0gdmFsdWVcbiAgICApO1xuICAgIGlmIChzYW1lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHNldCBibGVuZCB0aHJlc2hvbGQgb2YgJHt2YWx1ZX0gZm9yIHN0YXRlICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBBIHN0YXRlIGFscmVhZHkgZXhpc3RzIHdpdGggdGhhdCB0aHJlc2hvbGQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aHJlc2hvbGQgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLm5hbWUgPT09IG5hbWVcbiAgICApO1xuXG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3Qgc2V0IGJsZW5kIHRocmVzaG9sZCBvZiBzdGF0ZSAke25hbWV9IG9uICR7dGhpcy5uYW1lfS4gTm8gc3RhdGUgZXhpc3RzIHdpdGggdGhhdCBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhyZXNob2xkLnZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9zb3J0VGhyZXNob2xkcygpO1xuXG4gICAgcmV0dXJuIHRocmVzaG9sZC52YWx1ZTtcbiAgfVxuXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XG5cbiAgICBpZiAodGhpcy5fcGhhc2VMZWFkU3RhdGUpIHtcbiAgICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlLndlaWdodCAhPT0gMCkge1xuICAgICAgICAgIHN0YXRlLm5vcm1hbGl6ZWRUaW1lID0gdGhpcy5fcGhhc2VMZWFkU3RhdGUubm9ybWFsaXplZFRpbWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBibGVuZCB3ZWlnaHRzIGJhc2VkIG9uIHRoZWlyIGNvcnJlc3BvbmRpbmcgdGhyZXNob2xkIHZhbHVlc1xuICAgKiBhbmQgdGhlIGN1cnJlbnQgYmxlbmRWYWx1ZS4gQWRkaXRpb25hbGx5LCBzZXRzIGEgbGVhZCBwaGFzZSBzdGF0ZSBpZiB0aGVcbiAgICogY29uZGl0aW9ucyBmb3IgcGhhc2UtbWF0Y2hpbmcgaGF2ZSBiZWVuIHNhdGlzZmllZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVCbGVuZFdlaWdodHMoKSB7XG4gICAgaWYgKHRoaXMuX3RocmVzaG9sZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5fdGhyZXNob2xkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fc3RhdGVzLmdldCh0aGlzLl90aHJlc2hvbGRzWzBdLm5hbWUpO1xuICAgICAgc3RhdGUuc2V0V2VpZ2h0KDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxseSBzZXQgYWxsIHN1Yi1zdGF0ZSB3ZWlnaHRzIHRvIHplcm9cbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IG51bGw7XG5cbiAgICAvLyBGaW5kIHRoZSBmaXJzdCB0aHJlc2hvbGQgdGhhdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBhcmFtZXRlciB2YWx1ZVxuICAgIGxldCB0YXJnZXRJbmRleCA9IHRoaXMuX3RocmVzaG9sZHMuZmluZEluZGV4KHRocmVzaG9sZCA9PiB7XG4gICAgICByZXR1cm4gdGhyZXNob2xkLnZhbHVlID49IHRoaXMuX2JsZW5kVmFsdWU7XG4gICAgfSk7XG5cbiAgICBpZiAodGFyZ2V0SW5kZXggPT09IDAgfHwgdGFyZ2V0SW5kZXggPT09IC0xKSB7XG4gICAgICAvLyBHaXZlIG9uZSBzdGF0ZSBmdWxsIGluZmx1ZW5jZVxuICAgICAgdGFyZ2V0SW5kZXggPSB0YXJnZXRJbmRleCA9PT0gLTEgPyB0aGlzLl90aHJlc2hvbGRzLmxlbmd0aCAtIDEgOiAwO1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRoaXMuX3RocmVzaG9sZHNbdGFyZ2V0SW5kZXhdLm5hbWUpO1xuICAgICAgc3RhdGUuc2V0V2VpZ2h0KDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaW5lYXIgaW50ZXJwb2xhdGUgaW5mbHVlbmNlIGJldHdlZW4gdHdvIHN0YXRlc1xuICAgICAgY29uc3QgdGhyZXNob2xkQSA9IHRoaXMuX3RocmVzaG9sZHNbdGFyZ2V0SW5kZXggLSAxXTtcbiAgICAgIGNvbnN0IHRocmVzaG9sZEIgPSB0aGlzLl90aHJlc2hvbGRzW3RhcmdldEluZGV4XTtcblxuICAgICAgY29uc3QgZmFjdG9yQiA9XG4gICAgICAgICh0aGlzLmJsZW5kVmFsdWUgLSB0aHJlc2hvbGRBLnZhbHVlKSAvXG4gICAgICAgICh0aHJlc2hvbGRCLnZhbHVlIC0gdGhyZXNob2xkQS52YWx1ZSk7XG4gICAgICBjb25zdCBmYWN0b3JBID0gMSAtIGZhY3RvckI7XG5cbiAgICAgIGNvbnN0IHN0YXRlQSA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQS5uYW1lKTtcbiAgICAgIGNvbnN0IHN0YXRlQiA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQi5uYW1lKTtcblxuICAgICAgc3RhdGVBLnNldFdlaWdodChmYWN0b3JBKTtcbiAgICAgIHN0YXRlQi5zZXRXZWlnaHQoZmFjdG9yQik7XG5cbiAgICAgIC8vIFNldCBwaGFzZS1tYXRjaGluZyBpZiBuZWVkZWRcbiAgICAgIGlmICh0aHJlc2hvbGRBLnBoYXNlTWF0Y2ggJiYgdGhyZXNob2xkQi5waGFzZU1hdGNoKSB7XG4gICAgICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gZmFjdG9yQSA+IGZhY3RvckIgPyBzdGF0ZUEgOiBzdGF0ZUI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNvcnRzIHRoZSB0aHJlc2hvbGRzIGZyb20gbG93IHRvIGhpZ2ggYmFzZWQgb24gdmFsdWUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc29ydFRocmVzaG9sZHMoKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkcy5zb3J0KChhLCBiKSA9PiBhLnZhbHVlIC0gYi52YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQmxlbmQxZFN0YXRlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcbmltcG9ydCBBYnN0cmFjdEJsZW5kU3RhdGUgZnJvbSAnLi9BYnN0cmFjdEJsZW5kU3RhdGUnO1xuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJy4uL0FuaW1hdGlvblV0aWxzJztcblxuLyoqXG4gKiBDbGFzcyBmb3IgYmxlbmRpbmcgTiBudW1iZXIgb2YgYmxlbmQgc3RhdGVzIGJhc2VkIG9uIHR3b1xuICogcGFyYW10ZXJzLlxuICpcbiAqIEBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZVxuICovXG5jbGFzcyBCbGVuZDJkU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdEJsZW5kU3RhdGUge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBPcHRpb25zIGZvciB0aGUgY29udGFpbmVyIHN0YXRlXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0QmxlbmRTdGF0ZT59IFtibGVuZFN0YXRlcz1bXV0gLSBCbGVuZCBzdGF0ZXMgdG8gYmVcbiAgICogY29udHJvbGxlZCBieSB0aGlzIGNvbnRhaW5lci5cbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSBbYmxlbmRUaHJlc2hvbGRzPVtdXSAtIFRocmVzaG9sZCB2YWx1ZXMgZm9yIGFjdGl2YXRpbmdcbiAgICogZWFjaCBibGVuZCBzdGF0ZS5cbiAgICogQHBhcmFtIHtBcnJheS48Ym9vbGVhbj59IFtwaGFzZU1hdGNoZXM9W11dIC0gQm9vbGVhbnMgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdFxuICAgKiBlYWNoIGJsZW5kIHN0YXRlIHNob3VsZCBiZSBwaGFzZSBtYXRjaGVkLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9ucyA9IHt9LFxuICAgIGJsZW5kU3RhdGVzID0gW10sXG4gICAgYmxlbmRUaHJlc2hvbGRzID0gW10sXG4gICAgcGhhc2VNYXRjaGVzID0gW11cbiAgKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYmxlbmRTdGF0ZXMpO1xuXG4gICAgaWYgKGJsZW5kU3RhdGVzLmxlbmd0aCAhPT0gYmxlbmRUaHJlc2hvbGRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBCbGVuZDJkU3RhdGUgd2l0aCBibGVuZFN0YXRlcyAke2JsZW5kU3RhdGVzfSBhbmQgYmxlbmRUaHJlc2hvbGRzICR7YmxlbmRUaHJlc2hvbGRzfS4gQ291bnQgb2YgYmxlbmRTdGF0ZXMgbXVzdCBtYXRjaCBjb3VudCBvZiBibGVuZFRocmVzaG9sZHMuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBibGVuZFRocmVzaG9sZHNcbiAgICAgIC5zbGljZSgwLCBibGVuZFRocmVzaG9sZHMubGVuZ3RoIC0gMSlcbiAgICAgIC5mb3JFYWNoKCh0aHJlc2hvbGQsIGluZGV4KSA9PiB7XG4gICAgICAgIGJsZW5kVGhyZXNob2xkcy5zbGljZShpbmRleCArIDEpLmZvckVhY2gob3RoZXJUaHJlc2hvbGQgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRocmVzaG9sZFswXSA9PT0gb3RoZXJUaHJlc2hvbGRbMF0gJiZcbiAgICAgICAgICAgIHRocmVzaG9sZFsxXSA9PT0gb3RoZXJUaHJlc2hvbGRbMV1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYENhbm5vdCBjcmVhdGUgQmxlbmQyZFN0YXRlIHdpdGggYmxlbmRUaHJlc2hvbGRzICR7YmxlbmRUaHJlc2hvbGRzfS4gTm8gZHVwbGljYXRlIHZhbHVlcyBhbGxvd2VkIGluIGJsZW5kVGhyZXNob2xkcy5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2JsZW5kVmFsdWVYID0gMDtcbiAgICB0aGlzLl9ibGVuZFZhbHVlWSA9IDA7XG5cbiAgICB0aGlzLl9wcm9taXNlcyA9IHtcbiAgICAgIC4uLnRoaXMuX3Byb21pc2VzLFxuICAgICAgYmxlbmRWYWx1ZVg6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICAgIGJsZW5kVmFsdWVZOiBEZWZlcnJlZC5yZXNvbHZlKCksXG4gICAgfTtcblxuICAgIHRoaXMuX3RocmVzaG9sZHMgPSBbXTtcbiAgICBbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5mb3JFYWNoKChzdGF0ZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZHMucHVzaCh7XG4gICAgICAgIG5hbWU6IHN0YXRlLm5hbWUsXG4gICAgICAgIHBoYXNlTWF0Y2g6IHBoYXNlTWF0Y2hlc1tpbmRleF0gfHwgZmFsc2UsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZlcnRpY2VzID0gYmxlbmRUaHJlc2hvbGRzO1xuXG4gICAgaWYgKHRoaXMuX3ZlcnRpY2VzLmxlbmd0aCA+PSAzKSB7XG4gICAgICB0aGlzLl90cmlhbmdsZXMgPSBNYXRoVXRpbHMuZ2V0RGVsYXVuYXlUcmlhbmd1bGF0aW9uKHRoaXMuX3ZlcnRpY2VzKTtcbiAgICB9XG5cbiAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IG51bGw7XG5cbiAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0IG92ZXIgdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIGJsZW5kIHdlaWdodCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUYXJnZXQgd2VpZ2h0IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZVxuICAgKiB0YXJnZXQgdmFsdWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICBzZXRCbGVuZFdlaWdodChuYW1lLCB2YWx1ZSwgc2Vjb25kcyA9IDAsIGVhc2luZ0ZuKSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSBgYmxlbmRWYWx1ZSR7bmFtZS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgaWYgKHByb3BlcnR5ICE9PSAnYmxlbmRWYWx1ZVgnICYmIHByb3BlcnR5ICE9PSAnYmxlbmRWYWx1ZVknKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3Qgc2V0IGJsZW5kIHdlaWdodCBmb3IgJHtuYW1lfSBvbiAke3RoaXMubmFtZX0uIEJsZW5kMmRTdGF0ZSBvbmx5IGFjY2VwdHMgJ1gnIG9yICdZJyBmb3Igc2V0QmxlbmRXZWlnaHRgXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX3Byb21pc2VzW3Byb3BlcnR5XS5jYW5jZWwoKTtcblxuICAgIHRoaXMuX3Byb21pc2VzW3Byb3BlcnR5XSA9IEFuaW1hdGlvblV0aWxzLmludGVycG9sYXRlUHJvcGVydHkoXG4gICAgICB0aGlzLFxuICAgICAgcHJvcGVydHksXG4gICAgICB2YWx1ZSxcbiAgICAgIHtcbiAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgIG9uUHJvZ3Jlc3M6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25GaW5pc2g6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzW3Byb3BlcnR5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgYmxlbmQgd2VpZ2h0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0QmxlbmRXZWlnaHQobmFtZSkge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgIGlmIChwcm9wZXJ0eSAhPT0gJ1gnICYmIHByb3BlcnR5ICE9PSAnWScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgYmxlbmQgd2VpZ2h0IGZvciAke25hbWV9IG9uICR7dGhpcy5uYW1lfS4gQmxlbmQyZFN0YXRlIG9ubHkgYWNjZXB0cyAnWCcgb3IgJ1knIGZvciBnZXRCbGVuZFdlaWdodGBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnR5ID09PSAnWCcgPyB0aGlzLl9ibGVuZFZhbHVlWCA6IHRoaXMuX2JsZW5kVmFsdWVZO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIHggYmxlbmQgd2VpZ2h0LlxuICAgKi9cbiAgZ2V0IGJsZW5kVmFsdWVYKCkge1xuICAgIHJldHVybiB0aGlzLl9ibGVuZFZhbHVlWDtcbiAgfVxuXG4gIHNldCBibGVuZFZhbHVlWCh2YWx1ZSkge1xuICAgIHRoaXMuX2JsZW5kVmFsdWVYID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgeSBibGVuZCB3ZWlnaHQuXG4gICAqL1xuICBnZXQgYmxlbmRWYWx1ZVkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JsZW5kVmFsdWVZO1xuICB9XG5cbiAgc2V0IGJsZW5kVmFsdWVZKHZhbHVlKSB7XG4gICAgdGhpcy5fYmxlbmRWYWx1ZVkgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB4IGJsZW5kIHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cbiAgICovXG4gIGdldCBibGVuZFZhbHVlWFBlbmRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWVYICYmIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWVYLnBlbmRpbmc7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgeSBibGVuZCB2YWx1ZSBpcyBjdXJyZW50bHkgYmVpbmcgYW5pbWF0ZWQuXG4gICAqL1xuICBnZXQgYmxlbmRWYWx1ZVlQZW5kaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlWSAmJiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlWS5wZW5kaW5nO1xuICB9XG5cbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcblxuICAgIGlmICh0aGlzLl9waGFzZUxlYWRTdGF0ZSkge1xuICAgICAgWy4uLnRoaXMuX3N0YXRlcy52YWx1ZXMoKV0uZm9yRWFjaCgoc3RhdGUsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChzdGF0ZS53ZWlnaHQgIT09IDAgJiYgdGhpcy5fdGhyZXNob2xkc1tpbmRleF0ucGhhc2VNYXRjaCkge1xuICAgICAgICAgIHN0YXRlLm5vcm1hbGl6ZWRUaW1lID0gdGhpcy5fcGhhc2VMZWFkU3RhdGUubm9ybWFsaXplZFRpbWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBibGVuZCB3ZWlnaHRzIGJhc2VkIG9uIHRoZWlyIGNvcnJlc3BvbmRpbmcgdGhyZXNob2xkIHZhbHVlc1xuICAgKiBhbmQgdGhlIGN1cnJlbnQgW3gseV0gYmxlbmRWYWx1ZS4gQWRkaXRpb25hbGx5LCBzZXRzIGEgbGVhZCBwaGFzZSBzdGF0ZSBpZiB0aGVcbiAgICogY29uZGl0aW9ucyBmb3IgcGhhc2UtbWF0Y2hpbmcgaGF2ZSBiZWVuIHNhdGlzZmllZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVCbGVuZFdlaWdodHMoKSB7XG4gICAgaWYgKCF0aGlzLl92ZXJ0aWNlcyB8fCB0aGlzLl92ZXJ0aWNlcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGlmICh0aGlzLl92ZXJ0aWNlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldWzBdLndlaWdodCA9IDE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGx5IHNldCBhbGwgc3ViLXN0YXRlIHdlaWdodHMgdG8gemVyb1xuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN0YXRlLnNldFdlaWdodCgwKTtcbiAgICB9KTtcbiAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IG51bGw7XG5cbiAgICBjb25zdCBwID0gW3RoaXMuX2JsZW5kVmFsdWVYLCB0aGlzLl9ibGVuZFZhbHVlWV07XG5cbiAgICBpZiAodGhpcy5fdmVydGljZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICB0aGlzLl9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRPbkxpbmUocCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRyaWFuZ2xlID0gdGhpcy5fdHJpYW5nbGVzLmZpbmQodHJpYW5nbGUgPT4ge1xuICAgICAgICByZXR1cm4gTWF0aFV0aWxzLmlzUG9pbnRJblRyaWFuZ2xlKFxuICAgICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzBdXSxcbiAgICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsxXV0sXG4gICAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMl1dLFxuICAgICAgICAgIHBcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHJpYW5nbGUpIHtcbiAgICAgICAgdGhpcy5fc2V0SW5mbHVlbmNlVHJpYW5nbGUodHJpYW5nbGUsIHApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc2V0SW5mbHVlbmNlQ2xvc2VzdFBvaW50SW5UcmlhbmdsZXMocCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYmxlbmQgd2VpZ2h0cyBmb3Igc3RhdGVzIGNvcnJlc3BvbmRpbmcgdG8gYVxuICAgKiB0cmlhbmdsZSBvZiB0aHJlc2hvbGRzIGFuZCBhIGdpdmVuIFt4LHldIGJsZW5kVmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IHRyaWFuZ2xlIC0gU2V0IG9mIHRyaWFuZ2x1YXRlZCBpbmRpY2VzXG4gICAqIHRoYXQgY29ycmVzcG9uZCB0byBibGVuZCB0aHJlc2hvbGRzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gR2l2ZW4gW3gseV0gYmxlbmRWYWx1ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRJbmZsdWVuY2VUcmlhbmdsZSh0cmlhbmdsZSwgcCkge1xuICAgIGNvbnN0IGFyZWFBID0gTWF0aFV0aWxzLnRyaWFuZ2xlQXJlYShcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzFdXSxcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzJdXSxcbiAgICAgIHBcbiAgICApO1xuXG4gICAgY29uc3QgYXJlYUIgPSBNYXRoVXRpbHMudHJpYW5nbGVBcmVhKFxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMl1dLFxuICAgICAgcFxuICAgICk7XG5cbiAgICBjb25zdCBhcmVhQyA9IE1hdGhVdGlscy50cmlhbmdsZUFyZWEoXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVswXV0sXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsxXV0sXG4gICAgICBwXG4gICAgKTtcblxuICAgIGNvbnN0IHRvdGFsQXJlYSA9IGFyZWFBICsgYXJlYUIgKyBhcmVhQztcblxuICAgIGNvbnN0IHdlaWdodEEgPSBhcmVhQSAvIHRvdGFsQXJlYTtcbiAgICBjb25zdCB3ZWlnaHRCID0gYXJlYUIgLyB0b3RhbEFyZWE7XG4gICAgY29uc3Qgd2VpZ2h0QyA9IGFyZWFDIC8gdG90YWxBcmVhO1xuXG4gICAgY29uc3QgdGhyZXNob2xkQSA9IHRoaXMuX3RocmVzaG9sZHNbdHJpYW5nbGVbMF1dO1xuICAgIGNvbnN0IHRocmVzaG9sZEIgPSB0aGlzLl90aHJlc2hvbGRzW3RyaWFuZ2xlWzFdXTtcbiAgICBjb25zdCB0aHJlc2hvbGRDID0gdGhpcy5fdGhyZXNob2xkc1t0cmlhbmdsZVsyXV07XG5cbiAgICBjb25zdCBzdGF0ZUEgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRocmVzaG9sZEEubmFtZSk7XG4gICAgY29uc3Qgc3RhdGVCID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRCLm5hbWUpO1xuICAgIGNvbnN0IHN0YXRlQyA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQy5uYW1lKTtcblxuICAgIHN0YXRlQS5zZXRXZWlnaHQod2VpZ2h0QSk7XG4gICAgc3RhdGVCLnNldFdlaWdodCh3ZWlnaHRCKTtcbiAgICBzdGF0ZUMuc2V0V2VpZ2h0KHdlaWdodEMpO1xuXG4gICAgdGhpcy5fc2V0UGhhc2VMZWFkU3RhdGUoXG4gICAgICBbc3RhdGVBLCBzdGF0ZUIsIHN0YXRlQ10sXG4gICAgICBbdGhyZXNob2xkQS5waGFzZU1hdGNoLCB0aHJlc2hvbGRCLnBoYXNlTWF0Y2gsIHRocmVzaG9sZEMucGhhc2VNYXRjaF1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIGNsb3Nlc3QgcG9pbnQgd2l0aGluIGEgdHJpYW5nbGUgb2ZcbiAgICogdGhyZXNob2xkcyBiYXNlZCBvbiB0aGUgY3VycmVudCBbeCx5XSBibGVuZFZhbHVlcyBhbmRcbiAgICogdGhlbiBzZXRzIGJsZW5kIHdlaWdodHMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHN0YXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcCAtIEdpdmVuIFt4LHldIGJsZW5kVmFsdWUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0SW5mbHVlbmNlQ2xvc2VzdFBvaW50SW5UcmlhbmdsZXMocCkge1xuICAgIGxldCBnbG9iYWxDbG9zZXN0UG9pbnQgPSBudWxsO1xuICAgIGxldCBnbG9iYWxNaW5EaXN0ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIGxldCBjbG9zZXN0VHJpYW5nbGUgPSAtMTtcblxuICAgIHRoaXMuX3RyaWFuZ2xlcy5mb3JFYWNoKCh0cmlhbmdsZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBvaW50QSA9IE1hdGhVdGlscy5jbG9zZXN0UG9pbnRPbkxpbmUoXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzBdXSxcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMV1dLFxuICAgICAgICBwXG4gICAgICApO1xuICAgICAgY29uc3QgcG9pbnRCID0gTWF0aFV0aWxzLmNsb3Nlc3RQb2ludE9uTGluZShcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMV1dLFxuICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsyXV0sXG4gICAgICAgIHBcbiAgICAgICk7XG4gICAgICBjb25zdCBwb2ludEMgPSBNYXRoVXRpbHMuY2xvc2VzdFBvaW50T25MaW5lKFxuICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsyXV0sXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzBdXSxcbiAgICAgICAgcFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZGlzdEEgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKHBvaW50QSwgcCk7XG4gICAgICBjb25zdCBkaXN0QiA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQocG9pbnRCLCBwKTtcbiAgICAgIGNvbnN0IGRpc3RDID0gTWF0aFV0aWxzLmRpc3RhbmNlU3F1YXJlZChwb2ludEMsIHApO1xuXG4gICAgICBsZXQgbG9jYWxDbG9zZXN0UG9pbnQgPSBwb2ludEM7XG4gICAgICBsZXQgbG9jYWxNaW5EaXN0ID0gZGlzdEM7XG5cbiAgICAgIGlmIChkaXN0QSA8IGxvY2FsTWluRGlzdCkge1xuICAgICAgICBsb2NhbENsb3Nlc3RQb2ludCA9IHBvaW50QTtcbiAgICAgICAgbG9jYWxNaW5EaXN0ID0gZGlzdEE7XG4gICAgICB9XG4gICAgICBpZiAoZGlzdEIgPCBsb2NhbE1pbkRpc3QpIHtcbiAgICAgICAgbG9jYWxDbG9zZXN0UG9pbnQgPSBwb2ludEI7XG4gICAgICAgIGxvY2FsTWluRGlzdCA9IGRpc3RCO1xuICAgICAgfVxuXG4gICAgICBpZiAobG9jYWxNaW5EaXN0IDwgZ2xvYmFsTWluRGlzdCkge1xuICAgICAgICBnbG9iYWxNaW5EaXN0ID0gbG9jYWxNaW5EaXN0O1xuICAgICAgICBnbG9iYWxDbG9zZXN0UG9pbnQgPSBbLi4ubG9jYWxDbG9zZXN0UG9pbnRdO1xuICAgICAgICBjbG9zZXN0VHJpYW5nbGUgPSBpbmRleDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX3NldEluZmx1ZW5jZVRyaWFuZ2xlKFxuICAgICAgdGhpcy5fdHJpYW5nbGVzW2Nsb3Nlc3RUcmlhbmdsZV0sXG4gICAgICBnbG9iYWxDbG9zZXN0UG9pbnRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIGNsb3Nlc3QgcG9pbnQgb24gdGhlIGxpbmUgZm9ybWVkIGJldHdlZW4gdGhlXG4gICAqIHR3byBibGVuZCB0aHJlc2hvbGRzIGJhc2VkIG9uIHRoZSBjdXJyZW50IFt4LHldIGJsZW5kVmFsdWVzIGFuZFxuICAgKiB0aGVuIHNldHMgYmxlbmQgd2VpZ2h0cyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gR2l2ZW4gW3gseV0gYmxlbmRWYWx1ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRPbkxpbmUocCkge1xuICAgIGNvbnN0IGNsb3Nlc3RQb2ludCA9IE1hdGhVdGlscy5jbG9zZXN0UG9pbnRPbkxpbmUoXG4gICAgICB0aGlzLl92ZXJ0aWNlc1tbMF1dLFxuICAgICAgdGhpcy5fdmVydGljZXNbWzFdXSxcbiAgICAgIHBcbiAgICApO1xuXG4gICAgY29uc3QgZGlzdEEgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKHRoaXMuX3ZlcnRpY2VzWzBdLCBjbG9zZXN0UG9pbnQpO1xuICAgIGNvbnN0IGRpc3RCID0gTWF0aFV0aWxzLmRpc3RhbmNlU3F1YXJlZCh0aGlzLl92ZXJ0aWNlc1sxXSwgY2xvc2VzdFBvaW50KTtcblxuICAgIGNvbnN0IHdlaWdodEEgPSBkaXN0QiAvIChkaXN0QSArIGRpc3RCKTtcbiAgICBjb25zdCB3ZWlnaHRCID0gZGlzdEEgLyAoZGlzdEEgKyBkaXN0Qik7XG5cbiAgICBjb25zdCB0aHJlc2hvbGRBID0gdGhpcy5fdGhyZXNob2xkc1swXTtcbiAgICBjb25zdCB0aHJlc2hvbGRCID0gdGhpcy5fdGhyZXNob2xkc1sxXTtcblxuICAgIGNvbnN0IHN0YXRlQSA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQS5uYW1lKTtcbiAgICBjb25zdCBzdGF0ZUIgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRocmVzaG9sZEIubmFtZSk7XG5cbiAgICBzdGF0ZUEuc2V0V2VpZ2h0KHdlaWdodEEpO1xuICAgIHN0YXRlQi5zZXRXZWlnaHQod2VpZ2h0Qik7XG5cbiAgICB0aGlzLl9zZXRQaGFzZUxlYWRTdGF0ZShcbiAgICAgIFtzdGF0ZUEsIHN0YXRlQl0sXG4gICAgICBbdGhyZXNob2xkQS5waGFzZU1hdGNoLCB0aHJlc2hvbGRCLnBoYXNlTWF0Y2hdXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgbGVhZCBwaGFzZSBzdGF0ZSBpZiB0aGUgY29uZGl0aW9uc1xuICAgKiBmb3IgcGhhc2UtbWF0Y2hpbmcgYXJlIHNhdGlzZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RCbGVuZFN0YXRlPn0gc3RhdGVzIC0gU3RhdGVzIHRvXG4gICAqIGNoZWNrIHBoYXNlLW1hdGNoaW5nIGNyaXRlcmlhLlxuICAgKiBAcGFyYW0ge0FycmF5Ljxib29sZWFuPn0gcGhhc2VNYXRjaGVkIC0gTGlzdCBvZiBwaGFzZS1tYXRjaCBib29sZWFucy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRQaGFzZUxlYWRTdGF0ZShzdGF0ZXMsIHBoYXNlTWF0Y2hlZCkge1xuICAgIGxldCBtYXggPSAwO1xuICAgIHN0YXRlcy5mb3JFYWNoKChzdGF0ZSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChwaGFzZU1hdGNoZWRbaW5kZXhdICYmIHN0YXRlLndlaWdodCA+IG1heCkge1xuICAgICAgICB0aGlzLl9waGFzZUxlYWRTdGF0ZSA9IHN0YXRlO1xuICAgICAgICBtYXggPSBzdGF0ZS53ZWlnaHQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQmxlbmQyZFN0YXRlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBBYnN0cmFjdEJsZW5kU3RhdGUgZnJvbSAnLi9zdGF0ZS9BYnN0cmFjdEJsZW5kU3RhdGUnO1xuaW1wb3J0IEFuaW1hdGlvblBsYXllckludGVyZmFjZSBmcm9tICcuL0FuaW1hdGlvblBsYXllckludGVyZmFjZSc7XG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnLi9BbmltYXRpb25VdGlscyc7XG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJy4uL01hdGhVdGlscyc7XG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnLi4vRGVmZXJyZWQnO1xuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vc3RhdGUvU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xuXG4vKipcbiAqIEVudW0gZm9yIHR5cGVzIG9mIHtAbGluayBBbmltYXRpb25MYXllcn0gYmxlbmRpbmcuXG4gKlxuICogQHJlYWRvbmx5XG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgTGF5ZXJCbGVuZE1vZGVzID0ge092ZXJyaWRlOiAnT3ZlcnJpZGUnLCBBZGRpdGl2ZTogJ0FkZGl0aXZlJ307XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgYmxlbmRpbmcgbW9kZSB7QGxpbmsgQW5pbWF0aW9uTGF5ZXJ9LlxuICpcbiAqIEByZWFkb25seVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRMYXllckJsZW5kTW9kZSA9ICdPdmVycmlkZSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gYmxlbmRNb2RlIGlzIHByZXNlbnQgaW4gdGhlIHZhbHVlcyBvZiB7QGxpbmsgTGF5ZXJCbGVuZE1vZGVzfS5cbiAqIElmIGl0IGlzLCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlLCBvdGhlcndpc2UgcmV0dXJuIHtAbGluayBEZWZhdWx0TGF5ZXJCbGVuZE1vZGV9LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBibGVuZE1vZGUgLSBUaGUgbmFtZSBvZiB0aGUgdHlwZSBvZiBibGVuZGluZy5cbiAqXG4gKiBAcmV0dXJucyB7KHN0cmluZ3xEZWZhdWx0TGF5ZXJCbGVuZE1vZGUpfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVCbGVuZE1vZGUoYmxlbmRNb2RlKSB7XG4gIGlmIChBcnJheS5mcm9tKE9iamVjdC52YWx1ZXMoTGF5ZXJCbGVuZE1vZGVzKSkuaW5jbHVkZXMoYmxlbmRNb2RlKSkge1xuICAgIHJldHVybiBibGVuZE1vZGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIERlZmF1bHRMYXllckJsZW5kTW9kZTtcbiAgfVxufVxuXG4vKipcbiAqIENsYXNzIGZvciBtYW5hZ2luZyBhIHNldCBvZiBhbmltYXRpb25zIHdoZXJlIG9ubHkgb25lIHN0YXRlIGNhbiBiZSBhY3RpdmUgYXRcbiAqIGFueSBnaXZlbiB0aW1lLlxuICpcbiAqIEBpbXBsZW1lbnRzIEFuaW1hdGlvblBsYXllckludGVyZmFjZVxuICogQGltcGxlbWVudHMgU3RhdGVDb250YWluZXJJbnRlcmZhY2VcbiAqL1xuY2xhc3MgQW5pbWF0aW9uTGF5ZXIgZXh0ZW5kcyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UuTWl4aW4oXG4gIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlLk1peGluKClcbikge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtICBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uIGxheWVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5uYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIuIE5hbWVzIG11c3QgYmUgdW5pcXVlIHRvIHRoZVxuICAgKiBhbmltYXRpb24gZmVhdHVyZSB0aGF0IGNvbnRhaW5zIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtMYXllckJsZW5kTW9kZXN9IFtvcHRpb25zLmJsZW5kTW9kZT1EZWZhdWx0TGF5ZXJCbGVuZE1vZGVdIC1cbiAgICogVHlwZSBvZiBibGVuZGluZyB0byB1c2UgZm9yIGFsbCBzdGF0ZXMgY29udHJvbGxlZCBieSB0aGUgbGF5ZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy53ZWlnaHQ9MV0gLSBUaGUgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgbGF5ZXIncyBjdXJyZW50XG4gICAqIGFuaW1hdGlvbiBoYXMgb3ZlciB0aGUgcmVzdWx0IGZvciB0aGUgaG9zdC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRyYW5zaXRpb25UaW1lPTBdIC0gVGhlIGRlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW5cbiAgICogcGxheWluZyBhbmQgcmVzdW1pbmcgYW5pbWF0aW9ucy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMuZWFzaW5nRm4gLSBUaGUgZGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW5cbiAgICogdHJhbnNpdGlvbmluZyBiZXR3ZWVuIGFuaW1hdGlvbnMgYW5kIHNldHRpbmcgbGF5ZXIgd2VpZ2h0LlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWUgPT09IHVuZGVmaW5lZCA/ICdBbmltYXRpb25MYXllcicgOiBvcHRpb25zLm5hbWU7XG4gICAgdGhpcy5fYmxlbmRNb2RlID0gQXJyYXkuZnJvbShPYmplY3QudmFsdWVzKExheWVyQmxlbmRNb2RlcykpLmluY2x1ZGVzKFxuICAgICAgb3B0aW9ucy5ibGVuZE1vZGVcbiAgICApXG4gICAgICA/IG9wdGlvbnMuYmxlbmRNb2RlXG4gICAgICA6IERlZmF1bHRMYXllckJsZW5kTW9kZTtcbiAgICB0aGlzLl9wcm9taXNlcyA9IHtcbiAgICAgIHdlaWdodDogRGVmZXJyZWQucmVzb2x2ZSgpLFxuICAgIH07XG4gICAgdGhpcy5fd2VpZ2h0UGF1c2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLndlaWdodCA9IHR5cGVvZiBvcHRpb25zLndlaWdodCA9PT0gJ251bWJlcicgPyBvcHRpb25zLndlaWdodCA6IDE7XG4gICAgdGhpcy5faW50ZXJuYWxXZWlnaHQgPSB0aGlzLl93ZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdHlwZSBvZiBibGVuZGluZyB1c2VkIGZvciBzdGF0ZXMgY29udHJvbGxlZCBieSB0aGUgbGF5ZXIuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGJsZW5kTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYmxlbmRNb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIGxheWVyJ3MgY3VycmVudCBhbmltYXRpb24gaGFzIG92ZXJcbiAgICogdGhlIHJlc3VsdCBmb3IgdGhlIGhvc3QuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBzZXQgd2VpZ2h0KHdlaWdodCkge1xuICAgIHRoaXMuX3dlaWdodCA9IE1hdGhVdGlscy5jbGFtcCh3ZWlnaHQsIDAsIDEpO1xuICB9XG5cbiAgZ2V0IHdlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd2VpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIGxheWVyJ3Mgd2VpZ2h0IHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IHdlaWdodFBlbmRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLndlaWdodCAmJiB0aGlzLl9wcm9taXNlcy53ZWlnaHQucGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXVzZSB0aGUgY3VycmVudCBhbmltYXRpb24gc3RhdGUgYW5kIGFueSBpbnRlcnBvbGF0aW9uIGhhcHBlbmluZyBvbiB0aGUgbGF5ZXInc1xuICAgKiB3ZWlnaHQgcHJvcGVydHkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcGF1c2UoKSB7XG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLl93ZWlnaHRQYXVzZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucGF1c2VBbmltYXRpb24oKSB8fCB0aGlzLndlaWdodFBlbmRpbmc7XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZSBhbmQgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzXG4gICAqIHdlaWdodCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICByZXN1bWUoKSB7XG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5fd2VpZ2h0UGF1c2VkID0gZmFsc2U7XG5cbiAgICBjb25zdCBpc1dlaWdodEFjdGl2ZSA9IHRoaXMud2VpZ2h0UGVuZGluZztcblxuICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc3VtZUFuaW1hdGlvbigpIHx8IGlzV2VpZ2h0QWN0aXZlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaXNXZWlnaHRBY3RpdmU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQgb3ZlciB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGhlIHRhcmdldCB3ZWlnaHQgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXG4gICAqIHRhcmdldCB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICBzZXRXZWlnaHQod2VpZ2h0LCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICBpZiAodGhpcy53ZWlnaHRQZW5kaW5nKSB7XG4gICAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQuY2FuY2VsKCk7XG4gICAgfVxuXG4gICAgd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCk7XG4gICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0ID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcbiAgICAgIHRoaXMsXG4gICAgICAnd2VpZ2h0JyxcbiAgICAgIHdlaWdodCxcbiAgICAgIHtcbiAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgZWFzaW5nRm46IGVhc2luZ0ZuICE9PSB1bmRlZmluZWQgPyBlYXNpbmdGbiA6IHRoaXMuX2Vhc2luZ0ZuLFxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdXNlIGFueSBpbnRlcnBvbGF0aW9uIGhhcHBlbmluZyBvbiB0aGUgbGF5ZXIncyB3ZWlnaHQgcHJvcGVydHkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcGF1c2VXZWlnaHQoKSB7XG4gICAgdGhpcy5fd2VpZ2h0UGF1c2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLndlaWdodFBlbmRpbmc7XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lIGFueSBpbnRlcnBvbGF0aW9uIGhhcHBlbmluZyBvbiB0aGUgbGF5ZXIncyB3ZWlnaHQgcHJvcGVydHkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcmVzdW1lV2VpZ2h0KCkge1xuICAgIHRoaXMuX3dlaWdodFBhdXNlZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRoaXMud2VpZ2h0UGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWx0aXBsaWVzIHRoZSB1c2VyIHdlaWdodCBieSBhIGZhY3RvciB0byBkZXRlcm1pbmUgdGhlIGludGVybmFsIHdlaWdodC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBtdWx0aXBsaWVyIHRvIGFwcGx5IHRvIHRoZSB1c2VyIHdlaWdodC5cbiAgICovXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHRoaXMuX2ludGVybmFsV2VpZ2h0ID0gdGhpcy5fd2VpZ2h0ICogZmFjdG9yO1xuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgdGhpcy5fY3VycmVudFN0YXRlLnVwZGF0ZUludGVybmFsV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYmxlbmQgc3RhdGVzIGluIGFuIGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gLSBOYW1lcyBvZiBibGVuZCBzdGF0ZXMuXG4gICAqL1xuICBnZXRBbmltYXRpb25CbGVuZE5hbWVzKGFuaW1hdGlvbk5hbWUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoYW5pbWF0aW9uTmFtZSk7XG5cbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCBuYW1lcyBvZiBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke3RoaXMubmFtZX0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBBYnN0cmFjdEJsZW5kU3RhdGUpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5nZXRTdGF0ZU5hbWVzKCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENhbm5vdCBnZXQgYmxlbmQgbmFtZXMgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEFic3RyYWN0QmxlbmRTdGF0ZS5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHdlaWdodCBmb3IgYSBibGVuZCBzdGF0ZSBvZiBhbiBhbmltYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmcgdGhlIGJsZW5kIHN0YXRlXG4gICAqIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFdlaWdodCB2YWx1ZSB0byBzZXQgb24gdGhlIGFuaW1hdGlvbi4gVGhpcyBudW1iZXIgc2hvdWRsZCBiZVxuICAgKiBpbiB0aGUgMC0xIHJhbmdlLlxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGUgbmV3IHdlaWdodC5cbiAgICogRGVmYXVsdCBpcyB6ZXJvIGFuZCB3aWxsIHNldCBpbW1lZGlhdGVseS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGlsZSBpbnRlcnBvbGF0aW5nIHRoZSBuZXdcbiAgICogd2VpZ2h0LiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBQcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgdGhlIGFuaW1hdGlvbidzIHdlaWdodCByZWFjaGVzXG4gICAqIHRoZSB0YXJnZXQgdmFsdWUuXG4gICAqL1xuICBzZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICBhbmltYXRpb25OYW1lLFxuICAgIGJsZW5kTmFtZSxcbiAgICB3ZWlnaHQsXG4gICAgc2Vjb25kcyA9IDAsXG4gICAgZWFzaW5nRm5cbiAgKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKGFuaW1hdGlvbk5hbWUpO1xuXG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBzZXQgYmxlbmQgd2VpZ2h0IG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEFic3RyYWN0QmxlbmRTdGF0ZSkge1xuICAgICAgcmV0dXJuIHN0YXRlLnNldEJsZW5kV2VpZ2h0KGJsZW5kTmFtZSwgd2VpZ2h0LCBzZWNvbmRzLCBlYXNpbmdGbik7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENhbm5vdCBzZXQgYmxlbmQgd2VpZ2h0IG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gQW5pbWF0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBBYnN0cmFjdEJsZW5kU3RhdGUuYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2VpZ2h0IGZvciBhIGJsZW5kIHN0YXRlIG9mIGFuIGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gY29udGFpbmluZyB0aGUgYmxlbmQgc3RhdGVcbiAgICogdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmxlbmROYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgc3RhdGUgdG8gcmV0cmlldmUgdGhlIHdlaWdodCBvZi5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gLSBXZWlnaHQgb2YgdGhlIGJsZW5kIHN0YXRlLlxuICAgKi9cbiAgZ2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoYW5pbWF0aW9uTmFtZSwgYmxlbmROYW1lKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKGFuaW1hdGlvbk5hbWUpO1xuXG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgYmxlbmQgd2VpZ2h0IG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEFic3RyYWN0QmxlbmRTdGF0ZSkge1xuICAgICAgcmV0dXJuIHN0YXRlLmdldEJsZW5kV2VpZ2h0KGJsZW5kTmFtZSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENhbm5vdCBnZXQgYmxlbmQgd2VpZ2h0IG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gQW5pbWF0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBBYnN0cmFjdEJsZW5kU3RhdGUuYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFueSB3ZWlnaHQgaW50ZXJwb2xhdG9ycyBhbmQgdGhlIGN1cnJlbnQgYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGFUaW1lIC0gVGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGxhc3QgdXBkYXRlLlxuICAgKi9cbiAgdXBkYXRlKGRlbHRhVGltZSkge1xuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xuXG4gICAgaWYgKCF0aGlzLl9wYXVzZWQgJiYgIXRoaXMuX3dlaWdodFBhdXNlZCkge1xuICAgICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LmV4ZWN1dGUoZGVsdGFUaW1lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VsIGFueSBwZW5kaW5nIHByb21pc2VzIGFuZCBkaXNjYXJkIHN0YXRlcyBjb250cm9sbGVkIGJ5IHRoZSBsYXllci5cbiAgICovXG4gIGRpc2NhcmQoKSB7XG4gICAgc3VwZXIuZGlzY2FyZCgpO1xuXG4gICAgdGhpcy5kaXNjYXJkU3RhdGVzKCk7XG5cbiAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQuY2FuY2VsKCk7XG4gICAgZGVsZXRlIHRoaXMuX3Byb21pc2VzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFuaW1hdGlvbkxheWVyO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcbmltcG9ydCBBYnN0cmFjdFN0YXRlIGZyb20gJy4vQWJzdHJhY3RTdGF0ZSc7XG5pbXBvcnQge3ZhbGlkYXRlQmxlbmRNb2RlfSBmcm9tICcuLi9BbmltYXRpb25MYXllcic7XG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnLi4vQW5pbWF0aW9uVXRpbHMnO1xuXG4vKipcbiAqIENsYXNzIGZvciBwbGF5aW5nIGEgc2luZ2xlIGFuaW1hdGlvbiBjbGlwLlxuICpcbiAqIEBleHRlbmRzIEFic3RyYWN0U3RhdGVcbiAqIEBhbGlhcyBjb3JlL1NpbmdsZVN0YXRlXG4gKi9cbmNsYXNzIFNpbmdsZVN0YXRlIGV4dGVuZHMgQWJzdHJhY3RTdGF0ZSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXG4gICAqIEBwYXJhbSB7dGltZVNjYWxlfSBbb3B0aW9ucy50aW1lU2NhbGU9MV0gLSBGYWN0b3IgdG8gc2NhbGUgdGhlIHBsYXliYWNrIHNwZWVkIG9mIHRoZVxuICAgKiBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXG4gICAqIHJlcGVhdCBiZWZvcmUgZmluaXNoaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPURlZmF1bHRMYXllckJsZW5kTW9kZV0gLSBUeXBlIG9mXG4gICAqIGJsZW5kaW5nIHRoZSBhbmltYXRpb24gc2hvdWxkIHVzZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fdGltZVNjYWxlID0gb3B0aW9ucy50aW1lU2NhbGUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMudGltZVNjYWxlIDogMTtcbiAgICB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGUgPSBEZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgdGhpcy5fbG9vcENvdW50ID1cbiAgICAgIG9wdGlvbnMubG9vcENvdW50ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmxvb3BDb3VudCA6IEluZmluaXR5O1xuICAgIHRoaXMuX2JsZW5kTW9kZSA9IHZhbGlkYXRlQmxlbmRNb2RlKG9wdGlvbnMuYmxlbmRNb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBub3JtYWxpemVkIHBsYXlpbmcgdGltZSBvZiB0aGUgY3VycmVudCBhbmltYXRpb25cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBub3JtYWxpemVkVGltZSgpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHNldCBub3JtYWxpemVkVGltZSh0aW1lKSB7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgYSBmYWN0b3IgdG8gc2NhbGUgYW5pbWF0aW9uIHBsYXliYWNrIHNwZWVkIHdpdGguXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgdGltZVNjYWxlKCkge1xuICAgIHJldHVybiB0aGlzLl90aW1lU2NhbGU7XG4gIH1cblxuICBzZXQgdGltZVNjYWxlKHRpbWVTY2FsZSkge1xuICAgIHRoaXMuX3RpbWVTY2FsZSA9IHRpbWVTY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB0aW1lU2NhbGUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgdGltZVNjYWxlUGVuZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMudGltZVNjYWxlLnBlbmRpbmc7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdGltZVNjYWxlIHZhbHVlIG92ZXIgdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRoZSB0YXJnZXQgdGltZVNjYWxlIHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZVxuICAgKiB0YXJnZXQgdGltZVNjYWxlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgaW50ZXJwb2xhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgc2V0VGltZVNjYWxlKHRpbWVTY2FsZSwgc2Vjb25kcyA9IDAsIGVhc2luZ0ZuKSB7XG4gICAgdGhpcy5fcHJvbWlzZXMudGltZVNjYWxlLmNhbmNlbCgpO1xuXG4gICAgdGhpcy5fcHJvbWlzZXMudGltZVNjYWxlID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcbiAgICAgIHRoaXMsXG4gICAgICAndGltZVNjYWxlJyxcbiAgICAgIHRpbWVTY2FsZSxcbiAgICAgIHtzZWNvbmRzLCBlYXNpbmdGbn1cbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLnRpbWVTY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiB3aWxsIHJlcGVhdCBiZWZvcmUgZmluaXNoaW5nLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IGxvb3BDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9vcENvdW50O1xuICB9XG5cbiAgc2V0IGxvb3BDb3VudChsb29wQ291bnQpIHtcbiAgICB0aGlzLl9sb29wQ291bnQgPSBsb29wQ291bnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdHlwZSBvZiBibGVuZGluZyB1c2VkIGZvciB0aGUgYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGdldCBibGVuZE1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JsZW5kTW9kZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaW5nbGVTdGF0ZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgQWJzdHJhY3RTdGF0ZSBmcm9tICcuL0Fic3RyYWN0U3RhdGUnO1xuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEFuaW1hdGlvblBsYXllckludGVyZmFjZSBmcm9tICcuLi9BbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcblxuLyoqXG4gKiBDbGFzcyBmb3IgcGxheWluZyByYW5kb20gYW5pbWF0aW9ucyBhdCByYW5kb20gaW50ZXJ2YWxzIHdpdGhpbiB0aGlzIHN0YXRlLlxuICpcbiAqIEBleHRlbmRzIEFic3RyYWN0U3RhdGVcbiAqIEBpbXBsZW1lbnRzIEFuaW1hdGlvblBsYXllckludGVyZmFjZVxuICogQGltcGxlbWVudHMgU3RhdGVDb250YWluZXJJbnRlcmZhY2VcbiAqL1xuY2xhc3MgUmFuZG9tQW5pbWF0aW9uU3RhdGUgZXh0ZW5kcyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UuTWl4aW4oU3RhdGVDb250YWluZXJJbnRlcmZhY2UuTWl4aW4oQWJzdHJhY3RTdGF0ZSkpIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyBmb3IgdGhlIGNvbnRhaW5lciBzdGF0ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnBsYXlJbnRlcnZhbD0zXSAtIFRoZSBiYXNlIGFuaW1hdGlvbiBwbGF5YmFjayBpbnRlcnZhbC5cbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RTdGF0ZT59IFtzdWJTdGF0ZXM9W11dIC0gc3RhdGVzIHRvIGJlIHJhbmRvbWx5IHBpY2tlZCB0byBwbGF5XG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIHN1YlN0YXRlcyA9IFtdKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLl9wbGF5SW50ZXJ2YWwgPSBvcHRpb25zLnBsYXlJbnRlcnZhbCA/IG9wdGlvbnMucGxheUludGVydmFsIDogMztcblxuICAgIHN1YlN0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHRoaXMuYWRkU3RhdGUoc3RhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGJhc2UgYW5pbWF0aW9uIHBsYXkgaW50ZXJ2YWxcbiAgICpcbiAgICogQHR5cGUge2Zsb2F0fVxuICAgKi9cbiAgZ2V0IHBsYXlJbnRlcnZhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGxheUludGVydmFsO1xuICB9XG5cbiAgc2V0IHBsYXlJbnRlcnZhbChwbGF5SW50ZXJ2YWwpIHtcbiAgICB0aGlzLl9wbGF5SW50ZXJ2YWwgPSBwbGF5SW50ZXJ2YWw7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIGludGVybmFsIHRpbWVyIGZvciBhbmltYXRpb24gcGxheSBpbnRlcnZhbFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc2V0VGltZXIoKSB7XG4gICAgY29uc3QgcGxheVRpbWVyID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQodGhpcy5fcGxheUludGVydmFsIC8gNCwgdGhpcy5fcGxheUludGVydmFsICogMik7XG4gICAgY29uc3Qgb25GaW5pc2ggPSAoKSA9PiB7XG4gICAgICB0aGlzLnBsYXlSYW5kb21BbmltYXRpb24odGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yKTtcbiAgICB9XG4gICAgdGhpcy5fcHJvbWlzZXMudGltZXIgPSBVdGlscy53YWl0KHBsYXlUaW1lciwge29uRmluaXNofSk7XG4gIH1cblxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgdGhpcy5fY3VycmVudFN0YXRlLnVwZGF0ZUludGVybmFsV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGljayBhIHJhbmRvbSBhbmltYXRpb24gYW5kIHV0aWxpemUgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIHRvIHBsYXkgdGhhdCBhbmltYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cbiAgICovXG4gIHBsYXlSYW5kb21BbmltYXRpb24ob25FcnJvcikge1xuICAgIHRoaXMuX3Jlc2V0VGltZXIoKTtcblxuICAgIGNvbnN0IHN0YXRlcyA9IHRoaXMuZ2V0U3RhdGVOYW1lcygpO1xuICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgIHN0YXRlcy5zcGxpY2Uoc3RhdGVzLmluZGV4T2YodGhpcy5fY3VycmVudFN0YXRlLm5hbWUpLCAxKTtcbiAgICB9XG4gICAgY29uc3QgcmFuZG9tU3RhdGUgPSAgc3RhdGVzW1V0aWxzLmdldFJhbmRvbUludCgwLCBzdGF0ZXMubGVuZ3RoKV07XG5cbiAgICB0aGlzLnBsYXlBbmltYXRpb24ocmFuZG9tU3RhdGUsIHRoaXMuX3RyYW5zaXRpb25UaW1lLCB0aGlzLl9lYXNpbmdGbiwgdW5kZWZpbmVkLCBvbkVycm9yLCB1bmRlZmluZWQpO1xuICB9XG5cbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcbiAgICB0aGlzLnBsYXlSYW5kb21BbmltYXRpb24ob25FcnJvcik7XG4gICAgcmV0dXJuIHN1cGVyLnBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcbiAgfVxuXG4gIHBhdXNlKCkge1xuICAgIHJldHVybiBzdXBlci5wYXVzZSgpICYmIHRoaXMucGF1c2VBbmltYXRpb24oKTtcbiAgfVxuXG4gIHJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICB0aGlzLnJlc3VtZUFuaW1hdGlvbih0aGlzLl9jdXJyZW50U3RhdGUubmFtZSwgdGhpcy5fdHJhbnNpdGlvblRpbWUsIHRoaXMuX2Vhc2luZ0ZuLCB1bmRlZmluZWQsIG9uRXJyb3IsIHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5yZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuY2VsKCkgJiYgdGhpcy5jYW5jZWxBbmltYXRpb24oKTtcbiAgfVxuXG4gIHN0b3AoKSB7XG4gICAgcmV0dXJuIHN1cGVyLnN0b3AoKSAmJiB0aGlzLnN0b3BBbmltYXRpb24oKTtcbiAgfVxuXG4gIGRpc2NhcmQoKSB7XG4gICAgc3VwZXIuZGlzY2FyZCgpO1xuICAgIHRoaXMuZGlzY2FyZFN0YXRlcygpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhbmRvbUFuaW1hdGlvblN0YXRlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQWJzdHJhY3RIb3N0RmVhdHVyZSBmcm9tICdjb3JlL0Fic3RyYWN0SG9zdEZlYXR1cmUnO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnY29yZS9VdGlscyc7XHJcbmltcG9ydCBRdWV1ZVN0YXRlIGZyb20gJy4vc3RhdGUvUXVldWVTdGF0ZSc7XHJcbmltcG9ydCBGcmVlQmxlbmRTdGF0ZSBmcm9tICcuL3N0YXRlL0ZyZWVCbGVuZFN0YXRlJztcclxuaW1wb3J0IEJsZW5kMWRTdGF0ZSBmcm9tICcuL3N0YXRlL0JsZW5kMWRTdGF0ZSc7XHJcbmltcG9ydCBCbGVuZDJkU3RhdGUgZnJvbSAnLi9zdGF0ZS9CbGVuZDJkU3RhdGUnO1xyXG5pbXBvcnQgU2luZ2xlU3RhdGUgZnJvbSAnLi9zdGF0ZS9TaW5nbGVTdGF0ZSc7XHJcbmltcG9ydCBSYW5kb21BbmltYXRpb25TdGF0ZSBmcm9tICcuL3N0YXRlL1JhbmRvbUFuaW1hdGlvblN0YXRlJztcclxuaW1wb3J0IEFuaW1hdGlvbkxheWVyLCB7TGF5ZXJCbGVuZE1vZGVzfSBmcm9tICcuL0FuaW1hdGlvbkxheWVyJztcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJy4uL0RlZmVycmVkJztcclxuXHJcbi8qKlxyXG4gKiBFbnVtIGZvciBhbmltYXRpb24gc3RhdGUgY2xhc3Nlcy5cclxuICpcclxuICogQHJlYWRvbmx5XHJcbiAqIEBlbnVtIHtDbGFzc31cclxuICovXHJcbmV4cG9ydCBjb25zdCBBbmltYXRpb25UeXBlcyA9IHtcclxuICBzaW5nbGU6IFNpbmdsZVN0YXRlLFxyXG4gIGZyZWVCbGVuZDogRnJlZUJsZW5kU3RhdGUsXHJcbiAgcXVldWU6IFF1ZXVlU3RhdGUsXHJcbiAgcmFuZG9tQW5pbWF0aW9uOiBSYW5kb21BbmltYXRpb25TdGF0ZSxcclxuICBibGVuZDFkOiBCbGVuZDFkU3RhdGUsXHJcbiAgYmxlbmQyZDogQmxlbmQyZFN0YXRlLFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEZlYXR1cmUgZm9yIG1hbmFnaW5nIGFuaW1hdGlvbnMgb24gYW4gb2JqZWN0LlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlXHJcbiAqIEBhbGlhcyBjb3JlL0FuaW1hdGlvbkZlYXR1cmVcclxuICpcclxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UUyAtIEJ1aWx0LWluIG1lc3NhZ2VzIHRoYXQgdGhlIGZlYXR1cmUgZW1pdHMuIFdoZW4gdGhlXHJcbiAqIGZlYXR1cmUgaXMgYWRkZWQgdG8gYSB7QGxpbmsgY29yZS9Ib3N0T2JqZWN0fSwgZXZlbnQgbmFtZXMgd2lsbCBiZSBwcmVmaXhlZCBieSB0aGVcclxuICogbmFtZSBvZiB0aGUgZmVhdHVyZSBjbGFzcyArICcuJy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuYWRkTGF5ZXI9b25BZGRMYXllckV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIFthZGRMYXllcl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI2FkZExheWVyfSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuXHJcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzIGFkZGVkIGFuZCBpdHMgaW5kZXggaW5cclxuICogdGhlIGxheWVyIHN0YWNrIHdpdGggdGhlIHNpZ25hdHVyZSB7bmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyfSBpcyBzdXBwbGllZFxyXG4gKiBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbW92ZUxheWVyPW9uUmVtb3ZlTGF5ZXJFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXNcclxuICogZW1pdHRlZCBhZnRlciBbcmVtb3ZlTGF5ZXJde0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW1vdmVMYXllcn0gaGFzIGJlZW5cclxuICogc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBsYXllciB0aGF0IHdhc1xyXG4gKiByZW1vdmVkIGFuZCBpdHMgaW5kZXggaW4gdGhlIGxheWVyIHN0YWNrIHdpdGggdGhlIHNpZ25hdHVyZSB7bmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbmFtZUxheWVyPW9uUmVuYW1lTGF5ZXJFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXNcclxuICogZW1pdHRlZCBhZnRlciBbcmVuYW1lTGF5ZXJde0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVMYXllcn0gaGFzIGJlZW5cclxuICogc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZSBsYXllclxyXG4gKiB0aGF0IHdhcyByZW5hbWVkIGFuZCBpdHMgdXBkYXRlZCBuYW1lIHdpdGggdGhlIHNpZ25hdHVyZSB7b2xkTmFtZTogc3RyaW5nLCBuZXdOYW1lOiBzdHJpbmd9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuYWRkQW5pbWF0aW9uPW9uQWRkQW5pbWF0aW9uRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzXHJcbiAqIGVtaXR0ZWQgYWZ0ZXIgW2FkZEFuaW1hdGlvbl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI2FkZEFuaW1hdGlvbn0gaGFzIGJlZW5cclxuICogc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBsYXllciB0aGF0IHRoZVxyXG4gKiBhbmltYXRpb24gd2FzIGFkZGVkIHRvIGFuZCB0aGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIGFkZGVkIHdpdGggdGhlXHJcbiAqIHNpZ25hdHVyZSB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ30gaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnRcclxuICogdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZW1vdmVBbmltYXRpb249b25SZW1vdmVkQW5pbWF0aW9uRXZlbnRdIC0gTWVzc2FnZVxyXG4gKiB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgW3JlbW92ZUFuaW1hdGlvbl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUFuaW1hdGlvbn1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBsYXllclxyXG4gKiB0aGF0IHRoZSBhbmltYXRpb24gd2FzIHJlbW92ZWQgZnJvbSBhbmQgdGhlIG5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZW1vdmVkXHJcbiAqIHdpdGggdGhlIHNpZ25hdHVyZSB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ30gaXMgc3VwcGxpZWQgYXNcclxuICogYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZW5hbWVBbmltYXRpb249b25SZW5hbWVBbmltYXRpb25FdmVudF0gLSBNZXNzYWdlXHJcbiAqIHRoYXQgaXMgZW1pdHRlZCBhZnRlciBbcmVuYW1lQW5pbWF0aW9uXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVuYW1lQW5pbWF0aW9ufVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyXHJcbiAqIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZW5hbWVkLCB0aGUgb3JpZ2luYWwgbmFtZSBvZiB0aGUgYW5pbWF0aW9uXHJcbiAqIHRoYXQgd2FzIHJlbmFtZWQgYW5kIGl0cyB1cGRhdGVkIG5hbWUgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgb2xkTmFtZTogc3RyaW5nLCBuZXdOYW1lOiBzdHJpbmd9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucGxheT1vblBsYXlFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3BsYXlde0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNwbGF5QW5pbWF0aW9ufS4gQW4gb2JqZWN0IHJlcHJlc2VudGluZ1xyXG4gKiB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwbGF5ZWQgYW5kIHRoZSBuYW1lIG9mXHJcbiAqIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgcGxheWVkIHdpdGggdGhlIHNpZ25hdHVyZSB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5wYXVzZT1vblBhdXNlRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtwYXVzZV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlQW5pbWF0aW9ufS4gQW4gb2JqZWN0IHJlcHJlc2VudGluZ1xyXG4gKiB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwYXVzZWQgYW5kIHRoZSBuYW1lIG9mXHJcbiAqIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgcGF1c2VkIHdpdGggdGhlIHNpZ25hdHVyZSB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZXN1bWU9b25SZXN1bWVFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3Jlc3VtZV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3Jlc3VtZUFuaW1hdGlvbn0uIEFuIG9iamVjdCByZXByZXNlbnRpbmdcclxuICogdGhlIG5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5zIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgcmVzdW1lZCBhbmQgdGhlIG5hbWUgb2ZcclxuICogdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZXN1bWVkIHdpdGggdGhlIHNpZ25hdHVyZSB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5pbnRlcnJ1cHQ9b25JbnRlcnJ1cHRFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgc3BlZWNoIGluIHByb2dyZXNzIGFuZCBbcGxheV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlBbmltYXRpb259XHJcbiAqIG9yIFtyZXN1bWVde0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZXN1bWVBbmltYXRpb259IGFyZSBleGVjdXRlZCBmb3IgYSBuZXcgc3BlZWNoLlxyXG4gKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzXHJcbiAqIGludGVycnVwdGVkIGFuZCB0aGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIGludGVycnVwdGVkIHdpdGggdGhlIHNpZ25hdHVyZVxyXG4gKiB7bGF5ZXJOYW1lOiBzdHJpbmcsIGFuaW1hdGlvbk5hbWU6IHN0cmluZ30gaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXJcclxuICogZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5zdG9wPW9uU3RvcEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbc3RvcF17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3N0b3BBbmltYXRpb259IGFuZCB3aGVuIGEgc3BlZWNoIHJlYWNoZXNcclxuICogdGhlIGVuZCBvZiBwbGF5YmFjay4gQW4gb2JqZWN0IHJlcHJlc2VudGluZ1xyXG4gKiB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBzdG9wcGVkIGFuZCB0aGUgbmFtZSBvZlxyXG4gKiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHN0b3BwZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqL1xyXG5jbGFzcyBBbmltYXRpb25GZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3Qgb2JqZWN0IHRoYXQgb3ducyB0aGUgZmVhdHVyZS5cclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihob3N0KSB7XHJcbiAgICBzdXBlcihob3N0KTtcclxuXHJcbiAgICB0aGlzLl9sYXllcnMgPSBbXTtcclxuICAgIHRoaXMuX2xheWVyTWFwID0ge307XHJcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ha2Ugc3VyZSBhIHN1cHBsaWVkIGxheWVyIGluZGV4IGlzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgbGF5ZXJzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2V4aXN0aW5nPXRydWVdIC0gV2hldGhlciB0aGUgaW5kZXggcmVwcmVzZW50cyBhbmQgZXhpc3RpbmdcclxuICAgKiBsYXllciBvciBhIG5ldyBsYXllciB0byBiZSBhZGRlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXI9fVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUluZGV4KGluZGV4LCBleGlzdGluZyA9IHRydWUpIHtcclxuICAgIC8vIEluZGV4IGlzIGludmFsaWQgaWYgdGhlcmUgYXJlIG5vIGxheWVycyBhbmQgd2UncmUgY2hlY2tpbmcgZm9yIGFuIGV4aXN0aW5nIGxheWVyIGluZGV4XHJcbiAgICBpZiAodGhpcy5fbGF5ZXJzLmxlbmd0aCA9PT0gMCAmJiBleGlzdGluZykge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxhc3RJbmRleCA9IGV4aXN0aW5nID8gdGhpcy5fbGF5ZXJzLmxlbmd0aCAtIDEgOiB0aGlzLl9sYXllcnMubGVuZ3RoO1xyXG5cclxuICAgIC8vIENvdW50IGZyb20gdGhlIGVuZCBvZiB0aGUgYXJyYXkgZm9yIG5lZ2F0aXZlIGluZGljZXNcclxuICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgaW5kZXggPSBsYXN0SW5kZXggKyBpbmRleCArIDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IGxhc3RJbmRleCkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmUtZXZhbHVhdGUgaW50ZXJuYWwgd2VpZ2h0IHZhbHVlcyBvZiBsYXllcnMgc3RhcnRpbmcgZnJvbSB0aGUgdG9wIG9mIHRoZVxyXG4gICAqIHN0YWNrLiBPdmVycmlkZSBsYXllcnMnIHdlaWdodHMgYWZmZWN0IHRoZSB2YWx1ZXMgb2YgYWxsIGxheWVycyBsb3dlciBpbiB0aGVcclxuICAgKiBzdGFjay5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3VwZGF0ZUludGVybmFsV2VpZ2h0cygpIHtcclxuICAgIGNvbnN0IG51bUxheWVycyA9IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcbiAgICBsZXQgd2VpZ2h0TXVsdGlwbGllciA9IDE7XHJcblxyXG4gICAgLy8gVXBkYXRlIGludGVybmFsIHdlaWdodCB2YWx1ZXMgb24gbGF5ZXJzIGluIHJldmVyc2Ugb3JkZXJcclxuICAgIGZvciAobGV0IGkgPSBudW1MYXllcnMgLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyc1tpXTtcclxuICAgICAgbGF5ZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQod2VpZ2h0TXVsdGlwbGllcik7XHJcblxyXG4gICAgICAvLyBJZiB0aGUgbGF5ZXIgaXMgb3ZlcnJpZGUsIHVwZGF0ZSB0aGUgbXVsdGlwbGllciB3aXRoIHRoZSByZW1haW5kZXIgb2YgdGhlIGZ1bGwgd2VpZ2h0XHJcbiAgICAgIGlmIChsYXllci5ibGVuZE1vZGUgPT09IExheWVyQmxlbmRNb2Rlcy5PdmVycmlkZSAmJiBsYXllci5jdXJyZW50U3RhdGUpIHtcclxuICAgICAgICB3ZWlnaHRNdWx0aXBsaWVyICo9IDEgLSBsYXllci5jdXJyZW50U3RhdGUuaW50ZXJuYWxXZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIFNpbmdsZVN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBTaW5nbGVTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2NvcmUvU2luZ2xlU3RhdGV9XHJcbiAgICovXHJcbiAgX2NyZWF0ZVNpbmdsZVN0YXRlKG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBuZXcgU2luZ2xlU3RhdGUob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBGcmVlQmxlbmRTdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgRnJlZUJsZW5kU3RhdGUgY29uc3RydWN0b3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXHJcbiAgICogdW5pcXVlIGZvciB0aGUgbGF5ZXIgdGhlIHN0YXRlIGlzIGFwcGxpZWQgdG8uXHJcbiAgICogQHBhcmFtIHt3ZWlnaHR9IFtvcHRpb25zLndlaWdodD0wXSAtIFRoZSAwLTEgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgc3RhdGUgd2lsbCBoYXZlLlxyXG4gICAqIEBwYXJhbSB7dGltZVNjYWxlfSBbb3B0aW9ucy50aW1lU2NhbGU9MV0gLSBGYWN0b3IgdG8gc2NhbGUgdGhlIHBsYXliYWNrIHNwZWVkIG9mIHRoZVxyXG4gICAqIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubG9vcENvdW50PUluZmluaXR5XSAtIE51bWJlciBvZiB0aW1lcyB0aGUgYW5pbWF0aW9uIHNob3VsZFxyXG4gICAqIHJlcGVhdCBiZWZvcmUgZmluaXNoaW5nLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5ibGVuZE1vZGU9TGF5ZXJCbGVuZE1vZGVzW0RlZmF1bHRMYXllckJsZW5kTW9kZV1dIC0gVHlwZSBvZlxyXG4gICAqIGJsZW5kaW5nIHRoZSBhbmltYXRpb24gc2hvdWxkIHVzZS5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbb3B0aW9ucy5ibGVuZFN0YXRlT3B0aW9uc10gLSBBcnJheSBvZiBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZVxyXG4gICAqIGJsZW5kIHN0YXRlcyBmb3IgdGhpcyBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RnJlZUJsZW5kU3RhdGV9XHJcbiAgICovXHJcbiAgX2NyZWF0ZUZyZWVCbGVuZFN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtibGVuZFN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgY29uc3QgYmxlbmRTdGF0ZXMgPSBbXTtcclxuICAgIGJsZW5kU3RhdGVPcHRpb25zLmZvckVhY2goYmxlbmRPcHRpb25zID0+IHtcclxuICAgICAgYmxlbmRTdGF0ZXMucHVzaChcclxuICAgICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7Li4uYmxlbmRPcHRpb25zLCBibGVuZE1vZGU6IG9wdGlvbnMuYmxlbmRNb2RlfSlcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXcgRnJlZUJsZW5kU3RhdGUob3B0aW9ucywgYmxlbmRTdGF0ZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgUXVldWVTdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgUXVldWVTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBvcHRpb25zLnRyYW5zaXRpb25UaW1lIC0gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHRha2VzIHRvIHRyYW5zaXRpb25cclxuICAgKiBiZXR3ZWVuIHF1ZXVlZCBzdGF0ZXMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLnF1ZXVlT3B0aW9uc10gLSBBcnJheSBvZiBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZVxyXG4gICAqIHF1ZXVlIHN0YXRlcyBmb3IgdGhpcyBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UXVldWVTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlUXVldWVTdGF0ZShvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7cXVldWVPcHRpb25zID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBxdWV1ZVN0YXRlcyA9IHF1ZXVlT3B0aW9ucy5tYXAocXVldWVPcHRpb24gPT5cclxuICAgICAgdGhpcy5fY3JlYXRlU2luZ2xlU3RhdGUoe1xyXG4gICAgICAgIHRyYW5zaXRpb25UaW1lOiBvcHRpb25zLnRyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgIC4uLnF1ZXVlT3B0aW9uLFxyXG4gICAgICAgIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGUsXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBuZXcgUXVldWVTdGF0ZShvcHRpb25zLCBxdWV1ZVN0YXRlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBCbGVuZDFkU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIEJsZW5kMWRTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLmJsZW5kU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogYmxlbmQgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBbb3B0aW9ucy5ibGVuZFRocmVzaG9sZHNdIC0gQXJyYXkgb2YgbnVtYmVycyB1c2VkIHRvIHNldCB0aGVcclxuICAgKiB0aHJlc2hvbGRzIGZvciBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBbb3B0aW9ucy5ibGVuZE1hdGNoUGhhc2VzPVtdXSAtIE9wdGlvbmFsIGFycmF5IG9mIGJvb2xlYW5zIHVzZWQgdG9cclxuICAgKiBzZXQgd2hldGhlciBvciBub3QgZWFjaCBibGVuZCBzdGF0ZSBpbiB0aGlzIGNvbnRhaW5lciB3aWxsIG1hdGNoIHBoYXNlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtCbGVuZDFkU3RhdGV9XHJcbiAgICovXHJcbiAgX2NyZWF0ZUJsZW5kMWRTdGF0ZShvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7YmxlbmRTdGF0ZU9wdGlvbnMgPSBbXX0gPSBvcHRpb25zO1xyXG4gICAgY29uc3Qge2JsZW5kVGhyZXNob2xkcyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRNYXRjaFBoYXNlcyA9IFtdfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgY29uc3QgYmxlbmRTdGF0ZXMgPSBbXTtcclxuICAgIGJsZW5kU3RhdGVPcHRpb25zLmZvckVhY2goYmxlbmRPcHRpb25zID0+IHtcclxuICAgICAgYmxlbmRTdGF0ZXMucHVzaChcclxuICAgICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7Li4uYmxlbmRPcHRpb25zLCBibGVuZE1vZGU6IG9wdGlvbnMuYmxlbmRNb2RlfSlcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXcgQmxlbmQxZFN0YXRlKFxyXG4gICAgICBvcHRpb25zLFxyXG4gICAgICBibGVuZFN0YXRlcyxcclxuICAgICAgYmxlbmRUaHJlc2hvbGRzLFxyXG4gICAgICBibGVuZE1hdGNoUGhhc2VzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgQmxlbmQyZFN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBCbGVuZDFkU3RhdGUgY29uc3RydWN0b3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXHJcbiAgICogdW5pcXVlIGZvciB0aGUgbGF5ZXIgdGhlIHN0YXRlIGlzIGFwcGxpZWQgdG8uXHJcbiAgICogQHBhcmFtIHt3ZWlnaHR9IFtvcHRpb25zLndlaWdodD0wXSAtIFRoZSAwLTEgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgc3RhdGUgd2lsbCBoYXZlLlxyXG4gICAqIEBwYXJhbSB7dGltZVNjYWxlfSBbb3B0aW9ucy50aW1lU2NhbGU9MV0gLSBGYWN0b3IgdG8gc2NhbGUgdGhlIHBsYXliYWNrIHNwZWVkIG9mIHRoZVxyXG4gICAqIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubG9vcENvdW50PUluZmluaXR5XSAtIE51bWJlciBvZiB0aW1lcyB0aGUgYW5pbWF0aW9uIHNob3VsZFxyXG4gICAqIHJlcGVhdCBiZWZvcmUgZmluaXNoaW5nLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5ibGVuZE1vZGU9TGF5ZXJCbGVuZE1vZGVzW0RlZmF1bHRMYXllckJsZW5kTW9kZV1dIC0gVHlwZSBvZlxyXG4gICAqIGJsZW5kaW5nIHRoZSBhbmltYXRpb24gc2hvdWxkIHVzZS5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbb3B0aW9ucy5ibGVuZFN0YXRlT3B0aW9uc10gLSBBcnJheSBvZiBvcHRpb25zIHVzZWQgdG8gY3JlYXRlIHRoZVxyXG4gICAqIGJsZW5kIHN0YXRlcyBmb3IgdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSBbb3B0aW9ucy5ibGVuZFRocmVzaG9sZHNdIC0gQXJyYXkgb2YgQXJyYXkgb2YgbnVtYmVycyB1c2VkIHRvIHNldCB0aGVcclxuICAgKiB0aHJlc2hvbGRzIGZvciBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBbb3B0aW9ucy5ibGVuZE1hdGNoUGhhc2VzPVtdXSAtIE9wdGlvbmFsIGFycmF5IG9mIGJvb2xlYW5zIHVzZWQgdG9cclxuICAgKiBzZXQgd2hldGhlciBvciBub3QgZWFjaCBibGVuZCBzdGF0ZSBpbiB0aGlzIGNvbnRhaW5lciB3aWxsIG1hdGNoIHBoYXNlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtCbGVuZDFkU3RhdGV9XHJcbiAgICovXHJcbiAgX2NyZWF0ZUJsZW5kMmRTdGF0ZShvcHRpb25zKSB7XHJcbiAgICBjb25zdCB7YmxlbmRTdGF0ZU9wdGlvbnMgPSBbXX0gPSBvcHRpb25zO1xyXG4gICAgY29uc3Qge2JsZW5kVGhyZXNob2xkcyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRNYXRjaFBoYXNlcyA9IFtdfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgY29uc3QgYmxlbmRTdGF0ZXMgPSBbXTtcclxuICAgIGJsZW5kU3RhdGVPcHRpb25zLmZvckVhY2goYmxlbmRPcHRpb25zID0+IHtcclxuICAgICAgYmxlbmRTdGF0ZXMucHVzaChcclxuICAgICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7Li4uYmxlbmRPcHRpb25zLCBibGVuZE1vZGU6IG9wdGlvbnMuYmxlbmRNb2RlfSlcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXcgQmxlbmQyZFN0YXRlKFxyXG4gICAgICBvcHRpb25zLFxyXG4gICAgICBibGVuZFN0YXRlcyxcclxuICAgICAgYmxlbmRUaHJlc2hvbGRzLFxyXG4gICAgICBibGVuZE1hdGNoUGhhc2VzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgUmFuZG9tQW5pbWF0aW9uU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIFJhbmRvbUFuaW1hdGlvblN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5wbGF5SW50ZXJ2YWw9M10gLSBUaGUgYmFzZSBhbmltYXRpb24gcGxheWJhY2sgaW50ZXJ2YWwuXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW29wdGlvbnMuc3ViU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogc3ViIHN0YXRlcyBmb3IgdGhpcyBjb250YWluZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UmFuZG9tQW5pbWF0aW9uU3RhdGV9XHJcbiAgICovXHJcbiAgX2NyZWF0ZVJhbmRvbUFuaW1hdGlvblN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtzdWJTdGF0ZU9wdGlvbnMgPSBbXX0gPSBvcHRpb25zO1xyXG5cclxuICAgIGNvbnN0IHN1YlN0YXRlcyA9IFtdO1xyXG4gICAgc3ViU3RhdGVPcHRpb25zLmZvckVhY2goc3ViU3RhdGVPcHRpb25zID0+IHtcclxuICAgICAgc3ViU3RhdGVzLnB1c2goXHJcbiAgICAgICAgdGhpcy5fY3JlYXRlU2luZ2xlU3RhdGUoe1xyXG4gICAgICAgICAgLi4uc3ViU3RhdGVPcHRpb25zLFxyXG4gICAgICAgICAgYmxlbmRNb2RlOiBvcHRpb25zLmJsZW5kTW9kZSxcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBSYW5kb21BbmltYXRpb25TdGF0ZShvcHRpb25zLCBzdWJTdGF0ZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFrZSBzdXJlIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lIGV4aXN0cyBhbmQgcmV0dXJuIGEgdW5pcXVlIHZlcnNpb25cclxuICAgKiBvZiB0aGUgYW5pbWF0aW9uIG5hbWUgc3VwcGxpZWQgZm9yIHRoYXQgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGNoZWNrIGFnYWluc3QuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBWYWxpZGF0ZWQgYW5pbWF0aW9uIG5hbWUuXHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlTmV3QW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllck5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBhZGQgYW5pbWF0aW9uIHRvIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbk5hbWUgaXMgdW5pcXVlXHJcbiAgICBjb25zdCBuYW1lID0gVXRpbHMuZ2V0VW5pcXVlTmFtZShhbmltYXRpb25OYW1lLCBsYXllci5nZXRTdGF0ZU5hbWVzKCkpO1xyXG5cclxuICAgIGlmIChuYW1lICE9PSBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgQW5pbWF0aW9uIG5hbWUgJHthbmltYXRpb25OYW1lfSBpcyBub3QgdW5pcXVlIGZvciBsYXllciAke2xheWVyLm5hbWV9LiBBbmltYXRpb24gd2lsbCBiZSByZW5hbWVkIHRvICR7bmFtZX0uYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCBhbGwgYW5pbWF0aW9ucyBhcmUgcGF1c2VkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IHBhdXNlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuIGFycmF5IG9mIG5hbWVzIG9mIGFuaW1hdGlvbiBsYXllcnMuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7QXJyYXkuPHN0cmluZz59XHJcbiAgICovXHJcbiAgZ2V0IGxheWVycygpIHtcclxuICAgIHJldHVybiB0aGlzLl9sYXllcnMubWFwKGxheWVyID0+IGxheWVyLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuZCBzdG9yZSBhIG5ldyBhbmltYXRpb24gbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9J05ld0xheWVyJ10gLSBOYW1lIGZvciB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSAtIE9wdGlvbnMgdG8gcGFzcyB0byB7QGxpbmsgQW5pbWF0aW9uTGF5ZXIjY29uc3RydWN0b3J9XHJcbiAgICogQHBhcmFtIHtpbmRleD19IGluZGV4IC0gSW5kZXggdG8gaW5zZXJ0IHRoZSBuZXcgbGF5ZXIgYXQuIElmIG5vbmUgaXMgcHJvdmlkZWRcclxuICAgKiBpdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHN0YWNrLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gSW5kZXggb2YgdGhlIG5ldyBsYXllci5cclxuICAgKi9cclxuICBhZGRMYXllcihuYW1lID0gJ05ld0xheWVyJywgb3B0aW9ucyA9IHt9LCBpbmRleCkge1xyXG4gICAgY29uc3QgbnVtTGF5ZXJzID0gdGhpcy5fbGF5ZXJzLmxlbmd0aDtcclxuICAgIGxldCBsYXllckluZGV4ID0gaW5kZXg7XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBnaXZlbiBpbmRleCBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIGxheWVyc1xyXG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgfHwgaW5kZXggPT09IC0xKSB7XHJcbiAgICAgIGxheWVySW5kZXggPSB0aGlzLl9sYXllcnMubGVuZ3RoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGF5ZXJJbmRleCA9IHRoaXMuX3ZhbGlkYXRlSW5kZXgoaW5kZXgsIGZhbHNlKTtcclxuXHJcbiAgICAgIGlmIChsYXllckluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAvLyBJbnNlcnQgYXQgdGhlIGJlZ2lubmluZyBpZiB0aGUgdXNlciBwYXNzZWQgaW4gYSBuZWdhdGl2ZSBpbmRleFxyXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgIGxheWVySW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBPdGhlcndpc2UgYXBwZW5kIHRvIHRoZSBlbmRcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGxheWVySW5kZXggPSB0aGlzLl9sYXllcnMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEluZGV4ICR7aW5kZXh9IGlzIGludmFsaWQgZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTmV3IGxheWVyIHdpbGwgYmUgYWRkZWQgYXQgdGhlIGNsb3Nlc3QgdmFsaWQgaW5kZXg6ICR7bGF5ZXJJbmRleH0uYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIG5hbWUgaXMgdW5pcXVlXHJcbiAgICBjb25zdCBsYXllck5hbWUgPSBVdGlscy5nZXRVbmlxdWVOYW1lKG5hbWUsIE9iamVjdC5rZXlzKHRoaXMuX2xheWVyTWFwKSk7XHJcblxyXG4gICAgaWYgKG5hbWUgIT09IGxheWVyTmFtZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYExheWVyIG5hbWUgJHtuYW1lfSBpcyBub3QgdW5pcXVlLiBOZXcgbGF5ZXIgd2lsbCBiZSBhZGRlZCB3aXRoIHRoZSBuYW1lICR7bGF5ZXJOYW1lfS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGF5ZXIgPSBuZXcgQW5pbWF0aW9uTGF5ZXIoey4uLm9wdGlvbnMsIG5hbWU6IGxheWVyTmFtZX0pO1xyXG4gICAgdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXSA9IGxheWVyO1xyXG5cclxuICAgIGlmIChsYXllckluZGV4ID09PSBudW1MYXllcnMpIHtcclxuICAgICAgdGhpcy5fbGF5ZXJzLnB1c2gobGF5ZXIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbGF5ZXJzLnNwbGljZShsYXllckluZGV4LCAwLCBsYXllcik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYSBsYXllciBoYXMgYmVlbiBhZGRlZCB0byB0aGUgZmVhdHVyZVxyXG4gICAgY29uc3QgZXZlbnREYXRhID0ge25hbWU6IGxheWVyTmFtZSwgaW5kZXg6IGxheWVySW5kZXh9O1xyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLmFkZExheWVyLCBldmVudERhdGEpO1xyXG5cclxuICAgIHJldHVybiBldmVudERhdGE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYW4gYW5pbWF0aW9uIGxheWVyIGZyb20gdGhlIHN0YWNrLiBBbmltYXRpb25zIG9uIHRoaXMgbGF5ZXIgd2lsbCBub1xyXG4gICAqIGxvbmdlciBiZSBldmFsdWF0ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgZm9yIHRoZSBsYXllciB0byByZW1vdmUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgcmVtb3ZhbCB3YXMgc3VjY2Vzc2Z1bC5cclxuICAgKi9cclxuICByZW1vdmVMYXllcihuYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgRGlkIG5vdCByZW1vdmUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxheWVyLmRpc2NhcmQoKTtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xheWVycy5pbmRleE9mKGxheWVyKTtcclxuICAgIHRoaXMuX2xheWVycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgZGVsZXRlIHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGEgbGF5ZXIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBmZWF0dXJlXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucmVtb3ZlTGF5ZXIsIHtuYW1lLCBpbmRleH0pO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmUtb3JkZXIgdGhlIGxheWVyIHN0YWNrIHNvIHRoYXQgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgcG9zaXRpb25lZFxyXG4gICAqIGF0IHRoZSBnaXZlbiBpbmRleC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gbW92ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBOZXcgaW5kZXggdG8gcG9zaXRpb24gdGhlIGxheWVyIGF0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIG5ldyBpbmRleCBvZiB0aGUgbGF5ZXJcclxuICAgKi9cclxuICBtb3ZlTGF5ZXIobmFtZSwgaW5kZXgpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBtb3ZlIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBpbmRleCBmYWxscyBpbiB0aGUgcmFuZ2Ugb2YgZXhpc3RpbmcgbGF5ZXJzXHJcbiAgICBjb25zdCBsYXllckluZGV4ID0gdGhpcy5fdmFsaWRhdGVJbmRleChpbmRleCwgdHJ1ZSk7XHJcbiAgICBjb25zdCBsYXN0SW5kZXggPSB0aGlzLl9sYXllcnMubGVuZ3RoIC0gMTtcclxuXHJcbiAgICBpZiAobGF5ZXJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IG1vdmUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfSB0byBpbmRleCAke2luZGV4fS4gSW5kZXggbXVzdCBiZSBpbiB0aGUgMCAtICR7bGFzdEluZGV4fSByYW5nZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5fbGF5ZXJzLmluZGV4T2YobGF5ZXIpO1xyXG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gbGF5ZXJJbmRleCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb25cclxuICAgIHRoaXMuX2xheWVycy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTtcclxuXHJcbiAgICAvLyBJbnNlcnQgYXQgdGhlIG5ldyBwb3NpdGlvblxyXG4gICAgaWYgKGxheWVySW5kZXggPT09IGxhc3RJbmRleCkge1xyXG4gICAgICB0aGlzLl9sYXllcnMucHVzaChsYXllcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9sYXllcnMuc3BsaWNlKGxheWVySW5kZXgsIDAsIGxheWVyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXJJbmRleDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgbmFtZSBvZiBhIGxheWVyLiBOYW1lcyBtdXN0IGJlIHVuaXF1ZSwgaWYgdGhlIG5ldyBuYW1lIGlzIG5vdFxyXG4gICAqIHVuaXF1ZSBpdCB3aWxsIGhhdmUgdHJhaWxpbmcgbnVtYmVycyBhcHBlbmRlZCB1bnRpbCBpdCBpcyB1bmlxdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudE5hbWUgLSBDdXJyZW50IG5hbWUgb2YgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUgdG8gc2V0IG9uIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuZXcgbmFtZSBvZiB0aGUgbGF5ZXJcclxuICAgKi9cclxuICByZW5hbWVMYXllcihjdXJyZW50TmFtZSwgbmV3TmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2N1cnJlbnROYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCByZW5hbWUgbGF5ZXIgJHtjdXJyZW50TmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBuYW1lIGlzIHVuaXF1ZVxyXG4gICAgY29uc3QgbmFtZSA9IFV0aWxzLmdldFVuaXF1ZU5hbWUobmV3TmFtZSwgT2JqZWN0LmtleXModGhpcy5fbGF5ZXJNYXApKTtcclxuXHJcbiAgICBpZiAobmFtZSAhPT0gbmV3TmFtZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYExheWVyIG5hbWUgJHtuZXdOYW1lfSBpcyBub3QgdW5pcXVlLiBMYXllciB3aWxsIGJlIHJlbmFtZWQgdG8gJHtuYW1lfS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlIHRoaXMuX2xheWVyTWFwW2N1cnJlbnROYW1lXTtcclxuICAgIHRoaXMuX2xheWVyTWFwW25hbWVdID0gbGF5ZXI7XHJcbiAgICBsYXllci5uYW1lID0gbmFtZTtcclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhIGxheWVyIGhhcyBiZWVuIHJlbmFtZWQgb24gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW5hbWVMYXllciwge1xyXG4gICAgICBvbGROYW1lOiBjdXJyZW50TmFtZSxcclxuICAgICAgbmV3TmFtZTogbmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB3ZWlnaHQgb2YgYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byByZXR1cm4gd2VpZ2h0IGZyb20uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldExheWVyV2VpZ2h0KG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBnZXQgd2VpZ2h0IG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLndlaWdodDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgd2VpZ2h0IG9mIGFuIGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGxheWVyIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGhlIHdlaWdodCB2YWx1ZSB0byBzZXQgb24gdGhlIGxheWVyLiBUaGlzIG51bWJlclxyXG4gICAqIHNob3VsZCBiZSBpbiB0aGUgMC0xIHJhbmdlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGVcclxuICAgKiBuZXcgd2VpZ2h0LiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIGludGVycG9sYXRpbmdcclxuICAgKiB0aGUgd2VpZ2h0LiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IEEgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSBsYXllcidzIHdlaWdodCByZWFjaGVzXHJcbiAgICogdGhlIHRhcmdldCB2YWx1ZS5cclxuICAgKi9cclxuICBzZXRMYXllcldlaWdodChuYW1lLCB3ZWlnaHQsIHNlY29uZHMsIGVhc2luZ0ZuKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3Qgc2V0IHdlaWdodCBvbiBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuc2V0V2VpZ2h0KHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgbmFtZXMgb2YgYmxlbmQgc3RhdGVzIGluIGFuIGFuaW1hdGlvbiBpbiBhIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5pbmcgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nXHJcbiAgICogdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nIHRoZSBibGVuZCBzdGF0ZVxyXG4gICAqIHRvIHVwZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gLSBOYW1lcyBvZiBibGVuZCBzdGF0ZXMuXHJcbiAgICovXHJcbiAgZ2V0QW5pbWF0aW9uQmxlbmROYW1lcyhsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBnZXQgYmxlbmQgbmFtZXMgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5nZXRBbmltYXRpb25CbGVuZE5hbWVzKGFuaW1hdGlvbk5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSB3ZWlnaHQgZm9yIGEgYmxlbmQgc3RhdGUgaW4gYW4gYW5pbWF0aW9uIGluIGEgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbmluZyB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmdcclxuICAgKiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmcgdGhlIGJsZW5kIHN0YXRlXHJcbiAgICogdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBibGVuZE5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCBzdGF0ZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFdlaWdodCB2YWx1ZSB0byBzZXQgb24gdGhlIGFuaW1hdGlvbi4gVGhpcyBudW1iZXIgc2hvdWRsZCBiZVxyXG4gICAqIGluIHRoZSAwLTEgcmFuZ2UuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gTnVtYmVyIG9mIHNlY29uZHMgaXQgc2hvdWxkIHRha2UgdG8gcmVhY2ggdGhlIG5ldyB3ZWlnaHQuXHJcbiAgICogRGVmYXVsdCBpcyB6ZXJvIGFuZCB3aWxsIHNldCBpbW1lZGlhdGVseS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIGludGVycG9sYXRpbmcgdGhlIG5ld1xyXG4gICAqIHdlaWdodC4gRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgb25jZSB0aGUgYW5pbWF0aW9uJ3Mgd2VpZ2h0IHJlYWNoZXNcclxuICAgKiB0aGUgdGFyZ2V0IHZhbHVlLlxyXG4gICAqL1xyXG4gIHNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxyXG4gICAgbGF5ZXJOYW1lLFxyXG4gICAgYW5pbWF0aW9uTmFtZSxcclxuICAgIGJsZW5kTmFtZSxcclxuICAgIHdlaWdodCxcclxuICAgIHNlY29uZHMsXHJcbiAgICBlYXNpbmdGblxyXG4gICkge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHNldCBibGVuZCB3ZWlnaHQgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIGJsZW5kTmFtZSxcclxuICAgICAgd2VpZ2h0LFxyXG4gICAgICBzZWNvbmRzLFxyXG4gICAgICBlYXNpbmdGblxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHdlaWdodCBmb3IgYSBibGVuZCBzdGF0ZSBpbiBhbiBhbmltYXRpb24gaW4gYSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciBjb250YWluaW5nIHRoZSBhbmltYXRpb24gY29udGFpbmluZ1xyXG4gICAqIHRoZSBibGVuZCBzdGF0ZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gY29udGFpbmluZyB0aGUgYmxlbmQgc3RhdGVcclxuICAgKiB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gV2VpZ2h0IG9mIHRoZSBibGVuZCBzdGF0ZS5cclxuICAgKi9cclxuICBnZXRBbmltYXRpb25CbGVuZFdlaWdodChsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIGJsZW5kTmFtZSkge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5nZXRBbmltYXRpb25CbGVuZFdlaWdodChhbmltYXRpb25OYW1lLCBibGVuZE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2Ugd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gcGF1c2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG9yIG5vdCB0aGVyZSB3YXMgYW4gZXhpc3RpbmcgaW50ZXJwb2xhdGlvbiB0byBwYXVzZS5cclxuICAgKi9cclxuICBwYXVzZUxheWVyV2VpZ2h0KG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBwYXVzZSB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBvbiBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5wYXVzZVdlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIHdlaWdodCBpbnRlcnBvbGF0aW9uIGFuaW1hdGlvbiBvbiBhIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJlc3VtZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBsYXllcidzIHdlaWdodCByZWFjaGVzIGl0cyB0YXJnZXQgdmFsdWUuXHJcbiAgICovXHJcbiAgcmVzdW1lTGF5ZXJXZWlnaHQobmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHJlc3VtZSB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBvbiBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIucmVzdW1lV2VpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBjdXJyZW50IGFuaW1hdGlvbiBhbmQgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGEgbGF5ZXIgd2l0aFxyXG4gICAqIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBwYXVzZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IHRoZXJlIHdhcyBhbiBleGlzdGluZyBpbnRlcnBvbGF0aW9uIG9yXHJcbiAgICogY3VycmVudCBhbmltYXRpb24gdG8gcGF1c2UuXHJcbiAgICovXHJcbiAgcGF1c2VMYXllcihuYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgcGF1c2UgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIucGF1c2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VtZSBjdXJyZW50IGFuaW1hdGlvbiBhbmQgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGEgbGF5ZXIgd2l0aFxyXG4gICAqIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byByZXN1bWUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IC0gUmVzb2x2ZXMgb25jZSB0aGUgbGF5ZXIncyB3ZWlnaHQgcmVhY2hlcyBpdHMgdGFyZ2V0IHZhbHVlXHJcbiAgICogYW5kIGl0J3MgY3VycmVudCBhbmltYXRpb24gZmluaXNoZXMgcGxheWluZy5cclxuICAgKi9cclxuICByZXN1bWVMYXllcihuYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcmVzdW1lIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5yZXN1bWUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgYW5pbWF0aW9uIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgY3VycmVudGx5XHJcbiAgICogdHJhbnNpdGlvbmluZyBiZXR3ZWVuIGFuaW1hdGlvbnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gY2hlY2suXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXRUcmFuc2l0aW9uaW5nKGxheWVyTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllck5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYEdldCB0cmFuc2l0aW9uaW5nIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuaXNUcmFuc2l0aW9uaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIHRoZSBuYW1lcyBvZiBhbGwgc3RhdGVzIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lIGNvbnRyb2xzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHNlYXJjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn1cclxuICAgKi9cclxuICBnZXRBbmltYXRpb25zKGxheWVyTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllck5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYEdldCBhbmltYXRpb25zIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuZ2V0U3RhdGVOYW1lcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBzdGF0ZSBjdXJyZW50bHkgYWN0aXZlIG9uIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqIFJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgYW5pbWF0aW9uIGZvciB0aGUgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7KHN0cmluZ3xudWxsKX1cclxuICAgKi9cclxuICBnZXRDdXJyZW50QW5pbWF0aW9uKGxheWVyTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllck5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYEdldCBjdXJyZW50IGFuaW1hdGlvbiBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmN1cnJlbnRBbmltYXRpb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gd2hldGhlciBvciBub3QgYSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzIGN1cnJlbnRseSBwbGF5aW5nIGFuXHJcbiAgICogYW5pbWF0aW9uIGFuZCB0aGF0IGFuaW1hdGlvbiBpcyBwYXVzZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXRQYXVzZWQobGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IHBhdXNlZCBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmN1cnJlbnRTdGF0ZSAmJiBsYXllci5jdXJyZW50U3RhdGUucGF1c2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB0eXBlIG5hbWUgb2YgdGhlIGdpdmVuIGFuaW1hdGlvbi4gQHNlZSBBbmltYXRpb25UeXBlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gY2hlY2suXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvblR5cGUobGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGFuaW1hdGlvbiB0eXBlIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGF0ZSA9IGxheWVyLmdldFN0YXRlKGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGFuaW1hdGlvbiB0eXBlIGZvciBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHtjb25zdHJ1Y3Rvcn0gPSBzdGF0ZTtcclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoQW5pbWF0aW9uVHlwZXMpLmZpbmQoXHJcbiAgICAgIHR5cGVOYW1lID0+IEFuaW1hdGlvblR5cGVzW3R5cGVOYW1lXSA9PT0gY29uc3RydWN0b3JcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgYSBuZXcgYW5pbWF0aW9uIHRvIGFuIGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBhZGQgdGhlIGFuaW1hdGlvbiB0by5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY29uc3RydWN0b3IgZm9yIHRoZSBuZXdcclxuICAgKiBTaW5nbGVTdGF0ZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgYWRkZWRcclxuICAgKi9cclxuICBhZGRBbmltYXRpb24oXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgYW5pbWF0aW9uVHlwZSA9IEFuaW1hdGlvblR5cGVzLnNpbmdsZSxcclxuICAgIG9wdGlvbnMgPSB7fVxyXG4gICkge1xyXG4gICAgb3B0aW9ucy5uYW1lID0gdGhpcy5fdmFsaWRhdGVOZXdBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKTtcclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiB0eXBlIGlzIHZhbGlkXHJcbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoQW5pbWF0aW9uVHlwZXMpLmluY2x1ZGVzKGFuaW1hdGlvblR5cGUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGFkZCBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSB0byBsYXllciAke2xheWVyTmFtZX0gb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBJbnZhbGlkIGFuaW1hdGlvbiB0eXBlLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcbiAgICBvcHRpb25zLmJsZW5kTW9kZSA9IGxheWVyLmJsZW5kTW9kZTtcclxuICAgIG9wdGlvbnMudHJhbnNpdGlvblRpbWUgPSBsYXllci50cmFuc2l0aW9uVGltZTtcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpc1tgX2NyZWF0ZSR7YW5pbWF0aW9uVHlwZS5uYW1lfWBdKG9wdGlvbnMpO1xyXG5cclxuICAgIGNvbnN0IG5hbWUgPSBsYXllci5hZGRTdGF0ZShzdGF0ZSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBmZWF0dXJlXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuYWRkQW5pbWF0aW9uLCB7XHJcbiAgICAgIGxheWVyTmFtZSxcclxuICAgICAgYW5pbWF0aW9uTmFtZTogbmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGFuIGFuaW1hdGlvbiBmcm9tIGFuIGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byByZW1vdmUgdGhlIGFuaW1hdGlvbiBmcm9tLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRvIHJlbW92ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHJlbW92ZUFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHJlbW92ZSBhbmltYXRpb24gZnJvbSBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVtb3ZlZCA9IGxheWVyLnJlbW92ZVN0YXRlKGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGZlYXR1cmVcclxuICAgIGlmIChyZW1vdmVkID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW1vdmVBbmltYXRpb24sIHtcclxuICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlbW92ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIG5hbWUgb2YgYW4gYW5pbWF0aW9uLiBOYW1lcyBtdXN0IGJlIHVuaXF1ZSBvbiBlYWNoIGxheWVyLCBpZiB0aGUgbmV3XHJcbiAgICogbmFtZSBpcyBub3QgdW5pcXVlIGl0IHdpbGwgaGF2ZSB0cmFpbGluZyBudW1iZXJzIGFwcGVuZGVkIHVudGlsIGl0IGlzIHVuaXF1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24gdGhhdFxyXG4gICAqIHdpbGwgYmUgcmVuYW1lZCxcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudEFuaW1hdGlvbk5hbWUgLSBDdXJyZW50IG5hbWUgb2YgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3QW5pbWF0aW9uTmFtZSAtIE5ldyBuYW1lIHRvIHNldCBvbiB0aGUgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgbmV3IG5hbWUgb2YgdGhlIGFuaW1hdGlvblxyXG4gICAqL1xyXG4gIHJlbmFtZUFuaW1hdGlvbihsYXllck5hbWUsIGN1cnJlbnRBbmltYXRpb25OYW1lLCBuZXdBbmltYXRpb25OYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgcmVuYW1lIGFuaW1hdGlvbiAke2N1cnJlbnRBbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuYW1lID0gbGF5ZXIucmVuYW1lU3RhdGUoY3VycmVudEFuaW1hdGlvbk5hbWUsIG5ld0FuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgYmVlbiByZW5hbWVkIG9uIHRoZSBmZWF0dXJlXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucmVuYW1lQW5pbWF0aW9uLCB7XHJcbiAgICAgIGxheWVyTmFtZSxcclxuICAgICAgb2xkTmFtZTogY3VycmVudEFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIG5ld05hbWU6IG5hbWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBjdXJyZW50bHkgcGxheWluZyBhbmltYXRpb24gYW5kIHBsYXkgYSBuZXcgYW5pbWF0aW9uIGZyb20gdGhlIGJlZ2lubmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gc3RhdGUgdG8gcGxheS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgaXQgc2hvdWxkIHRha2UgdG8gdHJhbnNpdGlvblxyXG4gICAqIHRvIHRoZSBuZXcgYW5pbWF0aW9uLiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIHRyYW5zaXRpb25pbmdcclxuICAgKiBiZXR3ZWVuIGFuaW1hdGlvbnMuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBhbmltYXRpb24gcmVhY2hlcyB0aGUgZW5kIG9mIGl0c1xyXG4gICAqIHRpbWVsaW5lLiBMb29waW5nIGFuaW1hdGlvbnMgY2FuIG9ubHkgcmVzb2x2ZSBpZiB0aGV5IGFyZSBpbnRlcnJ1cHRlZCBvclxyXG4gICAqIG1hbnVhbGx5IHN0b3BwZWQuXHJcbiAgICovXHJcbiAgcGxheUFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIHNlY29uZHMsIGVhc2luZ0ZuKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcGxheSBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYSBuZXcgYW5pbWF0aW9uIGhhcyBiZWd1blxyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlBbmltYXRpb24sIHtcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLnBsYXlBbmltYXRpb24oXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIHNlY29uZHMsXHJcbiAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBzdG9wcGVkXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnN0b3BBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgYmVlbiBpbnRlcnJ1cHRlZFxyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5pbnRlcnJ1cHRBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgICh7bmFtZSwgY2FuQWR2YW5jZSwgaXNRdWV1ZUVuZH0pID0+IHtcclxuICAgICAgICBpZiAobGF5ZXIuY3VycmVudEFuaW1hdGlvbiA9PT0gYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgICAgICAgLy8gTm90aWZ5IHRoYXQgYSBuZXcgYW5pbWF0aW9uIGhhcyBiZWd1blxyXG4gICAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlOZXh0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICAgICAgbmV4dFF1ZXVlZEFuaW1hdGlvbjogbmFtZSxcclxuICAgICAgICAgICAgY2FuQWR2YW5jZSxcclxuICAgICAgICAgICAgaXNRdWV1ZUVuZCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBsYXkgdGhlIG5leHQgYW5pbWF0aW9uIGluIHRoZSBxdWV1ZSBvZiBhIFF1ZXVlU3RhdGUgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIHF1ZXVlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gcXVldWUgYW5pbWF0aW9uLiBEZWZhdWx0c1xyXG4gICAqIHRvIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byB0cmFuc2l0aW9uXHJcbiAgICogdG8gdGhlIHF1ZXVlIGFuaW1hdGlvbiBpZiBpdCdzIG5vdCBhbHJlYWR5IGN1cnJlbnRseSBwbGF5aW5nLiBEZWZhdWx0IGlzIHplcm9cclxuICAgKiBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgdHJhbnNpdGlvbmluZ1xyXG4gICAqIHRvIHRoZSBxdWV1ZSBhbmltYXRpb24gaWYgaXQgaXNuJ3QgYWxyZWFkeSBwbGF5aW5nLiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IC0gUmVzb2x2ZXMgb25jZSB0aGUgbGFzdCBhbmltYXRpb24gaW4gdGhlIHF1ZXVlIGZpbmlzaGVzXHJcbiAgICogcGxheWluZy5cclxuICAgKi9cclxuICBwbGF5TmV4dEFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbikge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHBsYXkgbmV4dCBhbmltYXRpb24gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhbmltYXRpb25OYW1lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgYW5pbWF0aW9uTmFtZSA9IGxheWVyLmN1cnJlbnRBbmltYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuZ2V0U3RhdGUobGF5ZXIuY3VycmVudEFuaW1hdGlvbik7XHJcblxyXG4gICAgaWYgKGFuaW1hdGlvbiA9PT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCBwbGF5IG5leHQgYW5pbWF0aW9uIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggbmFtZSAke2FuaW1hdGlvbk5hbWV9LmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0QW5pbWF0aW9uVHlwZShsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpICE9PSAncXVldWUnKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHBsYXkgbmV4dCBhbmltYXRpb24gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uICR7YW5pbWF0aW9uTmFtZX0gaXMgbm90IGEgcXVldWUgc3RhdGUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvbk5leHQgPSAoe25hbWUsIGNhbkFkdmFuY2UsIGlzUXVldWVFbmR9KSA9PiB7XHJcbiAgICAgIGlmIChsYXllci5jdXJyZW50QW5pbWF0aW9uID09PSBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYSBuZXcgYW5pbWF0aW9uIGhhcyBiZWd1blxyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5wbGF5TmV4dEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICAgIG5leHRRdWV1ZWRBbmltYXRpb246IG5hbWUsXHJcbiAgICAgICAgICBjYW5BZHZhbmNlLFxyXG4gICAgICAgICAgaXNRdWV1ZUVuZCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBNYWtlIHRoZSBxdWV1ZSBhbmltYXRpb24gY3VycmVudCBpZiBpdCB3YXNuJ3QgYWxyZWFkeVxyXG4gICAgaWYgKGxheWVyLmN1cnJlbnRBbmltYXRpb24gPT09IG51bGwpIHtcclxuICAgICAgbGF5ZXIucmVzdW1lQW5pbWF0aW9uKFxyXG4gICAgICAgIGFuaW1hdGlvbi5uYW1lLFxyXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxyXG4gICAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIG9uTmV4dFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhbmltYXRpb24ubmV4dChvbk5leHQsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIG9uIGEgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHBhdXNlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IGFuIGFuaW1hdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IHBhdXNlZC5cclxuICAgKi9cclxuICBwYXVzZUFuaW1hdGlvbihuYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgRGlkIG5vdCBwYXVzZSBhbmltYXRpb24gb24gbGF5ZXIgJHtuYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGF1c2VkID0gbGF5ZXIucGF1c2VBbmltYXRpb24oKTtcclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gd2FzIHBhdXNlZFxyXG4gICAgaWYgKHBhdXNlZCkge1xyXG4gICAgICBjb25zdCBhbmltYXRpb25OYW1lID0gbGF5ZXIuY3VycmVudEFuaW1hdGlvbjtcclxuICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBhdXNlQW5pbWF0aW9uLCB7XHJcbiAgICAgICAgbGF5ZXJOYW1lOiBuYW1lLFxyXG4gICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB0aGUgY3VycmVudGx5IHBsYXlpbmcgYW5pbWF0aW9uIGFuZCBwbGF5IGEgbmV3IGFuaW1hdGlvbiBmcm9tIHdoZXJlIGl0XHJcbiAgICogbGFzdCBsZWZ0IG9mZi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHN0YXRlIHRvIHJlc3VtZS4gRGVmYXVsdHNcclxuICAgKiB0byB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBhbmltYXRpb24gZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgaXQgc2hvdWxkIHRha2UgdG8gdHJhbnNpdGlvblxyXG4gICAqIHRvIHRoZSBuZXcgYW5pbWF0aW9uLiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIHRyYW5zaXRpb25pbmdcclxuICAgKiBiZXR3ZWVuIGFuaW1hdGlvbnMuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBhbmltYXRpb24gcmVhY2hlcyB0aGUgZW5kIG9mIGl0c1xyXG4gICAqIHRpbWVsaW5lLiBMb29waW5nIGFuaW1hdGlvbnMgY2FuIG9ubHkgcmVzb2x2ZSBpZiB0aGV5IGFyZSBpbnRlcnJ1cHRlZCBvclxyXG4gICAqIG1hbnVhbGx5IHN0b3BwZWQuXHJcbiAgICovXHJcbiAgcmVzdW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCByZXN1bWUgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiB3YXMgcmVzdW1lZFxyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnJlc3VtZUFuaW1hdGlvbiwge1xyXG4gICAgICBsYXllck5hbWUsXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbGF5ZXIucmVzdW1lQW5pbWF0aW9uKFxyXG4gICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICBzZWNvbmRzLFxyXG4gICAgICBlYXNpbmdGbixcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgc3RvcHBlZFxyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5zdG9wQW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gaGFzIGJlZW4gaW50ZXJydXB0ZWRcclxuICAgICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuaW50ZXJydXB0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICAoe25hbWUsIGNhbkFkdmFuY2UsIGlzUXVldWVFbmR9KSA9PiB7XHJcbiAgICAgICAgaWYgKGxheWVyLmN1cnJlbnRBbmltYXRpb24gPT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgICAgIC8vIE5vdGlmeSB0aGF0IGEgbmV3IGFuaW1hdGlvbiBoYXMgYmVndW5cclxuICAgICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5wbGF5TmV4dEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgICAgIG5leHRRdWV1ZWRBbmltYXRpb246IG5hbWUsXHJcbiAgICAgICAgICAgIGNhbkFkdmFuY2UsXHJcbiAgICAgICAgICAgIGlzUXVldWVFbmQsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBvbiBhIGxheWVyLiBTdG9wIHJld2luZHMgdGhlIGFuaW1hdGlvbiB0byB0aGVcclxuICAgKiBiZWdpbm5pbmcgYW5kIHByZXZlbnRzIGl0IGZyb20gcHJvZ3Jlc3NpbmcgZm9yd2FyZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgYW5pbWF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IGFuIGFuaW1hdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IHN0b3BwZWQuXHJcbiAgICovXHJcbiAgc3RvcEFuaW1hdGlvbihuYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgRGlkIG5vdCBzdG9wIGFuaW1hdGlvbiBvbiBsYXllciAke25hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuc3RvcEFuaW1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgY3VycmVudCBhbmltYXRpb24gYW5kIHdlaWdodCBpbnRlcnBvbGF0aW9uIGFuaW1hdGlvbiBvbiBhbGwgbGF5ZXJzLlxyXG5cclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG9yIG5vdCB0aGVyZSB3YXMgYW4gZXhpc3RpbmcgaW50ZXJwb2xhdGlvbiBvclxyXG4gICAqIGN1cnJlbnQgYW5pbWF0aW9ucyB0byBwYXVzZS5cclxuICAgKi9cclxuICBwYXVzZSgpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XHJcblxyXG4gICAgbGV0IHBhdXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbGF5ZXJzLmZvckVhY2gobCA9PiB7XHJcbiAgICAgIGlmIChsLnBhdXNlKCkpIHtcclxuICAgICAgICBwYXVzZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGF1c2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIGN1cnJlbnQgYW5pbWF0aW9uIGFuZCB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYWxsIGxheWVycy5cclxuXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgdGhlcmUgd2FzIGFuIGV4aXN0aW5nIGludGVycG9sYXRpb24gb3JcclxuICAgKiBjdXJyZW50IGFuaW1hdGlvbnMgdG8gcmVzdW1lLlxyXG4gICAqL1xyXG4gIHJlc3VtZSgpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGxldCByZXN1bWVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsID0+IHtcclxuICAgICAgaWYgKGwucmVzdW1lKCkpIHtcclxuICAgICAgICByZXN1bWVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VtZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgbmFtZXNwYWNlIHRvIHRoZSBob3N0IHdpdGggdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gY29udGFpbiBwcm9wZXJ0aWVzXHJcbiAgICogYW5kIG1ldGhvZHMgZnJvbSB0aGUgZmVhdHVyZSB0aGF0IHVzZXJzIG9mIHRoZSBob3N0IG5lZWQgYWNjZXNzIHRvLlxyXG4gICAqXHJcbiAgICogQHNlZSBBbmltYXRpb25GZWF0dXJlXHJcbiAgICovXHJcbiAgaW5zdGFsbEFwaSgpIHtcclxuICAgIC8qKlxyXG4gICAgICogQGlubmVyXHJcbiAgICAgKiBAbmFtZXNwYWNlIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAqL1xyXG4gICAgY29uc3QgYXBpID0gc3VwZXIuaW5zdGFsbEFwaSgpO1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlZFxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2VkOiB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLnBhdXNlZCxcclxuICAgICAgfSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNsYXllcnNcclxuICAgICAgICovXHJcbiAgICAgIGxheWVyczoge1xyXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5sYXllcnMsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjYWRkTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIGFkZExheWVyOiB0aGlzLmFkZExheWVyLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW1vdmVMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgcmVtb3ZlTGF5ZXI6IHRoaXMucmVtb3ZlTGF5ZXIuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI21vdmVMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgbW92ZUxheWVyOiB0aGlzLm1vdmVMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVuYW1lTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIHJlbmFtZUxheWVyOiB0aGlzLnJlbmFtZUxheWVyLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0TGF5ZXJXZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIGdldExheWVyV2VpZ2h0OiB0aGlzLmdldExheWVyV2VpZ2h0LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNzZXRMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgc2V0TGF5ZXJXZWlnaHQ6IHRoaXMuc2V0TGF5ZXJXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlTGF5ZXJXZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlTGF5ZXJXZWlnaHQ6IHRoaXMucGF1c2VMYXllcldlaWdodC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lTGF5ZXJXZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZUxheWVyV2VpZ2h0OiB0aGlzLnJlc3VtZUxheWVyV2VpZ2h0LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNwYXVzZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZUxheWVyOiB0aGlzLnBhdXNlTGF5ZXIuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3Jlc3VtZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICByZXN1bWVMYXllcjogdGhpcy5yZXN1bWVMYXllci5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldFRyYW5zaXRpb25pbmdcclxuICAgICAgICovXHJcbiAgICAgIGdldFRyYW5zaXRpb25pbmc6IHRoaXMuZ2V0VHJhbnNpdGlvbmluZy5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0QW5pbWF0aW9uc1xyXG4gICAgICAgKi9cclxuICAgICAgZ2V0QW5pbWF0aW9uczogdGhpcy5nZXRBbmltYXRpb25zLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRDdXJyZW50QW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRDdXJyZW50QW5pbWF0aW9uOiB0aGlzLmdldEN1cnJlbnRBbmltYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldFBhdXNlZFxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0UGF1c2VkOiB0aGlzLmdldFBhdXNlZC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0QW5pbWF0aW9uVHlwZVxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0QW5pbWF0aW9uVHlwZTogdGhpcy5nZXRBbmltYXRpb25UeXBlLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNhZGRBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIGFkZEFuaW1hdGlvbjogdGhpcy5hZGRBbmltYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUFuaW1hdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgcmVtb3ZlQW5pbWF0aW9uOiB0aGlzLnJlbW92ZUFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVuYW1lQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICByZW5hbWVBbmltYXRpb246IHRoaXMucmVuYW1lQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0QW5pbWF0aW9uQmxlbmROYW1lc1xyXG4gICAgICAgKi9cclxuICAgICAgZ2V0QW5pbWF0aW9uQmxlbmROYW1lczogdGhpcy5nZXRBbmltYXRpb25CbGVuZE5hbWVzLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25CbGVuZFdlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQ6IHRoaXMuZ2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3NldEFuaW1hdGlvbkJsZW5kV2VpZ2h0XHJcbiAgICAgICAqL1xyXG4gICAgICBzZXRBbmltYXRpb25CbGVuZFdlaWdodDogdGhpcy5zZXRBbmltYXRpb25CbGVuZFdlaWdodC5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHBsYXlBbmltYXRpb246IHRoaXMucGxheUFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlOZXh0QW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBwbGF5TmV4dEFuaW1hdGlvbjogdGhpcy5wbGF5TmV4dEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZUFuaW1hdGlvbjogdGhpcy5wYXVzZUFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICByZXN1bWVBbmltYXRpb246IHRoaXMucmVzdW1lQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNzdG9wQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBzdG9wQW5pbWF0aW9uOiB0aGlzLnN0b3BBbmltYXRpb24uYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNwYXVzZVxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2U6IHRoaXMucGF1c2UuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3Jlc3VtZVxyXG4gICAgICAgKi9cclxuICAgICAgcmVzdW1lOiB0aGlzLnJlc3VtZS5iaW5kKHRoaXMpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgZWFjaCBhbmltYXRpb24gbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsdGFUaW1lIC0gVGltZSBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXHJcbiAgICovXHJcbiAgdXBkYXRlKGRlbHRhVGltZSkge1xyXG4gICAgaWYgKCF0aGlzLl9sYXllcnMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgIGRlbHRhVGltZSA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmUtZXZhbHVhdGUgaW50ZXJuYWwgd2VpZ2h0cyBmb3IgbGF5ZXJzXHJcbiAgICB0aGlzLl91cGRhdGVJbnRlcm5hbFdlaWdodHMoKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgbGF5ZXJzXHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XHJcbiAgICAgIGxheWVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgfVxyXG5cclxuICBkaXNjYXJkKCkge1xyXG4gICAgdGhpcy5fbGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xyXG4gICAgICBsYXllci5kaXNjYXJkKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJzO1xyXG4gICAgZGVsZXRlIHRoaXMuX2xheWVyTWFwO1xyXG5cclxuICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBbmltYXRpb25GZWF0dXJlLCAnRVZFTlRTJywge1xyXG4gIHZhbHVlOiB7XHJcbiAgICAuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoQWJzdHJhY3RIb3N0RmVhdHVyZSkuRVZFTlRTLFxyXG4gICAgYWRkTGF5ZXI6ICdvbkFkZExheWVyRXZlbnQnLFxyXG4gICAgcmVtb3ZlTGF5ZXI6ICdvblJlbW92ZUxheWVyRXZlbnQnLFxyXG4gICAgcmVuYW1lTGF5ZXI6ICdvblJlbmFtZUxheWVyRXZlbnQnLFxyXG4gICAgYWRkQW5pbWF0aW9uOiAnb25BZGRBbmltYXRpb25FdmVudCcsXHJcbiAgICByZW1vdmVBbmltYXRpb246ICdvblJlbW92ZWRBbmltYXRpb25FdmVudCcsXHJcbiAgICByZW5hbWVBbmltYXRpb246ICdvblJlbmFtZUFuaW1hdGlvbkV2ZW50JyxcclxuICAgIHBsYXlBbmltYXRpb246ICdvblBsYXlFdmVudCcsXHJcbiAgICBwbGF5TmV4dEFuaW1hdGlvbjogJ29uTmV4dEV2ZW50JyxcclxuICAgIHBhdXNlQW5pbWF0aW9uOiAnb25QYXVzZUV2ZW50JyxcclxuICAgIHJlc3VtZUFuaW1hdGlvbjogJ29uUmVzdW1lRXZlbnQnLFxyXG4gICAgaW50ZXJydXB0QW5pbWF0aW9uOiAnb25JbnRlcnJ1cHRFdmVudCcsXHJcbiAgICBzdG9wQW5pbWF0aW9uOiAnb25TdG9wRXZlbnQnLFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uRmVhdHVyZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSBmcm9tICcuL2FuaW1wYWNrL01hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSc7XG5pbXBvcnQgeyBBbmltYXRpb25UeXBlcyB9IGZyb20gJy4vYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZSc7XG5pbXBvcnQgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UgZnJvbSAnLi9hd3NwYWNrL1NTTUxTcGVlY2htYXJrSW50ZXJmYWNlJztcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJy4vQWJzdHJhY3RIb3N0RmVhdHVyZSc7XG5pbXBvcnQgeyBRdWFkcmF0aWMgfSBmcm9tICcuL2FuaW1wYWNrL0Vhc2luZyc7XG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJy4vTWF0aFV0aWxzJztcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcblxuLyoqXG4gKiBFbnVtIGZvciBheGlzIGRpcmVjdGlvbnMuXG4gKlxuICogQHJlYWRvbmx5XG4gKiBAZW51bSB7Q2xhc3N9XG4gKi9cbmNvbnN0IEF4aXNNYXAgPSB7XG4gIFBvc2l0aXZlWDogWzEsIDAsIDBdLFxuICBOZWdhdGl2ZVg6IFstMSwgMCwgMF0sXG4gIFBvc2l0aXZlWTogWzAsIDEsIDBdLFxuICBOZWdhdGl2ZVk6IFswLCAtMSwgMF0sXG4gIFBvc2l0aXZlWjogWzAsIDAsIDFdLFxuICBOZWdhdGl2ZVo6IFswLCAwLCAtMV0sXG59O1xuXG5jb25zdCBGYWNlVGFyZ2V0VHlwZXMgPSB7XG4gIEV5ZUNlbnRlcjogMCxcbiAgRXllTGVmdDogMSxcbiAgRXllUmlnaHQ6IDIsXG4gIE1vdXRoOiAzLFxufVxuXG4vLyBBdmVyYWdlIGRpc3RhbmNlIGJldHdlZW4gcHVwaWxzIGlzIC4wNjRtLCBnb2xkZW4gcmF0aW8gc2F5cyB0aGF0IHRoZSBkaXN0YW5jZVxuLy8gZnJvbSBjZW50ZXIgb2YgdGhlIHB1cGlscyB0byB0aGUgY2VudGVyIG9mIHRoZSBtb3V0aCBzaG91bGQgYmUgYWJvdXQgdGhlIHNhbWUuXG5jb25zdCBGYWNlVmVjdG9ycyA9IFtcbiAgWzAsIDAsIDBdLFxuICBbLS4wMzIsIDAsIDBdLFxuICBbLjAzMiwgMCwgMF0sXG4gIFswLCAtLjA2NCwgMF1cbl07XG5cbi8vIFRpbWUgcmFuZ2VzIHRvIHVzZSB3aGVuIGNob29zaW5nIGEgbmV3IHJhbmRvbSB3YWl0IHRpbWUgYmV0d2VlbiBzYWNjYWRlc1xuY29uc3QgTWljcm9TYWNjYWRlV2FpdFJhbmdlcyA9IHtcbiAgZGVmYXVsdDogWzAuOCwgMS43NV0sXG4gIHBvc3RNYWNybzogWzAuNiwgMS4zMTI1XSxcbn07XG5cbmNvbnN0IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMgPSB7XG4gIGRlZmF1bHQ6IFs1LjAsIDguMF0sXG4gIG1vdXRoVGFyZ2V0OiBbMC4yLCAwLjc1XSwgLy8gTG9vayBhd2F5IGZyb20gYSBtb3V0aCB0YXJnZXQgdGhlIGZhc3Rlc3RcbiAgZXllVGFyZ2V0OiBbMS41LCA0LjBdXG59O1xuXG4vLyBNaW5pbXVtIGFuZ2xlIGluIGRlZ3JlZXMgdGhlIGV5ZSBkaXJlY3Rpb24gbXVzdCBjaGFuZ2UgdG8gdHJpZ2dlciBhIGJsaW5rIGFuaW1hdGlvblxuY29uc3QgQmxpbmtUaHJlc2hvbGQgPSAzNTtcblxuLy8gTWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHVzZSBmb3IgY2FsY3VsYXRpbmcgbG9vayBzcGVlZFxuY29uc3QgTWF4RGVsdGEgPSAxMDAgLyAzO1xuXG4vKipcbiAqIFBvaW50T2ZJbnRlcmVzdCBjb250cm9scyB0aGUgZ2F6ZSBkaXJlY3Rpb24gb2YgdGhlIGhvc3QuIEdpdmVuIG9uZSBvciBtb3JlXG4gKiBhbmltYXRpb25zIG9mIHR5cGUgQmxlbmQyZFN0YXRlLCBpdCBjYWxjdWxhdGVzIHRoZSBhbmdsZXMgYmV0d2VlbiB0aGUgbG9va1RyYWNrZXJcbiAqIG9iamVjdCAoZ2VuZXJhbGx5IGEgam9pbnQgaW4gdGhlIGhvc3QncyBza2VsZXRvbikgYW5kIHRoZSBsb29rVGFyZ2V0ICh0aGUgb2JqZWN0XG4gKiB0aGUgaG9zdCBzaG91bGQgbG9vayBhdCkgYW5kIGRyaXZlcyB0aGUgbWFuYWdlZCBCbGVuZDJkU3RhdGVzJyBYIGFuZCBZIGJsZW5kXG4gKiB2YWx1ZXMgdXNpbmcgdGhlIHJlc3VsdC4gWW91IGNhbiBvcHRpb25hbGx5IGFkZCBzYWNjYWRpYyBtb3ZlbWVudCB0byBhbnkgbWFuYWdlZFxuICogYW5pbWF0aW9uIHRvIGhlbHAgbWFrZSB0aGUgaG9zdCdzIGV5ZXMgYXBwZWFyIGFsaXZlIHdoZW4gZm9jdXNlZCBvbiB0aGUgc2FtZVxuICogcG9pbnQgZm9yIGV4dGVkZWQgcGVyaW9kcyBvZiB0aW1lLiBJZiBibGluayBhbmltYXRpb25zIGFyZSBzcGVjaWZpZWQsIGEgYmxpbmtcbiAqIHdpbGwgYmUgcGxheWVkIGR1cmluZyBsYXJnZSBjaGFuZ2VzIGluIGdhemUgZGlyZWN0aW9uLlxuICpcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcbiAqIEBhbGlhcyBjb3JlL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmVcbiAqIEBpbXBsZW1lbnRzIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlXG4gKiBAaW1wbGVtZW50cyBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2VcbiAqL1xuY2xhc3MgUG9pbnRPZkludGVyZXN0RmVhdHVyZSBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmUubWl4KFxuICBTU01MU3BlZWNobWFya0ludGVyZmFjZS5NaXhpbixcbiAgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLk1peGluXG4pIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgZmVhdHVyZS5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSB0YXJnZXQgLSAzRCB0cmFuc2Zvcm1hdGlvbiBub2RlIHRoYXQgdGhlIGhvc3Qgc2hvdWxkIHRyeSB0b1xuICAgKiBsb29rIGF0LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucy5sb29rVHJhY2tlciAtIDNEIHRyYW5zZm9ybWF0aW9uIG5vZGUgdGhhdCByZXByZXNlbnRzXG4gICAqIHRoZSBkaXJlY3Rpb24gdGhlIGhvc3QgaXMgY3VycmVudGx5IGxvb2tpbmcgZHVyaW5nIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zLnNjZW5lIC0gRW5naW5lLXNwZWNpZmljIHNjZW5lIG9iamVjdCB0aGF0IGNvbnRhaW5zXG4gICAqIHRoZSBob3N0LiBUaGlzIG9iamVjdCBtdXN0IGJlIGRlZmluZWQgaWYgdXNpbmcgJ3NldFRhcmdldEJ5TmFtZScgb3IgJ1NldFRhcmdldEJ5SWQnXG4gICAqIG1ldGhvZHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gbG9va09wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgbG9vayBhbmltYXRpb24gbGF5ZXJzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xvb2tPcHRpb25zLmJsZW5kVGltZT0wLjFdIC0gRGVmYXVsdCBhbW91bnQgb2YgdGltZSBpdCB3aWxsXG4gICAqIHRha2UgdG8gbWFuaXB1bGF0ZSB0aGUgd2VpZ2h0cyBvZiB0aGUgbG9vayBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbG9va09wdGlvbnMuZWFzaW5nRm49UXVhZHJhdGljLkluT3V0XSAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uXG4gICAqIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyBsb29rIGxheWVyIHdlaWdodHMuXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtsb29rT3B0aW9ucy5sYXllcnM9W11dIC0gQW4gYXJyYXkgb2YgbGF5ZXIgb3B0aW9uc1xuICAgKiBvYmplY3RzIHRvIHJlZ2lzdGVyIGFzIGxvb2sgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge09iamVjdD19IGJsaW5rT3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBibGluayBhbmltYXRpb24gbGF5ZXJzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2JsaW5rT3B0aW9ucy5ibGVuZFRpbWU9MC4wNzVdIC0gRGVmYXVsdCBhbW91bnQgb2YgdGltZSBpdFxuICAgKiB3aWxsIHRha2UgdG8gbWFuaXB1bGF0ZSB0aGUgd2VpZ2h0cyBvZiB0aGUgYmxpbmsgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2JsaW5rT3B0aW9ucy5lYXNpbmdGbj1RdWFkcmF0aWMuSW5PdXRdIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb25cbiAgICogdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIGJsaW5rIGxheWVyIHdlaWdodHMuXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtibGlua09wdGlvbnMubGF5ZXJzPVtdXSAtIEFuIGFycmF5IG9mIGxheWVyIG9wdGlvbnNcbiAgICogb2JqZWN0cyB0byByZWdpc3RlciBhcyBibGluayBsYXllcnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBob3N0LFxuICAgIHtcbiAgICAgIHRhcmdldCxcbiAgICAgIGxvb2tUcmFja2VyLFxuICAgICAgc2NlbmVcbiAgICB9ID0ge30sXG4gICAge1xuICAgICAgYmxlbmRUaW1lOiBsb29rQmxlbmRUaW1lID0gMC4xLFxuICAgICAgZWFzaW5nRm46IGxvb2tFYXNpbmdGbiA9IFF1YWRyYXRpYy5Jbk91dCxcbiAgICAgIGxheWVyczogbG9va0xheWVycyA9IFtdLFxuICAgIH0gPSB7fSxcbiAgICB7XG4gICAgICBibGVuZFRpbWU6IGJsaW5rQmxlbmRUaW1lID0gMC4wNzUsXG4gICAgICBlYXNpbmdGbjogYmxpbmtFYXNpbmdGbiA9IFF1YWRyYXRpYy5Jbk91dCxcbiAgICAgIGxheWVyczogYmxpbmtMYXllcnMgPSBbXSxcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgc3VwZXIoaG9zdCk7XG5cbiAgICBpZiAoIXRoaXMuY29uc3RydWN0b3IuX3ZhbGlkYXRlVHJhbnNmb3JtT2JqZWN0KGxvb2tUcmFja2VyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaW5pdGlhbGl6ZSBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIG9uIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTG9va1RyYWNrZXIgbXVzdCBiZSBkZWZpbmVkIGFzIGEgdmFsaWQgdHJhbnNmb3JtYXRpb24gb2JqZWN0LmApO1xuICAgIH1cbiAgICB0aGlzLl9sb29rVHJhY2tlciA9IGxvb2tUcmFja2VyO1xuXG4gICAgdGhpcy5fc2NlbmUgPSBzY2VuZTtcbiAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQgfHwgbnVsbDtcbiAgICB0aGlzLl9wcmV2VGFyZ2V0UG9zID0gWzAsIDAsIDBdO1xuICAgIHRoaXMuX2lzVGFyZ2V0TW92aW5nID0gZmFsc2U7XG4gICAgdGhpcy5fbG9va0xheWVycyA9IHRoaXMuX2xvb2tMYXllcnMgfHwge307XG4gICAgdGhpcy5fdHJhY2tpbmdDb25maWdzID0gdGhpcy5fdHJhY2tpbmdDb25maWdzIHx8IFtdO1xuICAgIHRoaXMuX2JsaW5rTGF5ZXJzID0gdGhpcy5fYmxpbmtMYXllcnMgfHwge307XG5cbiAgICAvLyBSZWdpc3RlciB0aGUgbG9vayBsYXllcnNcbiAgICBsb29rTGF5ZXJzLmZvckVhY2goKHtcbiAgICAgIG5hbWUsXG4gICAgICBhbmltYXRpb24sXG4gICAgICBtYXhTcGVlZCxcbiAgICAgIHJlZmVyZW5jZSxcbiAgICAgIGZvcndhcmRBeGlzLFxuICAgICAgaGFzU2FjY2FkZSxcbiAgICAgIGJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuXG4gICAgfSkgPT4ge1xuICAgICAgdGhpcy5yZWdpc3Rlckxvb2tMYXllcihuYW1lLCB7XG4gICAgICAgIGFuaW1hdGlvbixcbiAgICAgICAgbWF4U3BlZWQsXG4gICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgZm9yd2FyZEF4aXMsXG4gICAgICAgIGhhc1NhY2NhZGUsXG4gICAgICAgIGJsZW5kVGltZTogYmxlbmRUaW1lICE9PSB1bmRlZmluZWQgPyBibGVuZFRpbWUgOiBsb29rQmxlbmRUaW1lLFxuICAgICAgICBlYXNpbmdGbjogZWFzaW5nRm4gIT09IHVuZGVmaW5lZCA/IGVhc2luZ0ZuIDogbG9va0Vhc2luZ0ZuLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBSZWdpc3RlciB0aGUgYmxpbmsgbGF5ZXJzXG4gICAgYmxpbmtMYXllcnMuZm9yRWFjaCgoeyBuYW1lLCBhbmltYXRpb24sIGJsZW5kVGltZSwgZWFzaW5nRm4gfSkgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlckJsaW5rTGF5ZXIobmFtZSwge1xuICAgICAgICBhbmltYXRpb24sXG4gICAgICAgIGJsZW5kVGltZTogYmxlbmRUaW1lICE9PSB1bmRlZmluZWQgPyBibGVuZFRpbWUgOiBibGlua0JsZW5kVGltZSxcbiAgICAgICAgZWFzaW5nRm46IGVhc2luZ0ZuICE9PSB1bmRlZmluZWQgPyBlYXNpbmdGbiA6IGJsaW5rRWFzaW5nRm4sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB0YXJnZXQgb2JqZWN0IHRoZSBob3N0IHNob3VsZCBsb29rIGF0LlxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fG51bGx9XG4gICAqL1xuICBnZXQgdGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLl90YXJnZXQ7XG4gIH1cblxuICBzZXQgdGFyZ2V0KHRhcmdldCkge1xuICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldCB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGdsb2JhbCBwb3NpdGlvbiBvZiBhbiBvYmplY3QuIFNob3VsZCBiZVxuICAgKiBvdmVybG9hZGVkIGZvciBlYWNoIHJlbmRlcmluZyBlbmdpbmUgaW1wbGVtZW50YXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBfb2JqIC0gRW5naW5lLXNwZWNpZmljIDNEIHRyYW5zZm9ybSBvYmplY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBjb25zaXN0aW5nIG9mIHRocmVlIG51bWJlcnMgcmVwcmVzZW50aW5nXG4gICAqIHgsIHkgYW5kIHogY29vcmRpbmF0ZXMuXG4gICAqL1xuICBzdGF0aWMgX2dldFdvcmxkUG9zaXRpb24ob2JqKSB7XG4gICAgcmV0dXJuIFswLCAwLCAwXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtYXRyaXggcmVwcmVzZW50aW5nIHRoZSBnbG9iYWwgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIGFuIG9iamVjdC5cbiAgICogU2hvdWxkIGJlIG92ZXJsb2FkZWQgZm9yIGVhY2ggcmVuZGVyaW5nIGVuZ2luZSBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IG9iaiAtIEVuZ2luZS1zcGVjaWZpYyAzRCB0cmFuc2Zvcm0gb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQW4gYXJyYXkgY29uc2lzdGluZyBvZiAxNiBudW1iZXJzIHJlcHJlc2VudGluZ1xuICAgKiB0aGUgM2QgdHJhbnNmb3JtYXRpb24uXG4gICAqL1xuICBzdGF0aWMgX2dldFdvcmxkTWF0cml4KG9iaikge1xuICAgIHJldHVybiBbMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMV07XG4gIH1cblxuICAvKipcbiAgICogUm90YXRlIHRoZSBnaXZlbiBsb2NhbCBkaXJlY3Rpb24gdmVjdG9yIGJ5IHRoZSBvYmplY3QncyB3b3JsZCByb3RhdGlvbiBtYXRyaXguXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBvYmogLSBFbmdpbmUtc3BlY2lmaWMgM0QgdHJhbnNmb3JtIG9iamVjdC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gZm9yd2FyZFZlY3RvciAtIFVuaXQgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgbG9jYWxcbiAgICogZm9yd2FyZCBkaXJlY3Rpb24gb2YgdGhlIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fVxuICAgKi9cbiAgc3RhdGljIF9nZXRPYmplY3REaXJlY3Rpb24ob2JqLCBmb3J3YXJkVmVjdG9yID0gQXhpc01hcC5Qb3NpdGl2ZVopIHtcbiAgICBjb25zdCByb3RhdGlvbiA9IE1hdGhVdGlscy5nZXRSb3RhdGlvbk1hdHJpeCh0aGlzLl9nZXRXb3JsZE1hdHJpeChvYmopKTtcblxuICAgIHJldHVybiBNYXRoVXRpbHMucm90YXRlVmVjdG9yKGZvcndhcmRWZWN0b3IsIHJvdGF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgbG9vayBhbmdsZXMgaW4gZGVncmVlcyBnaXZlbiBzcGhlcmljYWwgdGhldGFcbiAgICogYW5kIHBoaSBhbmdsZXMgaW4gcmFkaWFucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRoZXRhIC0gVmVydGljYWwvcG9sYXIgYW5nbGUgaW4gcmFkaWFucyB3aGVyZSAwIHBvaW50cyBkaXJlY3RseVxuICAgKiBhbG9uZyBwb3NpdGl2ZSBZIGF4aXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaGkgLSBIb3Jpem9udGFsL2F6aW11dGhhbCBhbmdsZSBpbiByYWRpYW5zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSAtIEFuIG9iamVjdCB3aXRoIHRoZSBzaWduYXR1cmUge2g6IG51bWJlciwgdjogbnVtYmVyfSB3aGVyZVxuICAgKiBoIHJlcHJlc2VudHMgaG9yaXpvbnRhbCByb3RhdGlvbiBpbiBkZWdyZWVzIGFuZCB2IHJlcHJlc2VudHMgdmVydGljYWwgcm90YXRpb25cbiAgICogaW4gZGVncmVlcy5cbiAgICovXG4gIHN0YXRpYyBfc3BoZXJpY2FsVG9CbGVuZFZhbHVlKHRoZXRhLCBwaGkpIHtcbiAgICBjb25zdCBoID0gTWF0aFV0aWxzLnRvRGVncmVlcyhwaGkpO1xuXG4gICAgLy8gT2Zmc2V0IHRoZSB2ZXJ0aWNhbCBhbmdsZSBzbyAwIGlzIHBvaW50aW5nIGZvcndhcmQgaW5zdGVhZCBvZiB1cFxuICAgIGNvbnN0IHYgPSBNYXRoVXRpbHMudG9EZWdyZWVzKHRoZXRhKSAtIDkwO1xuXG4gICAgLy8gQ29udmVydCB2ZXJ0aWNhbCBhbmdsZSB0byAtMTgwLCAxODAgcmFuZ2VcbiAgICByZXR1cm4geyBoLCB2IH1cbiAgfVxuXG4gIF9vbkxheWVyQWRkZWQoeyBuYW1lIH0pIHtcbiAgICB0aGlzLl9sb29rTGF5ZXJzID0gdGhpcy5fbG9va0xheWVycyB8fCB7fTtcbiAgICB0aGlzLl9ibGlua0xheWVycyA9IHRoaXMuX2JsaW5rTGF5ZXJzIHx8IHt9O1xuXG4gICAgc3VwZXIuX29uTGF5ZXJBZGRlZCh7IG5hbWUgfSk7XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgbG9vayBhbmltYXRpb25cbiAgICBpZiAodGhpcy5fbG9va0xheWVyc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9yZWdpc3Rlckxvb2tBbmltYXRpb24obmFtZSwgdGhpcy5fbG9va0xheWVyc1tuYW1lXSk7XG4gICAgfVxuICB9XG5cbiAgX29uQW5pbWF0aW9uQWRkZWQoeyBsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUgfSkge1xuICAgIHRoaXMuX2xvb2tMYXllcnMgPSB0aGlzLl9sb29rTGF5ZXJzIHx8IHt9O1xuICAgIHRoaXMuX2JsaW5rTGF5ZXJzID0gdGhpcy5fYmxpbmtMYXllcnMgfHwge307XG5cbiAgICBzdXBlci5fb25BbmltYXRpb25BZGRlZCh7IGxheWVyTmFtZSB9KTtcblxuICAgIC8vIFZhbGlkYXRlIHRoZSBsb29rIGFuaW1hdGlvblxuICAgIGlmICh0aGlzLl9sb29rTGF5ZXJzW2xheWVyTmFtZV0gPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyTG9va0FuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgdGhhdCByZWdpc3RlcmVkIGxvb2sgYW5pbWF0aW9ucyBhcmUgQmxlbmQyZFN0YXRlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGxvb2sgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbi5cbiAgICovXG4gIF9yZWdpc3Rlckxvb2tBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKSB7XG4gICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIEFuaW1hdGlvblR5cGVzW3RoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25UeXBlKFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgICldICE9PSBBbmltYXRpb25UeXBlcy5ibGVuZDJkXG4gICAgICApIHtcbiAgICAgICAgLy8gV2FybiBhbmQgZGVhY3RpdmF0ZSBpZiB0aGUgcmVnaXN0ZXJlZCBzdGF0ZSBpcyBub3QgYmxlbmQyZFxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYENhbm5vdCByZWdpc3RlciBQb2ludCBvZiBJbnRlcmVzdCBsb29rIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBMb29rIGFuaW1hdGlvbnMgbXVzdCBiZSBvZiB0eXBlICdibGVuZDJkJy5gXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW1xuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcbiAgICAgICAgXS5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gb2JqZWN0IGlzIG5vdCBvZiBhbiBlbmdpbmUtc3BlY2lmaWMgdHlwZS4gU2hvdWxkXG4gICAqIGJlIG92ZXJsb2FkZWQgZm9yIGVhY2ggcmVuZGVyaW5nIGVuZ2luZSBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IG9iaiAtIE9iamVjdCB0byB2YWxpZGF0ZS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgX3ZhbGlkYXRlVHJhbnNmb3JtT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBPYmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gc3RvcmVkIGFzIGEgdHJhY2tpbmdcbiAgICogY29uZmlnLiBJZiBpdCBoYXMsIHJldHVybiB0aGUgc3RvcmVkIGNvbmZpZ3VyYXRpb24uIE90aGVyd2lzZSwgc3RvcmUgYW5kXG4gICAqIHJldHVybiBpdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIE9iamVjdCBjb250YWluaW5nIHRyYWNrZXIsIHJlZmVyZW5jZSBhbmQgZm9yd2FyZEF4aXNcbiAgICogcHJvcGVydGllcy5cbiAgICpcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIF9hZGRUcmFja2luZ0NvbmZpZyhjb25maWcpIHtcbiAgICBjb25zdCB0cmFja2luZ0NvbmZpZyA9IHRoaXMuX3RyYWNraW5nQ29uZmlncy5maW5kKGMgPT5cbiAgICAgIGMucmVmZXJlbmNlID09PSBjb25maWcucmVmZXJlbmNlICYmIGMuZm9yd2FyZEF4aXMgPT09IGNvbmZpZy5mb3J3YXJkQXhpc1xuICAgICk7XG5cbiAgICBpZiAodHJhY2tpbmdDb25maWcpIHtcbiAgICAgIHJldHVybiB0cmFja2luZ0NvbmZpZztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnLmFuZ2xlcyA9IHsgaDogMCwgdjogMCB9O1xuICAgICAgY29uZmlnLnByZXZBbmdsZXMgPSB7IGg6IDAsIHY6IDAgfTtcbiAgICAgIHRoaXMuX3RyYWNraW5nQ29uZmlncy5wdXNoKGNvbmZpZyk7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGxvb2sgdHJhY2tlciBhbmQgdGhlIGxvb2sgdGFyZ2V0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgX2dldFRhcmdldERpc3RhbmNlKCkge1xuICAgIC8vIEZpbmQgdGhlIHZlY3RvciBiZXR3ZWVuIHRoZSBnbG9iYWwgcG9zaXRpb25zIG9mIHRyYWNrZXIgYW5kIHRhcmdldFxuICAgIGNvbnN0IHNvdXJjZVBvc2l0aW9uID0gdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0V29ybGRQb3NpdGlvbih0aGlzLl9sb29rVHJhY2tlcik7XG4gICAgY29uc3QgdGFyZ2V0UG9zaXRpb24gPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXRXb3JsZFBvc2l0aW9uKHRoaXMuX3RhcmdldCk7XG4gICAgY29uc3QgbG9va1ZlY3RvciA9IFtcbiAgICAgIHRhcmdldFBvc2l0aW9uWzBdIC0gc291cmNlUG9zaXRpb25bMF0sXG4gICAgICB0YXJnZXRQb3NpdGlvblsxXSAtIHNvdXJjZVBvc2l0aW9uWzFdLFxuICAgICAgdGFyZ2V0UG9zaXRpb25bMl0gLSBzb3VyY2VQb3NpdGlvblsyXVxuICAgIF07XG5cbiAgICByZXR1cm4gTWF0aFV0aWxzLmdldFZlY3Rvck1hZ25pdHVkZShsb29rVmVjdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBhbGwgc3RvcmVkIHRyYWNraW5nIGFuZ2xlcyB0byAwLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc2V0TG9va0FuZ2xlcygpIHtcbiAgICB0aGlzLl90cmFja2luZ0NvbmZpZ3MuZm9yRWFjaCgoeyBhbmdsZXMgfSkgPT4ge1xuICAgICAgYW5nbGVzLmggPSAwO1xuICAgICAgYW5nbGVzLnYgPSAwO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIHRoZSBkaWZmZXJlbmNlIGluIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHJvdGF0aW9uIGZvciB0aGUgdHJhY2tlcidzXG4gICAqIHJlZmVyZW5jZSByb3RhdGlvbiBhbmQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgdGFyZ2V0IGZyb20gdGhlIHRyYWNrZXIuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc2V0TG9va0FuZ2xlcygpIHtcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgcG9zaXRpb25zIG9mIHRoZSB0cmFja2VyIGFuZCB0YXJnZXQgb2JqZWN0c1xuICAgIGNvbnN0IHRhcmdldFBvcyA9IHRoaXMuY29uc3RydWN0b3IuX2dldFdvcmxkUG9zaXRpb24odGhpcy5fdGFyZ2V0KTtcbiAgICBjb25zdCB0cmFja2VyUG9zID0gdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0V29ybGRQb3NpdGlvbih0aGlzLl9sb29rVHJhY2tlcik7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFyZ2V0IGhhcyBtb3ZlZFxuICAgIHRoaXMuX2lzVGFyZ2V0TW92aW5nID0gTWF0aFV0aWxzLmdldFZlY3Rvck1hZ25pdHVkZShbXG4gICAgICB0YXJnZXRQb3NbMF0gLSB0aGlzLl9wcmV2VGFyZ2V0UG9zWzBdLFxuICAgICAgdGFyZ2V0UG9zWzFdIC0gdGhpcy5fcHJldlRhcmdldFBvc1sxXSxcbiAgICAgIHRhcmdldFBvc1syXSAtIHRoaXMuX3ByZXZUYXJnZXRQb3NbMl1dXG4gICAgKSA+IDA7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wcmV2VGFyZ2V0UG9zLCB0YXJnZXRQb3MpO1xuXG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFuZ2xlcyB0byByb3RhdGUgdG8gdGhlIHRhcmdldFxuICAgIGNvbnN0IHRhcmdldFNwaGVyaWNhbCA9IE1hdGhVdGlscy5jYXJ0ZXNpYW5Ub1NwaGVyaWNhbChcbiAgICAgIHRhcmdldFBvc1swXSAtIHRyYWNrZXJQb3NbMF0sXG4gICAgICB0YXJnZXRQb3NbMV0gLSB0cmFja2VyUG9zWzFdLFxuICAgICAgdGFyZ2V0UG9zWzJdIC0gdHJhY2tlclBvc1syXVxuICAgICk7XG4gICAgY29uc3QgdGFyZ2V0QW5nbGVzID0gdGhpcy5jb25zdHJ1Y3Rvci5fc3BoZXJpY2FsVG9CbGVuZFZhbHVlKFxuICAgICAgdGFyZ2V0U3BoZXJpY2FsWzFdLFxuICAgICAgdGFyZ2V0U3BoZXJpY2FsWzJdXG4gICAgKTtcblxuICAgIC8vIENhbGN1bGF0ZSBhbmdsZXMgcmVsYXRpdmUgdG8gdGhlIHJlZmVyZW5jZSBvYmplY3RzXG4gICAgdGhpcy5fdHJhY2tpbmdDb25maWdzLmZvckVhY2goKHtcbiAgICAgIHJlZmVyZW5jZSxcbiAgICAgIGZvcndhcmRBeGlzLFxuICAgICAgYW5nbGVzXG4gICAgfSkgPT4ge1xuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBhbmdsZXMgdG8gcm90YXRlIHRvIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHRyYWNrZXJcbiAgICAgIGNvbnN0IHJlZkRpcmVjdGlvbiA9IHRoaXMuY29uc3RydWN0b3IuX2dldE9iamVjdERpcmVjdGlvbihcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmb3J3YXJkQXhpcyxcbiAgICAgICk7XG4gICAgICBjb25zdCByZWZTcGhlcmljYWwgPSBNYXRoVXRpbHMuY2FydGVzaWFuVG9TcGhlcmljYWwoLi4ucmVmRGlyZWN0aW9uKTtcbiAgICAgIGNvbnN0IHJlZkFuZ2xlcyA9IHRoaXMuY29uc3RydWN0b3IuX3NwaGVyaWNhbFRvQmxlbmRWYWx1ZShcbiAgICAgICAgcmVmU3BoZXJpY2FsWzFdLFxuICAgICAgICByZWZTcGhlcmljYWxbMl1cbiAgICAgICk7XG5cbiAgICAgIC8vIFN0b3JlIHRoZSBkaWZmZXJlbmNlXG4gICAgICBhbmdsZXMuaCA9IHRhcmdldEFuZ2xlcy5oIC0gcmVmQW5nbGVzLmg7XG4gICAgICBhbmdsZXMudiA9IHRhcmdldEFuZ2xlcy52IC0gcmVmQW5nbGVzLnY7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBhbmdsZXMgaXQgd291bGQgcmVxdWlyZSB0byBzaW11bGF0ZSBsb29raW5nXG4gICAqIGF0IHRoZSBnaXZlbiB0eXBlIG9mIGZhY2UgdGFyZ2V0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0YXJnZXRUeXBlIC0gSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIEZhY2VUYXJnZXRUeXBlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fS0gQW4gb2JqZWN0IHdpdGggc2lnbmF0dXJlIHtyOiBudW1iZXIsIGg6IG51bWJlciwgdjogbnVtYmVyfVxuICAgKiB3aGVyZSAncicgcmVwcmVzZW50cyByYWRpdXMsIGggcmVwcmVzZW50cyB0aGUgaG9yaXpvbnRhbC9hemltdXRoYWwgYW5nbGUgYW5kXG4gICAqIHYgcmVwcmVzZW50cyB0aGUgdmVydGljYWwvcG9sYXIgYW5nbGUuXG4gICAqL1xuICBfZ2V0RmFjZVRhcmdldEFuZ2xlcyh0YXJnZXRUeXBlKSB7XG4gICAgLy8gTm8gb2Zmc2V0IHdoZW4gdGhlIHRhcmdldCBpcyB0aGUgY2VudGVyIG9mIHRoZSBleWVzXG4gICAgaWYgKHRhcmdldFR5cGUgPT09IDApIHtcbiAgICAgIHJldHVybiB7IGg6IDAsIHY6IDAgfTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBhIHZlY3RvciB0byB0aGUgZmFjZSB0YXJnZXQgdHlwZSB1c2luZyB0aGUgY3VycmVudCBkaXN0YW5jZSB0byB0aGUgdGFyZ2V0XG4gICAgY29uc3QgZGlzdGFuY2UgPSB0aGlzLl9nZXRUYXJnZXREaXN0YW5jZSh0aGlzLl9sb29rVHJhY2tlcik7XG4gICAgY29uc3QgZmFjZVZlY3RvciA9IFsuLi5GYWNlVmVjdG9yc1t0YXJnZXRUeXBlXV07XG4gICAgZmFjZVZlY3RvclsyXSA9IGRpc3RhbmNlO1xuICAgIGNvbnN0IHNwaGVyaWNhbCA9IE1hdGhVdGlscy5jYXJ0ZXNpYW5Ub1NwaGVyaWNhbCguLi5mYWNlVmVjdG9yKTtcblxuICAgIC8vIE1ha2Ugc3VyZSB2YWx1ZXMgYXJlIGNsYW1wZWQgd2l0aGluIHRoZSByYW5nZSBvZiBtb3Rpb24gb2YgdGhlIGh1bWFuIGV5ZSwgaW4gY2FzZSB0aGUgdGFyZ2V0IGlzIHZlcnkgY2xvc2VcbiAgICBjb25zdCBibGVuZFZhbHVlcyA9IHRoaXMuY29uc3RydWN0b3IuX3NwaGVyaWNhbFRvQmxlbmRWYWx1ZShzcGhlcmljYWxbMV0sIHNwaGVyaWNhbFsyXSk7XG4gICAgYmxlbmRWYWx1ZXMuaCA9IE1hdGhVdGlscy5jbGFtcChibGVuZFZhbHVlcy5oLCAtMzUsIDM1KTtcbiAgICBibGVuZFZhbHVlcy52ID0gTWF0aFV0aWxzLmNsYW1wKGJsZW5kVmFsdWVzLnYsIC0yNSwgMzApO1xuXG4gICAgcmV0dXJuIGJsZW5kVmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZWQgdGhlIHN0b3JlZCBzcGVlZCBhbmQgZHVyYXRpb24gdmFyaWFibGVzIGZvciBhIGxheWVyIGJhc2VkIG9uIHRoZVxuICAgKiBjaGFuZ2UgaW4gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYW5nbGVzIG9mIHRoZSB0cmFja2VyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gc3RvcmUgdmFsdWVzIG9uLlxuICAgKiBAcGFyYW0ge251bWJlcn0gaCAtIENoYW5nZSBpbiBob3Jpem9udGFsIGFuZ2xlLCBpbiBkZWdyZWVzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdiAtIENoYW5nZSBpbiB2ZXJ0aWNhbCBhbmdsZSwgaW4gZGVncmVlcy5cbiAgICovXG4gIF91cGRhdGVMYXllclNwZWVkKGxheWVyTmFtZSwgaCwgdikge1xuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xuXG4gICAgLy8gRnJvbSBcIlJlYWxpc3RpYyBBdmF0YXIgYW5kIGhlYWQgQW5pbWF0aW9uIFVzaW5nIGEgTmV1cm9iaW9sb2dpY2FsIE1vZGVsIG9mIFZpc3VhbCBBdHRlbnRpb25cIiwgSXR0aSwgRGhhdmFsZSwgUGlnaGluXG4gICAgbGF5ZXIubWF4SFNwZWVkID0gNDczICogKDEgLSBNYXRoLmV4cCgtaCAvIDcuOCkpO1xuICAgIGxheWVyLm1heFZTcGVlZCA9IDQ3MyAqICgxIC0gTWF0aC5leHAoLXYgLyA3LjgpKTtcblxuICAgIC8vIEZyb20gXCJFeWVzIEFsaXZlXCIsIExlZSwgQmFkbGVyXG4gICAgY29uc3QgRDAgPSAwLjAyNTtcbiAgICBjb25zdCBkID0gMC4wMDIzNTtcbiAgICBsYXllci5oRHVyYXRpb24gPSBEMCArIGQgKiBoO1xuICAgIGxheWVyLnZEdXJhdGlvbiA9IEQwICsgZCAqIHY7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBtaWNyb1NhY2NhZGUgb2JqZWN0IHdpdGggbmV3IHJhbmRvbWl6ZWQgdmFsdWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBzYWNjYWRlIG1vdGlvbi5cbiAgICovXG4gIF9zZXRNaWNyb1NhY2NhZGUobGF5ZXJOYW1lKSB7XG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG4gICAgY29uc3QgeyBtaWNyb1NhY2NhZGUgfSA9IGxheWVyO1xuXG4gICAgaWYgKHRoaXMuX3RhcmdldCkge1xuICAgICAgLy8gTWljcm8gbW92ZW1lbnRzIHNob3VsZCBiZSBzbWFsbGVyIHdoZW4gZm9jdXNlZCBvbiBhIHRhcmdldFxuICAgICAgbWljcm9TYWNjYWRlLmggPSBVdGlscy5nZXRSYW5kb21GbG9hdCguMDEsIC4xNSk7XG4gICAgICBtaWNyb1NhY2NhZGUudiA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wMSwgLjE1KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTWljcm9zYWNjYWRlcy4gRW5jeWNsb3BlZGlhIG9mIE5ldXJvc2NpZW5jZS4gKDIwMDkpIFNwcmluZ2VyLCBCZXJsaW4sIEhlaWRlbGJlcmcuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDA3Lzk3OC0zLTU0MC0yOTY3OC0yXzM0OTJcbiAgICAgIG1pY3JvU2FjY2FkZS5oID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjAxLCAuMyk7XG4gICAgICBtaWNyb1NhY2NhZGUudiA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wMSwgLjMpO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUxheWVyU3BlZWQobGF5ZXJOYW1lLCBtaWNyb1NhY2NhZGUuaCwgbWljcm9TYWNjYWRlLnYpO1xuXG4gICAgLy8gUmVzdGFydCB0aGUgdGltZXJcbiAgICB0aGlzLl9pbml0aWFsaXplTWljcm9UaW1lcihsYXllck5hbWUsIC4uLk1pY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBtYWNyb1NhY2NhZGUgb2JqZWN0IHdpdGggbmV3IHJhbmRvbWl6ZWQgdmFsdWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBzYWNjYWRlIG1vdGlvbi5cbiAgICovXG4gIF9zZXRNYWNyb1NhY2NhZGUobGF5ZXJOYW1lKSB7XG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG4gICAgY29uc3QgeyBtYWNyb1NhY2NhZGUgfSA9IGxheWVyO1xuICAgIGxldCBtYWNyb1NhY2NhZGVXYWl0UmFuZ2U7XG5cbiAgICAvLyBJbmNyZWFzZSByYW5kb20gdmFsdWUgcmFuZ2Ugd2hlbiBub3QgZm9jdXNlZCBvbiBhIHRhcmdldFxuICAgIGlmICghdGhpcy5fdGFyZ2V0KSB7XG4gICAgICBtYWNyb1NhY2NhZGVXYWl0UmFuZ2UgPSBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmRlZmF1bHQ7XG5cbiAgICAgIC8vIE5vcm1hbCBodW1hbiBob3Jpem9udGFsIGV5ZSByb3RhdGlvbiBsaW1pdCBpcyBhYm91dCAzNSBkZWdyZWVzXG4gICAgICBjb25zdCBoTGltaXQgPSBVdGlscy5nZXRSYW5kb21GbG9hdCguMTQzLCAuMjg2KTtcbiAgICAgIGNvbnN0IGhGYWN0b3IgPSBVdGlscy5nZXRSYW5kb21GbG9hdCgtaExpbWl0LCBoTGltaXQpO1xuICAgICAgbWFjcm9TYWNjYWRlLmggPSBoRmFjdG9yICogMzU7XG5cbiAgICAgIC8vIE5vcm1hbCBodW1hbiB2ZXJ0aWNhbCBleWUgcm90YXRpb24gbGltaXQgaXMgYWJvdXQgMjUgZGVncmVlcyB1cHdhcmQgYW5kIDMwIGRlZ3JlZXMgZG93bndhcmRcbiAgICAgIGNvbnN0IHZMaW1pdCA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wOTMsIC4xODYpO1xuICAgICAgY29uc3QgdkZhY3RvciA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC12TGltaXQsIHZMaW1pdCk7XG4gICAgICBtYWNyb1NhY2NhZGUudiA9IHZGYWN0b3IgPiAwID8gdkZhY3RvciAqIDI1IDogdkZhY3RvciAqIDMwO1xuICAgIH1cblxuICAgIC8vIFBpY2sgYSBuZXcgZmFjZSB0YXJnZXRcbiAgICBlbHNlIHtcbiAgICAgIC8vIFNvY2lhbCB0cmlhbmdsZSAtIHNhY2NhZGUgYmV0d2VlbiBleWVzIGFuZCBtb3V0aCwgd2VpZ2h0ZWQgdG8gbG9vayBhdCBleWVzIG1vcmUgb2Z0ZW5cbiAgICAgIHN3aXRjaCAobGF5ZXIuc2FjY2FkZVRhcmdldCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5leWVUYXJnZXQ7XG4gICAgICAgICAgbGF5ZXIuc2FjY2FkZVRhcmdldCA9IE1hdGgucmFuZG9tKCkgPCAwLjc1ID8gRmFjZVRhcmdldFR5cGVzLkV5ZVJpZ2h0XG4gICAgICAgICAgICA6IEZhY2VUYXJnZXRUeXBlcy5Nb3V0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZXllVGFyZ2V0O1xuICAgICAgICAgIGxheWVyLnNhY2NhZGVUYXJnZXQgPSBNYXRoLnJhbmRvbSgpIDwgMC43NSA/IEZhY2VUYXJnZXRUeXBlcy5FeWVMZWZ0XG4gICAgICAgICAgICA6IEZhY2VUYXJnZXRUeXBlcy5Nb3V0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMubW91dGhUYXJnZXQ7XG4gICAgICAgICAgbGF5ZXIuc2FjY2FkZVRhcmdldCA9IE1hdGgucmFuZG9tKCkgPCAwLjUgPyBGYWNlVGFyZ2V0VHlwZXMuRXllTGVmdFxuICAgICAgICAgICAgOiBGYWNlVGFyZ2V0VHlwZXMuRXllUmlnaHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBtYWNyb1NhY2NhZGVXYWl0UmFuZ2UgPSBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmV5ZVRhcmdldDtcbiAgICAgICAgICBsYXllci5zYWNjYWRlVGFyZ2V0ID0gTWF0aC5yYW5kb20oKSA8IDAuNSA/IEZhY2VUYXJnZXRUeXBlcy5FeWVMZWZ0XG4gICAgICAgICAgICA6IEZhY2VUYXJnZXRUeXBlcy5FeWVSaWdodDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBoLCB2IH0gPSB0aGlzLl9nZXRGYWNlVGFyZ2V0QW5nbGVzKGxheWVyLnNhY2NhZGVUYXJnZXQpO1xuICAgICAgbWFjcm9TYWNjYWRlLmggPSBoO1xuICAgICAgbWFjcm9TYWNjYWRlLnYgPSB2O1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUxheWVyU3BlZWQobGF5ZXJOYW1lLCBtYWNyb1NhY2NhZGUuaCwgbWFjcm9TYWNjYWRlLnYpO1xuXG4gICAgLy8gUmVzdGFydCB0aGUgdGltZXJzXG4gICAgdGhpcy5faW5pdGlhbGl6ZU1pY3JvVGltZXIobGF5ZXJOYW1lLCAuLi5NaWNyb1NhY2NhZGVXYWl0UmFuZ2VzLnBvc3RNYWNybyk7XG4gICAgdGhpcy5faW5pdGlhbGl6ZU1hY3JvVGltZXIobGF5ZXJOYW1lLCAuLi5tYWNyb1NhY2NhZGVXYWl0UmFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgbmV3IHdhaXQgdGltZXIgdGhhdCB3aWxsIHNldCBhIG5ldyBtaWNybyBzYWNjYWRlIG1vdmVtZW50IHdoZW4gaXRcbiAgICogcmVzb2x2ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IG93bnMgdGhlIHNhY2NhZGUgbW90aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbWluV2FpdFRpbWUgLSBNaW5pbXVtIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBhIG5ldyBzYWNjYWRlXG4gICAqIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbWF4V2FpdFRpbWUgLSBNYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBhIG5ldyBzYWNjYWRlXG4gICAqIHdpbGwgYmUgdHJpZ2dlcmVkLlxuICAgKi9cbiAgX2luaXRpYWxpemVNaWNyb1RpbWVyKGxheWVyTmFtZSwgbWluV2FpdFRpbWUsIG1heFdhaXRUaW1lKSB7XG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG4gICAgY29uc3Qgd2FpdFRpbWUgPSBVdGlscy5nZXRSYW5kb21GbG9hdChtaW5XYWl0VGltZSwgbWF4V2FpdFRpbWUpO1xuXG4gICAgaWYgKGxheWVyLm1pY3JvU2FjY2FkZVRpbWVyKSB7XG4gICAgICBsYXllci5taWNyb1NhY2NhZGVUaW1lci5jYW5jZWwoKTtcbiAgICB9XG4gICAgbGF5ZXIubWljcm9TYWNjYWRlVGltZXIgPSBVdGlscy53YWl0KHdhaXRUaW1lLCB7XG4gICAgICBvbkZpbmlzaDogKCkgPT4geyB0aGlzLl9zZXRNaWNyb1NhY2NhZGUobGF5ZXJOYW1lKSB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSBuZXcgd2FpdCB0aW1lciB0aGF0IHdpbGwgc2V0IGEgbmV3IG1hY3JvIHNhY2NhZGUgbW92ZW1lbnQgd2hlbiBpdFxuICAgKiByZXNvbHZlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgc2FjY2FkZSBtb3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW5XYWl0VGltZSAtIE1pbmltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGEgbmV3IHNhY2NhZGVcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhXYWl0VGltZSAtIE1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGEgbmV3IHNhY2NhZGVcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAqL1xuICBfaW5pdGlhbGl6ZU1hY3JvVGltZXIobGF5ZXJOYW1lLCBtaW5XYWl0VGltZSwgbWF4V2FpdFRpbWUpIHtcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBjb25zdCB3YWl0VGltZSA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KG1pbldhaXRUaW1lLCBtYXhXYWl0VGltZSk7XG5cbiAgICBpZiAobGF5ZXIubWFjcm9TYWNjYWRlVGltZXIpIHtcbiAgICAgIGxheWVyLm1hY3JvU2FjY2FkZVRpbWVyLmNhbmNlbCgpO1xuICAgIH1cbiAgICBsYXllci5tYWNyb1NhY2NhZGVUaW1lciA9IFV0aWxzLndhaXQod2FpdFRpbWUsIHtcbiAgICAgIG9uRmluaXNoOiAoKSA9PiB7IHRoaXMuX3NldE1hY3JvU2FjY2FkZShsYXllck5hbWUpIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgbmV3IHRhcmdldCB0byBsb29rIGF0LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdHxudWxsfSB0YXJnZXQgLSBUaGUgbmV3IHRhcmdldCB0byBsb29rIGF0LlxuICAgKi9cbiAgc2V0VGFyZ2V0KHRhcmdldCkge1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGFuIG9iamVjdCBnaXZlbiBpdHMgbmFtZSBhbmQgc2V0cyBpdCBhcyB0aGUgbmV3IHRhcmdldCB0byBsb29rIGF0LlxuICAgKiBTaG91bGQgYmUgb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gTmFtZSB0byBzZWFyY2ggZm9yLlxuICAgKi9cbiAgc2V0VGFyZ2V0QnlOYW1lKG5hbWUpIHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRoaXMuX3RhcmdldCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zY2VuZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUgdGFyZ2V0IHVzaW5nIG5hbWUgJHtuYW1lfSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFNjZW5lIG11c3QgYmUgZGVmaW5lZC5gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYW4gb2JqZWN0IGdpdmVuIGl0cyBpZCBhbmQgc2V0cyBpdCBhcyB0aGUgbmV3IHRhcmdldCB0byBsb29rIGF0LlxuICAgKiBTaG91bGQgYmUgb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHRhcmdldCAtIElkIHRvIHNlYXJjaCBmb3IuXG4gICAqL1xuICBzZXRUYXJnZXRCeUlkKGlkKSB7XG4gICAgaWYgKCFpZCkge1xuICAgICAgdGhpcy5fdGFyZ2V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3NjZW5lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgUG9pbnRPZkludGVyZXN0RmVhdHVyZSB0YXJnZXQgdXNpbmcgaWQgJHtpZH0gb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBTY2VuZSBtdXN0IGJlIGRlZmluZWQuYCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgb3ducyBhIGJsZW5kMmQgYW5pbWF0aW9uIHdpdGhcbiAgICogYmxlbmRXZWlnaHRzIGNvcnJlc3BvbmRpbmcgdG8gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgbG9vayBhbmdsZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBrZWVwIHRyYWNrIG9mLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgbGF5ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hbmltYXRpb24gPSAnbG9vayddIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIG9uIHRoZVxuICAgKiBsYXllciB3aG9zZSBibGVuZFdlaWdodHMgd2lsbCBiZSBkcml2ZW4gYmFzZWQgb24gdGhlIGFuZ2xlIGJldHdlZW4gdGhlIGxvb2tUcmFja2VyXG4gICAqIGFuZCB0aGUgbG9va1RhcmdldC4gVGhpcyBhbmltYXRpb24gbXVzdCBiZSBvZiB0eXBlIGJsZW5kMmQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhTcGVlZCA9IDI1XSAtIFRoZSBtYXhpbXVtIHNwZWVkIGF0IHdoaWNoIHRoZSBibGVuZDJkXG4gICAqIGJsZW5kV2VpZ2h0cyBjYW4gYmUgbWFuaXB1bGF0ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5mb3J3YXJkQXhpcyA9ICdQb3NpdGl2ZVonXSAtIEF4aXMgcG9pbnRpbmcgZnJvbSB0aGVcbiAgICogZnJvbnQgb2YgdGhlIGxvb2tSZWZlcmVuY2Ugb2JqZWN0LiBWYWxpZCBvcHRpb25zIGFyZSAnUG9zaXRpdmVYJywgJ05lZ2F0aXZlWCcsXG4gICAqICdQb3NpdGl2ZVknLCAnTmVnYXRpdmVZJywgJ1Bvc2l0aXZlWicsICdOZWdhdGl2ZVonLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMubG9va1JlZmVyZW5jZSAtIDNEIHRyYW5zZm9ybWF0aW9uIG5vZGUgdGhhdCB0aGUgbG9va1RyYWNrZXJcbiAgICogcm90YXRpb24gbGltaXRzIHNob3VsZCBiZSBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvLiBEZWZhdWx0cyB0byB0aGUgaG9zdCBvd25lci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmhhc1NhY2NhZGUgPSBmYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlXG4gICAqIHNhY2NhZGljIG1vdGlvbiBvbnRvIHRoZSBibGVuZFdlaWdodCBhbmltYXRpb24uIFRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0IHRvXG4gICAqIHRydWUgZm9yIGJsZW5kMmQgYW5pbWF0aW9ucyByZXByZXNlbnRpbmcgZXllIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXI9fSBbb3B0aW9ucy5ibGVuZFRpbWU9W1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZV17QGxpbmsgUG9pbnRPZkludGVyZXN0RmVhdHVyZSNERUZBVUxUX0xBWUVSX09QVElPTlMjYmxlbmRUaW1lfV0gLVxuICAgKiBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyBsYXllciB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLmVhc2luZ0ZuIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW5cbiAgICogbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodC5cbiAgICovXG4gIHJlZ2lzdGVyTG9va0xheWVyKFxuICAgIGxheWVyTmFtZSxcbiAgICB7XG4gICAgICBhbmltYXRpb24gPSAnbG9vaycsXG4gICAgICBtYXhTcGVlZCA9IDI1LFxuICAgICAgcmVmZXJlbmNlLFxuICAgICAgZm9yd2FyZEF4aXMgPSAnUG9zaXRpdmVaJyxcbiAgICAgIGhhc1NhY2NhZGUgPSBmYWxzZSxcbiAgICAgIGJsZW5kVGltZSA9IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuXG4gICAgfSA9IHt9XG4gICkge1xuICAgIC8vIFZhbGlkYXRlIHJlZmVyZW5jZSBvYmplY3RcbiAgICByZWZlcmVuY2UgPSByZWZlcmVuY2UgfHwgdGhpcy5faG9zdC5vd25lcjtcblxuICAgIGlmICghdGhpcy5jb25zdHJ1Y3Rvci5fdmFsaWRhdGVUcmFuc2Zvcm1PYmplY3QocmVmZXJlbmNlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaW5pdGlhbGl6ZSByZWdpc3RlciBsb29rIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgUG9pbnRPZkludGVyZXN0RmVhdHVyZSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFJlZmVyZW5jZSBtdXN0IGJlIGRlZmluZWQgYXMgYSB2YWxpZCB0cmFuc2Zvcm1hdGlvbiBvYmplY3QuYCk7XG4gICAgfVxuXG4gICAgLy8gRmluZCB2ZWN0b3IgYXNzb2NpYXRlZCB3aXRoIGF4aXMgc3RyaW5nXG4gICAgZm9yd2FyZEF4aXMgPSBBeGlzTWFwW2ZvcndhcmRBeGlzXSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IEF4aXNNYXBbZm9yd2FyZEF4aXNdXG4gICAgICA6IEF4aXNNYXAuUG9zaXRpdmVaO1xuXG4gICAgLy8gU3RvcmUgdHJhY2tpbmcgY29uZmlndXJhdGlvblxuICAgIGNvbnN0IHRyYWNraW5nQ29uZmlnID0gdGhpcy5fYWRkVHJhY2tpbmdDb25maWcoe1xuICAgICAgcmVmZXJlbmNlLFxuICAgICAgZm9yd2FyZEF4aXNcbiAgICB9KTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBsYXllciBhbmQgYW5pbWF0aW9uXG4gICAgdGhpcy5yZWdpc3RlckxheWVyKGxheWVyTmFtZSwge1xuICAgICAgdHJhY2tpbmdDb25maWcsXG4gICAgICBtYXhTcGVlZCxcbiAgICAgIG1heEhTcGVlZDogdW5kZWZpbmVkLFxuICAgICAgbWF4VlNwZWVkOiB1bmRlZmluZWQsXG4gICAgICBoRHVyYXRpb246IHVuZGVmaW5lZCxcbiAgICAgIHZEdXJhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgaFZlbG9jaXR5OiBbMCwgMF0sXG4gICAgICB2VmVsb2NpdHk6IFswLCAwXSxcbiAgICAgIGhhc1NhY2NhZGUsXG4gICAgICBibGVuZFRpbWUsXG4gICAgICBlYXNpbmdGbixcbiAgICAgIG1pY3JvU2FjY2FkZTogeyBoOiAwLCB2OiAwIH0sXG4gICAgICBtYWNyb1NhY2NhZGU6IHsgaDogMCwgdjogMCB9LFxuICAgICAgc2FjY2FkZVRhcmdldDogRmFjZVRhcmdldFR5cGVzLkV5ZUNlbnRlcixcbiAgICAgIGFuaW1hdGlvbnM6IHsgW2FuaW1hdGlvbl06IHt9IH0sXG4gICAgfSk7XG4gICAgdGhpcy5fbG9va0xheWVyc1tsYXllck5hbWVdID0gYW5pbWF0aW9uO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhlIGxvb2sgYW5pbWF0aW9uXG4gICAgdGhpcy5fcmVnaXN0ZXJMb29rQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uKTtcblxuICAgIC8vIEluaXRpYWxpemUgc2FjY2FkZSB0aW1lcnNcbiAgICBpZiAoaGFzU2FjY2FkZSkge1xuICAgICAgY29uc3QgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gdGhpcy5fdGFyZ2V0XG4gICAgICAgID8gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5leWVUYXJnZXRcbiAgICAgICAgOiBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmRlZmF1bHQ7XG4gICAgICB0aGlzLl9pbml0aWFsaXplTWljcm9UaW1lcihsYXllck5hbWUsIC4uLk1pY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdCk7XG4gICAgICB0aGlzLl9pbml0aWFsaXplTWFjcm9UaW1lcihsYXllck5hbWUsIC4uLm1hY3JvU2FjY2FkZVdhaXRSYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgb3ducyBhIGJsaW5rIGFuaW1hdGlvbi4gQmxpbmtcbiAgICogYW5pbWF0aW9ucyBjYW4gYmUgb2YgYW55IHR5cGUsIGJ1dCBpZiBpdCBpcyBvZiB0eXBlIHJhbmRvbUFuaW1hdGlvbiB0aGVuIGFcbiAgICogaXQgd2lsbCBiZSByYW5kb21pemVkIGVhY2ggdGltZSBhIGJsaW5rIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuaW1hdGlvbiA9ICdibGluayddIC0gTmFtZSBvZiB0aGUgYmxpbmsgYW5pbWF0aW9uXG4gICAqIG9uIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmJsZW5kVGltZT1bUG9pbnRPZkludGVyZXN0RmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lXXtAbGluayBQb2ludE9mSW50ZXJlc3RGZWF0dXJlI0RFRkFVTFRfTEFZRVJfT1BUSU9OUyNibGVuZFRpbWV9XSAtXG4gICAqIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIHRoZSBsYXllcidzIHdlaWdodC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMuZWFzaW5nRm4gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxuICAgKiBtYW5pcHVsYXRpbmcgdGhlIGxheWVyJ3Mgd2VpZ2h0LlxuICAgKi9cbiAgcmVnaXN0ZXJCbGlua0xheWVyKFxuICAgIGxheWVyTmFtZSxcbiAgICB7XG4gICAgICBhbmltYXRpb24gPSAnYmxpbmsnLFxuICAgICAgYmxlbmRUaW1lID0gUG9pbnRPZkludGVyZXN0RmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lLFxuICAgICAgZWFzaW5nRm5cbiAgICB9ID0ge31cbiAgKSB7XG4gICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGFuZCBhbmltYXRpb25cbiAgICB0aGlzLnJlZ2lzdGVyTGF5ZXIobGF5ZXJOYW1lLCB7XG4gICAgICBibGVuZFRpbWUsXG4gICAgICBlYXNpbmdGbixcbiAgICAgIGFuaW1hdGlvbnM6IHsgW2FuaW1hdGlvbl06IHt9IH0sXG4gICAgfSk7XG4gICAgdGhpcy5fYmxpbmtMYXllcnNbbGF5ZXJOYW1lXSA9IGFuaW1hdGlvbjtcbiAgfVxuXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgbG9vayBhbmdsZXNcbiAgICBpZiAodGhpcy5fdGFyZ2V0KSB7XG4gICAgICB0aGlzLl9zZXRMb29rQW5nbGVzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc2V0TG9va0FuZ2xlcygpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlbHRhU2Vjb25kcyA9IE1hdGgubWluKGRlbHRhVGltZSwgTWF4RGVsdGEpIC8gMTAwMDtcbiAgICBsZXQgdHJpZ2dlckJsaW5rID0gZmFsc2U7XG5cbiAgICAvLyBTZXQgbG9vayBibGVuZCB2YWx1ZXNcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl9sb29rTGF5ZXJzKS5mb3JFYWNoKChbbGF5ZXJOYW1lLCBhbmltTmFtZV0pID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG5cbiAgICAgIC8vIEluY3JlbWVudCB0aGUgc2FjY2FkZSB0aW1lcnNcbiAgICAgIGlmIChvcHRpb25zLmlzQWN0aXZlICYmIG9wdGlvbnMuaGFzU2FjY2FkZSkge1xuICAgICAgICBvcHRpb25zLm1pY3JvU2FjY2FkZVRpbWVyLmV4ZWN1dGUoZGVsdGFUaW1lKTtcbiAgICAgICAgb3B0aW9ucy5tYWNyb1NhY2NhZGVUaW1lci5leGVjdXRlKGRlbHRhVGltZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgYmxlbmQgdmFsdWVzXG4gICAgICBpZiAob3B0aW9ucy5hbmltYXRpb25zW2FuaW1OYW1lXS5pc0FjdGl2ZSkge1xuICAgICAgICBjb25zdCBjdXJyZW50SCA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgICBsYXllck5hbWUsIGFuaW1OYW1lLCAnWCdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY3VycmVudFYgPSB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXG4gICAgICAgICAgbGF5ZXJOYW1lLCBhbmltTmFtZSwgJ1knXG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IHRhcmdldEggPSBvcHRpb25zLnRyYWNraW5nQ29uZmlnLmFuZ2xlcy5oO1xuICAgICAgICBsZXQgdGFyZ2V0ViA9IG9wdGlvbnMudHJhY2tpbmdDb25maWcuYW5nbGVzLnY7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGxvb2sgYW5nbGUgaGFzIGNoYW5nZWQgZW5vdWdoIHRvIHRyaWdnZXIgYSBibGlua1xuICAgICAgICBpZiAodGhpcy5faXNUYXJnZXRNb3ZpbmcgJiYgIXRyaWdnZXJCbGluaykge1xuICAgICAgICAgIGNvbnN0IHByZXZUYXJnZXRIID0gb3B0aW9ucy50cmFja2luZ0NvbmZpZy5wcmV2QW5nbGVzLmg7XG4gICAgICAgICAgY29uc3QgcHJldlRhcmdldFYgPSBvcHRpb25zLnRyYWNraW5nQ29uZmlnLnByZXZBbmdsZXMudjtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VBbW91bnQgPSBNYXRoVXRpbHMudG9EZWdyZWVzKFxuICAgICAgICAgICAgTWF0aFV0aWxzLmdldEFuZ2xlQmV0d2VlbihcbiAgICAgICAgICAgICAgW3ByZXZUYXJnZXRILCBwcmV2VGFyZ2V0Vl0sXG4gICAgICAgICAgICAgIFt0YXJnZXRILCB0YXJnZXRWXVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoY2hhbmdlQW1vdW50ID49IEJsaW5rVGhyZXNob2xkKSB7XG4gICAgICAgICAgICB0cmlnZ2VyQmxpbmsgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMudHJhY2tpbmdDb25maWcucHJldkFuZ2xlcy5oID0gdGFyZ2V0SDtcbiAgICAgICAgb3B0aW9ucy50cmFja2luZ0NvbmZpZy5wcmV2QW5nbGVzLnYgPSB0YXJnZXRWO1xuXG4gICAgICAgIC8vIEFkZCBpbiB0aGUgc2FjY2FkZSBtb3ZlbWVudFxuICAgICAgICBpZiAob3B0aW9ucy5oYXNTYWNjYWRlKSB7XG4gICAgICAgICAgTWF0aFV0aWxzLmRhbXBWYWx1ZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBvcHRpb25zLm1hY3JvU2FjY2FkZS5oICsgb3B0aW9ucy5tYWNyb1NhY2NhZGUuaCxcbiAgICAgICAgICAgIG9wdGlvbnMuaFZlbG9jaXR5LFxuICAgICAgICAgICAgb3B0aW9ucy5oRHVyYXRpb24sXG4gICAgICAgICAgICBvcHRpb25zLm1heEhTcGVlZFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGFyZ2V0SCArPSBvcHRpb25zLmhWZWxvY2l0eVswXTtcbiAgICAgICAgICBNYXRoVXRpbHMuZGFtcFZhbHVlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIG9wdGlvbnMubWFjcm9TYWNjYWRlLnYgKyBvcHRpb25zLm1hY3JvU2FjY2FkZS52LFxuICAgICAgICAgICAgb3B0aW9ucy52VmVsb2NpdHksXG4gICAgICAgICAgICBvcHRpb25zLnZEdXJhdGlvbixcbiAgICAgICAgICAgIG9wdGlvbnMubWF4VlNwZWVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0YXJnZXRWICs9IG9wdGlvbnMudlZlbG9jaXR5WzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xhbXAgdG8gbWF4IHNwZWVkXG4gICAgICAgIGNvbnN0IGZhY3RvciA9IE1hdGhVdGlscy5jbGFtcChkZWx0YVNlY29uZHMgKiBvcHRpb25zLm1heFNwZWVkLCAwLCAxKTtcbiAgICAgICAgdGFyZ2V0SCA9IE1hdGhVdGlscy5sZXJwKGN1cnJlbnRILCB0YXJnZXRILCBmYWN0b3IpO1xuICAgICAgICB0YXJnZXRWID0gTWF0aFV0aWxzLmxlcnAoY3VycmVudFYsIHRhcmdldFYsIGZhY3Rvcik7XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBibGVuZCB2YWx1ZXNcbiAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltTmFtZSxcbiAgICAgICAgICAnWCcsXG4gICAgICAgICAgdGFyZ2V0SFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXG4gICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgIGFuaW1OYW1lLFxuICAgICAgICAgICdZJyxcbiAgICAgICAgICB0YXJnZXRWXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXRyaWdnZXJCbGluayB8fCAhdGhpcy5faXNUYXJnZXRNb3ZpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlIGJsaW5rXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fYmxpbmtMYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIGFuaW1OYW1lXSkgPT4ge1xuICAgICAgY29uc3QgYW5pbWF0aW9uID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbU5hbWVdO1xuXG4gICAgICBpZiAoYW5pbWF0aW9uLmlzQWN0aXZlKSB7XG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5wbGF5QW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbU5hbWUpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBpbnN0YWxsQXBpKCkge1xuICAgIC8qKlxuICAgICAqIEBpbm5lclxuICAgICAqIEBuYW1lc3BhY2UgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICAgICAqL1xuICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGFwaSwge1xuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSN0YXJnZXRcbiAgICAgICAqL1xuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIGdldDogKCkgPT4gdGhpcy50YXJnZXQsXG4gICAgICAgIHNldDogdGFyZ2V0ID0+IHsgdGhpcy50YXJnZXQgPSB0YXJnZXQgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWV0aG9kXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSNyZWdpc3Rlckxvb2tMYXllclxuICAgICAgICovXG4gICAgICByZWdpc3Rlckxvb2tMYXllcjogdGhpcy5yZWdpc3Rlckxvb2tMYXllci5iaW5kKHRoaXMpLFxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWV0aG9kXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSNyZWdpc3RlckJsaW5rTGF5ZXJcbiAgICAgICAqL1xuICAgICAgcmVnaXN0ZXJCbGlua0xheWVyOiB0aGlzLnJlZ2lzdGVyQmxpbmtMYXllci5iaW5kKHRoaXMpLFxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWV0aG9kXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSNzZXRUYXJnZXRcbiAgICAgICAqL1xuICAgICAgc2V0VGFyZ2V0OiB0aGlzLnNldFRhcmdldC5iaW5kKHRoaXMpLFxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWV0aG9kXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSNzZXRUYXJnZXRCeU5hbWVcbiAgICAgICAqL1xuICAgICAgc2V0VGFyZ2V0QnlOYW1lOiB0aGlzLnNldFRhcmdldEJ5TmFtZS5iaW5kKHRoaXMpLFxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWV0aG9kXG4gICAgICAgKiBAc2VlIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSNzZXRUYXJnZXRCeUlkXG4gICAgICAgKi9cbiAgICAgIHNldFRhcmdldEJ5SWQ6IHRoaXMuc2V0VGFyZ2V0QnlJZC5iaW5kKHRoaXMpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFwaTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQb2ludE9mSW50ZXJlc3RGZWF0dXJlO1xuZXhwb3J0IHsgQXhpc01hcCB9OyIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgQ29yZVBvaW50T2ZJbnRlcmVzdEZlYXR1cmUsIHtBeGlzTWFwfSBmcm9tICdjb3JlL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUnO1xuXG4vKipcbiAqIEBleHRlbmRzIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICogQGFsaWFzIHRocmVlLmpzL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmVcbiAqL1xuY2xhc3MgUG9pbnRPZkludGVyZXN0RmVhdHVyZSBleHRlbmRzIENvcmVQb2ludE9mSW50ZXJlc3RGZWF0dXJlIHtcbiAgc3RhdGljIF9nZXRXb3JsZFBvc2l0aW9uKG9iaikge1xuICAgIG9iai51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG4gICAgcmV0dXJuIG9iai5tYXRyaXhXb3JsZC5lbGVtZW50cy5zbGljZSgxMiwgMTUpO1xuICB9XG5cbiAgc3RhdGljIF9nZXRXb3JsZE1hdHJpeChvYmopIHtcbiAgICBvYmoudXBkYXRlV29ybGRNYXRyaXgodHJ1ZSwgZmFsc2UpO1xuICAgIHJldHVybiBbLi4ub2JqLm1hdHJpeFdvcmxkLmVsZW1lbnRzXTtcbiAgfVxuXG4gIF92YWxpZGF0ZVRyYW5zZm9ybU9iamVjdChvYmopIHtcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgVEhSRUUuT2JqZWN0M0Q7XG4gIH1cblxuICBzZXRUYXJnZXRCeU5hbWUobmFtZSkge1xuICAgIHN1cGVyLnNldFRhcmdldEJ5TmFtZShuYW1lKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRhcmdldCA9IHRoaXMuX3NjZW5lLmdldE9iamVjdEJ5TmFtZShuYW1lKTtcbiAgfVxuXG4gIHNldFRhcmdldEJ5SWQoaWQpIHtcbiAgICBzdXBlci5zZXRUYXJnZXRCeU5hbWUoaWQpO1xuICAgIGlmICghaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRhcmdldCA9IHRoaXMuX3NjZW5lLmdldE9iamVjdEJ5SWQoaWQpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmU7XG5leHBvcnQge0F4aXNNYXB9O1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydFxyXG5leHBvcnQgY29uc3QgZW52ID0gJ3RocmVlJztcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcblxuaW1wb3J0IFV0aWxzIGZyb20gJ2NvcmUvVXRpbHMnO1xuXG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiB1c2VmdWwgdGV4dC10by1zcGVlY2ggZnVuY3Rpb25zLlxuICpcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqL1xuY2xhc3MgVGV4dFRvU3BlZWNoVXRpbHMge1xuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBzdHJpbmcgd2l0aCBTU01MIG1hcmtzIGluc2VydGVkIGJhc2VkIG9uXG4gICAqIG1hdGNoZXMgYmV0d2VlbiB0aGUgaW5wdXQgc3RyaW5nIGFuZCB0aGUgaW5wdXQgbWFwLiBUaGVcbiAgICogd29yZCBtYXRjaGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLiBXb3JkcyB3aXRoaW4gZXhpc3RpbmdcbiAgICogU1NNTCB0YWdzIHdpbGwgbm90IGJlIGFmZmVjdGVkLiBJbnB1dCB0ZXh0IHdpbGwgYmUgc3Vycm91bmRlZFxuICAgKiBieSA8c3BlYWs+PC9zcGVhaz4gdGFncyBpZiBuZWVkZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gSW5wdXQgc3RyaW5nLlxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwIC0gSW5wdXQgb2JqZWN0IHRoYXQgbWFwcyBtYXJrIGtleXNcbiAgICogdG8gYXJyYXlzIG9mIHdvcmRzLiBFeGFtcGxlOlxuICAgKlxuICAgKiAge1xuICAgKiAgICAnbWFyazpzYWQnIDogWydzYWQnLCAnYmx1ZScsICdkb3duJ10sXG4gICAqICAgICdtYXJrOmhhcHB5JyA6IFsnam95JywgJ2dsYWQnLCAnZ3JlYXQnXSxcbiAgICogICAgJ21hcms6bm8nIDogWydubycsICduYWgnLCAnbmF5JywgJ3N1cmUnXVxuICAgKiAgfVxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBbcmFuZG9tTWFya3MgPSBbXV0gLSBJZiB0aGVyZSBhcmUgc2VudGVuY2VzIHRoYXQgZG9uJ3RcbiAgICogbWF0Y2ggYW55IHdvcmRzIGZyb20gdGhlIG1hcCBvYmplY3QsIG1hcmtzIGZyb20gdGhpcyBhcnJheSB3aWxsIGJlIHJhbmRvbWx5XG4gICAqIGNob3NlbiBhbmQgaW5zZXJ0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBpbnB1dCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgYXV0b0dlbmVyYXRlU1NNTE1hcmtzKHRleHQsIG1hcCwgcmFuZG9tTWFya3MgPSBbXSkge1xuICAgIGlmICh0eXBlb2YgbWFwICE9PSAnb2JqZWN0JyB8fCBtYXAgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZW5lcmF0ZSBTU01MIG1hcmtzIGZvciB0ZXh0IFwiJHt0ZXh0fVwiIGJlY2F1c2UgbWFwIGlzIG5vdCBhbiBvYmplY3QuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBwcm9jZXNzIHRoZSBpbnB1dCBtYXAgaW50byBhbiBpbnRlcm5hbCBmb3JtYXRcbiAgICBjb25zdCBpbnRlcm5hbE1hcCA9IHRoaXMuX3Byb2Nlc3NJbnB1dE1hcChtYXApO1xuXG4gICAgY29uc3Qgc3BlYWtUYWdzID0gWyc8c3BlYWs+JywgJzwvc3BlYWs+J107XG4gICAgY29uc3Qgc3NtbE1hcmtSZWdleCA9IC88bWFyayBuYW1lPSg/OlwifCcpKC4qPykoPzpcInwnKVxcLz4vO1xuICAgIGNvbnN0IHNzbWxUYWdSZWdleCA9IC88W14+XSo+L2c7XG5cbiAgICAvLyBJZGVudGlmeSBhbnkgZXhpc3RpbmcgU1NNTCB0YWdzXG4gICAgY29uc3QgZXhpc3RpbmdUYWdzID0gW107XG4gICAgbGV0IHJlc3VsdCA9IHNzbWxUYWdSZWdleC5leGVjKHRleHQpO1xuXG4gICAgd2hpbGUgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgZXhpc3RpbmdUYWdzLnB1c2goe1xuICAgICAgICBzdGFydDogcmVzdWx0LmluZGV4LFxuICAgICAgICBlbmQ6IHJlc3VsdC5pbmRleCArIHJlc3VsdFswXS5sZW5ndGgsXG4gICAgICAgIHRleHQ6IHJlc3VsdFswXSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQgPSBzc21sVGFnUmVnZXguZXhlYyh0ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGxldCBzc21sTWFya1Jlc3VsdDtcbiAgICBsZXQgZHVwbGljYXRlTWFya1RvQ2hlY2sgPSBbXTtcbiAgICBleGlzdGluZ1RhZ3MuZm9yRWFjaChleGlzdGluZ1RhZyA9PiB7XG4gICAgICBjb25zdCBzdWJzdHIgPSB0ZXh0LnNsaWNlKGluZGV4LCBleGlzdGluZ1RhZy5zdGFydCk7XG5cbiAgICAgIGlmIChzdWJzdHIgIT09ICcnKSB7XG4gICAgICAgIC8vIGF1dG8tbWFyayBub24tdGFnIHRleHRcbiAgICAgICAgY2h1bmtzLnB1c2goXG4gICAgICAgICAgdGhpcy5faW5zZXJ0TWFya3Moc3Vic3RyLCBpbnRlcm5hbE1hcCwgZHVwbGljYXRlTWFya1RvQ2hlY2spXG4gICAgICAgICk7XG5cbiAgICAgICAgZHVwbGljYXRlTWFya1RvQ2hlY2sgPSBbXTtcbiAgICAgIH1cblxuICAgICAgc3NtbE1hcmtSZXN1bHQgPSBzc21sTWFya1JlZ2V4LmV4ZWMoZXhpc3RpbmdUYWcudGV4dCk7XG5cbiAgICAgIGlmIChzc21sTWFya1Jlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtYXJrVGV4dCA9IHNzbWxNYXJrUmVzdWx0WzFdO1xuICAgICAgICBkdXBsaWNhdGVNYXJrVG9DaGVjay5wdXNoKG1hcmtUZXh0KTtcbiAgICAgIH0gZWxzZSBpZiAoIXNwZWFrVGFncy5pbmNsdWRlcyhleGlzdGluZ1RhZy50ZXh0KSkge1xuICAgICAgICBjaHVua3MucHVzaChleGlzdGluZ1RhZy50ZXh0KTtcbiAgICAgIH1cblxuICAgICAgLy8gYWR2YW5jZSB0aGUgaW5kZXhcbiAgICAgIGluZGV4ID0gZXhpc3RpbmdUYWcuZW5kO1xuICAgIH0pO1xuXG4gICAgY2h1bmtzLnB1c2goXG4gICAgICB0aGlzLl9pbnNlcnRNYXJrcyh0ZXh0LnNsaWNlKGluZGV4KSwgaW50ZXJuYWxNYXAsIGR1cGxpY2F0ZU1hcmtUb0NoZWNrKVxuICAgICk7XG5cbiAgICBsZXQgbWFya2VkVGV4dCA9IGNodW5rcy5qb2luKCcnKTtcblxuICAgIGlmIChyYW5kb21NYXJrcyAmJiByYW5kb21NYXJrcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBhZGQgcmFuZG9tIG1hcmtzIHRvIGFueSB1bm1hcmtlZCBzZW50ZW5jZXNcbiAgICAgIG1hcmtlZFRleHQgPSB0aGlzLmFkZE1hcmtzVG9Vbm1hcmtlZFNlbnRlbmNlcyhcbiAgICAgICAgbWFya2VkVGV4dCxcbiAgICAgICAgcmFuZG9tTWFya3NcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFRleHRUb1NwZWVjaFV0aWxzLnZhbGlkYXRlVGV4dChtYXJrZWRUZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IHN0cmluZyB3aXRoIGEgcmFuZG9tIFNTTUwgbWFyayBpbnNlcnRlZCBhdCBlYWNoIHNlbnRlbmNlIHRoYXRcbiAgICogZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGFuIFNTTUwgbWFyay5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBJbnB1dCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IG1hcmtzIC0gQW55IGFycmF5IG9mIHJhbmRvbSBTU01MIG1hcmtzIHRvIGNob29zZSBmcm9tXG4gICAqIHdoZW4gbW9kaWZ5aW5nIHRoZSB0ZXh0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIGFkZE1hcmtzVG9Vbm1hcmtlZFNlbnRlbmNlcyh0ZXh0LCBtYXJrcykge1xuICAgIGlmICghbWFya3MgfHwgbWFya3MubGVuZ3RoID09PSAwKSByZXR1cm4gdGV4dDtcblxuICAgIGNvbnN0IHNzbWxNYXJrUmVnZXggPSAvPG1hcmsgbmFtZT0oPzpcInwnKSguKj8pKD86XCJ8JylcXC8+L2c7XG4gICAgY29uc3Qgc3NtbFRhZ1JlZ2V4ID0gLzxbXj5dKj4vZztcblxuICAgIC8vIEZpbmQgdGhlIGluZGljZXMgb2YgYW55IG1hcmtzIGluIHRoZSB0ZXh0XG4gICAgY29uc3QgbWFya0luZGljZXMgPSBbXTtcbiAgICBsZXQgbWFya1Jlc3VsdCA9IHNzbWxNYXJrUmVnZXguZXhlYyh0ZXh0KTtcblxuICAgIHdoaWxlIChtYXJrUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICBtYXJrSW5kaWNlcy5wdXNoKG1hcmtSZXN1bHQuaW5kZXgpO1xuICAgICAgbWFya1Jlc3VsdCA9IHNzbWxNYXJrUmVnZXguZXhlYyh0ZXh0KTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIGFsbCBTU01MIHRhZ3MgaW4gdGhlIHRleHRcbiAgICBjb25zdCBleGlzdGluZ1RhZ3MgPSBbXTtcbiAgICBsZXQgc3NtbFJlc3VsdCA9IHNzbWxUYWdSZWdleC5leGVjKHRleHQpO1xuICAgIHdoaWxlIChzc21sUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICBleGlzdGluZ1RhZ3MucHVzaCh7XG4gICAgICAgIHN0YXJ0OiBzc21sUmVzdWx0LmluZGV4LFxuICAgICAgICBlbmQ6IHNzbWxSZXN1bHQuaW5kZXggKyBzc21sUmVzdWx0WzBdLmxlbmd0aCxcbiAgICAgICAgdGV4dDogc3NtbFJlc3VsdFswXSxcbiAgICAgIH0pO1xuICAgICAgc3NtbFJlc3VsdCA9IHNzbWxUYWdSZWdleC5leGVjKHRleHQpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIHRleHQgd2l0aCBhbGwgU1NNTCBtYXJrcyByZXBsYWNlcyB3aXRoIHdoaXRlc3BhY2VcbiAgICBsZXQgY2xlYW5lZFRleHQgPSB0ZXh0LnNsaWNlKCk7XG4gICAgZXhpc3RpbmdUYWdzLmZvckVhY2goZXhpc3RpbmdTc21sID0+IHtcbiAgICAgIGNvbnN0IHdoaXRlc3BhY2UgPSBuZXcgQXJyYXkoZXhpc3RpbmdTc21sLnRleHQubGVuZ3RoICsgMSkuam9pbignICcpO1xuICAgICAgY2xlYW5lZFRleHQgPSBbXG4gICAgICAgIGNsZWFuZWRUZXh0LnNsaWNlKDAsIGV4aXN0aW5nU3NtbC5zdGFydCksXG4gICAgICAgIHdoaXRlc3BhY2UsXG4gICAgICAgIGNsZWFuZWRUZXh0LnNsaWNlKGV4aXN0aW5nU3NtbC5lbmQpLFxuICAgICAgXS5qb2luKCcnKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlbnRlbmNlRW5kSW5kaWNlcyA9IHRoaXMuX2dldFNlbnRlbmNlRW5kcyhjbGVhbmVkVGV4dCk7XG5cbiAgICAvLyBPbmx5IGluc2VydCByYW5kb20gbWFya3MgaW50byBzZW50ZW5jZXMgdGhhdCBkb24ndCBhbHJlYWR5IGhhdmUgYW55XG4gICAgbGV0IHByZXZJbmRleCA9IDA7XG4gICAgY29uc3QgdGFyZ2V0SW5kaWNlcyA9IHNlbnRlbmNlRW5kSW5kaWNlcy5maWx0ZXIoaW5kZXggPT4ge1xuICAgICAgY29uc3QgY29udGFpbnNNYXJrID1cbiAgICAgICAgbWFya0luZGljZXMuZmluZEluZGV4KG1hcmtJbmRleCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHByZXZJbmRleCA8PSBtYXJrSW5kZXggJiYgaW5kZXggPiBtYXJrSW5kZXg7XG4gICAgICAgIH0pICE9PSAtMTtcbiAgICAgIHByZXZJbmRleCA9IGluZGV4O1xuICAgICAgcmV0dXJuICFjb250YWluc01hcms7XG4gICAgfSk7XG5cbiAgICBjb25zdCByYW5kb21NYXJrZWRUZXh0ID0gdGhpcy5faW5zZXJ0UmFuZG9tTWFya3NBdChcbiAgICAgIHRleHQsXG4gICAgICB0YXJnZXRJbmRpY2VzLFxuICAgICAgbWFya3NcbiAgICApO1xuXG4gICAgcmV0dXJuIHJhbmRvbU1hcmtlZFRleHQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSB2ZXJzaW9uIG9mIGdpdmVuIHRleHQgdGhhdCBpcyBlbmNsb3NlZCBieSBQb2xseSBzc21sIHNwZWFrIHRhZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gdmFsaWRhdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBpbnB1dCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVUZXh0KHRleHQpIHtcbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIHRleHQgPSAnPHNwZWFrPjwvc3BlYWs+JztcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dCA9IHRleHRcbiAgICAgICAgLnJlcGxhY2UoLyheXFxzKjxcXHMqc3BlYWtcXHMqKT5cXHMqfCheXFxzKikvLCAnPHNwZWFrPicpXG4gICAgICAgIC5yZXBsYWNlKC8oXFxzKjxcXHMqXFwvXFxzKnNwZWFrXFxzKj5cXHMqJHxcXHMqJCkvLCAnPC9zcGVhaz4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBpbnB1dCBzdHJpbmcgYW5kIGluc2VydCBTU01MIG1hcmtzIGJhc2VkIG9uXG4gICAqIHdvcmQgbWF0Y2hlcyBpbiBhIG1hcC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBJbnB1dCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFtpbmRpY2VzID0gW11dIC0gQW4gYXJyYXkgb2YgaW5kaWNlcyBpbiB0aGUgdGV4dCBpbnB1dFxuICAgKiB3aGVyZSByYW5kb20gbWFya3Mgc2hvdWxkIGJlIGluc2VydGVkLlxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBbbWFya3MgPSBbXV0gLSBBbiBhcnJheSBvZiBtYXJrIHN0cmluZ3MgdG8gY2hvb3NlXG4gICAqIGZyb20gd2hlbiBpbnNlcnRpbmcgcmFuZG9tIG1hcmtzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFVwZGF0ZWQgaW5wdXQgc3RyaW5nLlxuICAgKi9cbiAgc3RhdGljIF9pbnNlcnRSYW5kb21NYXJrc0F0KHRleHQsIGluZGljZXMgPSBbXSwgbWFya3MgPSBbXSkge1xuICAgIGlmICghbWFya3MgfHwgbWFya3MubGVuZ3RoID09PSAwIHx8ICFpbmRpY2VzIHx8IGluZGljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG5cbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBpbmRpY2VzLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgY29uc3QgcmFuZG9tTWFyayA9IGA8bWFyayBuYW1lPScke1xuICAgICAgICBtYXJrc1tVdGlscy5nZXRSYW5kb21JbnQoMCwgbWFya3MubGVuZ3RoKV1cbiAgICAgIH0nLz5gO1xuICAgICAgdGV4dCA9IFtcbiAgICAgICAgdGV4dC5zbGljZSgwLCBpbmRleCArIG9mZnNldCksXG4gICAgICAgIHJhbmRvbU1hcmssXG4gICAgICAgIHRleHQuc2xpY2UoaW5kZXggKyBvZmZzZXQpLFxuICAgICAgXS5qb2luKCcnKTtcbiAgICAgIG9mZnNldCArPSByYW5kb21NYXJrLmxlbmd0aDtcbiAgICB9KTtcblxuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIHN0cmluZyBvZiB0ZXh0IGFuZCByZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZGljZXNcbiAgICogb2YgdGhlIGxhc3QgY2hhcmFjdGVyIGluIGEgc2VudGVuY2UgdGhhdCBpcyBub3QgaW4gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgKiAgKCcuJywgJz8nLCAnIScpXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGV4dCB0byBwcm9jZXNzIGZvciBlbmQgb2Ygc2VudGVuY2VcbiAgICogaW5kaWNlcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIEFycmF5IG9mIGVuZCBvZiBzZW50ZW5jZSBpbmRpY2VzLlxuICAgKi9cbiAgc3RhdGljIF9nZXRTZW50ZW5jZUVuZHModGV4dCkge1xuICAgIGNvbnN0IHNlbnRlbmNlUmVnZXggPSAvW14uIT9dK1suIT9dKy9nO1xuICAgIGNvbnN0IGVuZFNlbnRlbmNlUmVnZXggPSAvWy4hP10rLztcblxuICAgIGxldCByZXN1bHQgPSBzZW50ZW5jZVJlZ2V4LmV4ZWModGV4dCk7XG4gICAgY29uc3Qgc2VudGVuY2VFbmRzID0gW107XG4gICAgd2hpbGUgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgLy8gZmluZCB0aGUgbGFzdCBub24tcHVuY3R1YXRpb24gY2hhcmFjdGVyXG4gICAgICBjb25zdCBwdW5jdFJlc3VsdCA9IGVuZFNlbnRlbmNlUmVnZXguZXhlYyhyZXN1bHRbMF0pO1xuICAgICAgc2VudGVuY2VFbmRzLnB1c2goXG4gICAgICAgIHJlc3VsdC5pbmRleCArIHJlc3VsdFswXS5sZW5ndGggLSBwdW5jdFJlc3VsdFswXS5sZW5ndGhcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSBzZW50ZW5jZVJlZ2V4LmV4ZWModGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbnRlbmNlRW5kcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBpbnB1dCBzdHJpbmcgYW5kIGluc2VydCBTU01MIG1hcmtzIGJhc2VkIG9uXG4gICAqIHdvcmQgbWF0Y2hlcyBpbiBhIG1hcC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBJbnB1dCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7TWFwfSBtYXAgLSBNYXBwaW5nIG9mIHdvcmRzIHRvIG1hcmsgdmFsdWVzIHRoYXRcbiAgICogd2lsbCBiZSBpbnNlcnRlZCBhcyB0aGUgdmFsdWUgZm9yIGEgbWFyaydzICduYW1lJyBhdHRyaWJ1dGUuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGR1cGxpY2F0ZXNUb0NoZWNrIC0gQSBsaXN0IG9mIG1hcmsgdmFsdWVzIHRvIGNoZWNrIGZvciBkdXBsaWNhdGUgYWdhaW5zdCB0aGUgZmlyc3Qgd29yZFxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFVwZGF0ZWQgaW5wdXQgc3RyaW5nLlxuICAgKi9cbiAgc3RhdGljIF9pbnNlcnRNYXJrcyh0ZXh0LCBtYXAsIGR1cGxpY2F0ZXNUb0NoZWNrKSB7XG4gICAgaWYgKHRleHQgPT09ICcnKSByZXR1cm4gdGV4dDtcblxuICAgIGNvbnN0IHdvcmRSZWdleCA9IC9cXHcrfFxccyt8W15cXHNcXHddKy9nO1xuXG4gICAgbGV0IGxvd2VyQ2FzZVdvcmQ7XG4gICAgbGV0IGNoZWNrRHVwbGljYXRlID0gdHJ1ZTtcbiAgICBjb25zdCBtYXJrZWRXb3JkcyA9IHRleHQubWF0Y2god29yZFJlZ2V4KS5tYXAod29yZCA9PiB7XG4gICAgICBsb3dlckNhc2VXb3JkID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAobWFwLmhhcyhsb3dlckNhc2VXb3JkKSkge1xuICAgICAgICBjb25zdCBtYXJrcyA9IG1hcC5nZXQobG93ZXJDYXNlV29yZCkubWFwKG1hcmsgPT4ge1xuICAgICAgICAgIGlmIChjaGVja0R1cGxpY2F0ZSkge1xuICAgICAgICAgICAgY2hlY2tEdXBsaWNhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBkdXBsaWNhdGVzVG9DaGVjay5pbmNsdWRlcyhtYXJrKVxuICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgIDogYDxtYXJrIG5hbWU9JyR7bWFya30nLz5gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYDxtYXJrIG5hbWU9JyR7bWFya30nLz5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBgJHttYXJrcy5qb2luKCcnKX0ke3dvcmR9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrRHVwbGljYXRlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB3b3JkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZXhpc3RpbmdNYXJrcyA9IGR1cGxpY2F0ZXNUb0NoZWNrLm1hcChtYXJrID0+IHtcbiAgICAgIHJldHVybiBgPG1hcmsgbmFtZT0nJHttYXJrfScvPmA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYCR7ZXhpc3RpbmdNYXJrcy5qb2luKCcnKX0ke21hcmtlZFdvcmRzLmpvaW4oJycpfWA7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIGFuIGlucHV0IG9iamVjdCBmb3IgbWFwcGluZyBhbiBhcnJheVxuICAgKiBvZiB3b3JkcyB0byBzcGVjaWZpYyBtYXJrIGtleXMuIENvbnZlcnRzIHRoZSBpbnB1dFxuICAgKiBtYXAgaW50byBhIE1hcCB3aXRoIGEgbW9yZSBlZmZpY2llbnQgZm9ybWF0IGZvclxuICAgKiBwZXJmb3JtaW5nIG1hcmsgaW5qZWN0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbWFwIC0gSW5wdXQgb2JqZWN0IHRoYXQgbWFwcyBtYXJrIGtleXNcbiAgICogdG8gYXJyYXlzIG9mIHdvcmRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7TWFwfSAtIE1hcCBmb3IgaW50ZXJuYWwgdXNlLlxuICAgKi9cbiAgc3RhdGljIF9wcm9jZXNzSW5wdXRNYXAobWFwKSB7XG4gICAgY29uc3QgaW50ZXJuYWxNYXAgPSBuZXcgTWFwKCk7XG5cbiAgICBsZXQgbGlzdCA9IFtdO1xuICAgIE9iamVjdC5lbnRyaWVzKG1hcCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IGdlbmVyYXRlIFNTTUwgbWFya3MgZnJvbSBtYXAgXCIke21hcH1cIiBiZWNhdXNlIHZhbHVlIGZvciBrZXkgJyR7a2V5fScgaXMgbm90IGFuIGFycmF5LmBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdmFsdWUuZm9yRWFjaCh3b3JkID0+IHtcbiAgICAgICAgY29uc3QgbG93ZXJDYXNlV29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGlzdCA9IGludGVybmFsTWFwLmdldChsb3dlckNhc2VXb3JkKTtcblxuICAgICAgICBpZiAobGlzdCAhPT0gdW5kZWZpbmVkICYmICFsaXN0LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBpbnRlcm5hbE1hcC5zZXQobG93ZXJDYXNlV29yZCwgWy4uLmxpc3QsIGtleV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGludGVybmFsTWFwLnNldChsb3dlckNhc2VXb3JkLCBba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGludGVybmFsTWFwO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRleHRUb1NwZWVjaFV0aWxzO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcblxyXG4vKipcclxuICogQ2xhc3MgdGhhdCBjYW4gcGxheSBiYWNrIGF1ZGlvIGdlbmVyYXRlZCBieSBBV1MgUG9sbHkgYW5kIHN5bmNocm9uaXplZCBlbWl0XHJcbiAqIHNwZWVjaG1hcmsgbWVzc2FnZXMuXHJcbiAqXHJcbiAqIEBhYnN0cmFjdFxyXG4gKi9cclxuY2xhc3MgQWJzdHJhY3RTcGVlY2gge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtjb3JlL1RleHRUb1NwZWVjaEZlYXR1cmV9IHNwZWFrZXIgLSBUaGUgZmVhdHVyZSB0aGF0IG93bnMgdGhlIFNwZWVjaCBhbmRcclxuICAgKiB3aWxsIGVtaXQgc3BlZWNobWFyayBtZXNzYWdlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW3NwZWVjaG1hcmtzPVtdXSAtIEFuIGFycmF5IG9mIHNwZWVjaG1hcmsgb2JqZWN0cyByZXByZXNlbnRpbmdcclxuICAgKiB0aGUgdGV4dCBhbmQgdGltaW5nIG9mIHRoZSBzcGVlY2guXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Ioc3BlYWtlciwgdGV4dCwgc3BlZWNobWFya3MgPSBbXSkge1xyXG4gICAgdGhpcy5fc3BlYWtlciA9IHNwZWFrZXI7XHJcbiAgICB0aGlzLl90ZXh0ID0gdGV4dDtcclxuICAgIHRoaXMuX3NwZWVjaG1hcmtzID0gc3BlZWNobWFya3M7XHJcbiAgICB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0ID0gMDtcclxuICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCB0cmFja2luZyBwcm9wZXJ0aWVzLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY3VycmVudFRpbWU9MF0gLSBUaW1lIHRvIHVzZSBmb3IgX3N0YXJ0VGltZS5cclxuICAgKi9cclxuICBfcmVzZXQoY3VycmVudFRpbWUgPSAwKSB7XHJcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBjdXJyZW50VGltZTtcclxuICAgIHRoaXMuX2xvY2FsVGltZSA9IDA7XHJcbiAgICB0aGlzLl9wYXVzZVRpbWUgPSAwO1xyXG4gICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbWFya0l0ZXIgPSB0aGlzLl9zcGVlY2htYXJrcy52YWx1ZXMoKTtcclxuICAgIGNvbnN0IHt2YWx1ZSwgZG9uZX0gPSB0aGlzLl9tYXJrSXRlci5uZXh0KCk7XHJcbiAgICB0aGlzLl9jdXJyZW50TWFyayA9IHZhbHVlO1xyXG4gICAgdGhpcy5fZW5kVGltZSA9IHRoaXMuX3NwZWVjaG1hcmtzLmxlbmd0aFxyXG4gICAgICA/IHRoaXMuX3NwZWVjaG1hcmtzW3RoaXMuX3NwZWVjaG1hcmtzLmxlbmd0aCAtIDFdLnRpbWVcclxuICAgICAgOiAwO1xyXG4gICAgdGhpcy5fZG9uZSA9IGRvbmU7XHJcbiAgICB0aGlzLl9wcm9taXNlID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIG5ldyBwcm9taXNlIHRoYXQgd2lsbCBzdG9wIHBsYXliYWNrIGFuZCBlbWl0IG1lc3NhZ2VzIGZvciB0aGlzIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmNpdG9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgc3BlZWNoIHN0b3BzLlxyXG4gICAqIEBwYXJhbSB7b25FcnJvcj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2ggZW5jb3VudGVycyBhblxyXG4gICAqIGVycm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkludGVycnVwdCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaCBpcyBjYW5jZWxlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX2NyZWF0ZVByb21pc2Uob25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICBjb25zdCBvblJlc29sdmUgPSB2YWx1ZSA9PiB7XHJcbiAgICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5zdG9wLCB0aGlzKTtcclxuICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KFxyXG4gICAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnN0b3AsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkZpbmlzaCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRmluaXNoKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvblJlamVjdCA9IGUgPT4ge1xyXG4gICAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMuc3RvcCwgdGhpcyk7XHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdChcclxuICAgICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5zdG9wLFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBlbmNvdW50ZXJlZCBhbiB1bmV4cGVjdGVkIGVycm9yOiAke2V9YFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkVycm9yID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25FcnJvcihlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvbkNhbmNlbCA9IHZhbHVlID0+IHtcclxuICAgICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLmludGVycnVwdCwgdGhpcyk7XHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdChcclxuICAgICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5pbnRlcnJ1cHQsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvbkludGVycnVwdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uSW50ZXJydXB0KHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9wcm9taXNlID0gbmV3IERlZmVycmVkKHVuZGVmaW5lZCwgb25SZXNvbHZlLCBvblJlamVjdCwgb25DYW5jZWwpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBzcGVlY2ggaGFzIHJlYWNoZWQgaXQncyBlbmQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgX2NoZWNrRmluaXNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZG9uZSAmJiB0aGlzLl9sb2NhbFRpbWUgPj0gdGhpcy5fZW5kVGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHBsYXliYWNrIHN0YXRlIG9mIHRoZSBhdWRpby5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldCBwbGF5aW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsYXlpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB0ZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldCB0ZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RleHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBzcGVlY2htYXJrcyBhcnJheSBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtBcnJheS48T2JqZWN0Pn1cclxuICAgKi9cclxuICBnZXQgc3BlZWNobWFya3MoKSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMuX3NwZWVjaG1hcmtzXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIG9mZnNldCBzcGVlY2htYXJrIGVtaXNzaW9uLlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0IHNwZWVjaG1hcmtPZmZzZXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlZWNobWFya09mZnNldCAvIDEwMDA7XHJcbiAgfVxyXG5cclxuICBzZXQgc3BlZWNobWFya09mZnNldChvZmZzZXQpIHtcclxuICAgIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgPSBvZmZzZXQgKiAxMDAwOyAvLyBTdG9yZSBhcyBtaWxsaXNlY29uZHNcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgc3BlZWNobWFyayBtZXNzYWdlcyBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZCBpbiBzeW5jIHdpdGggYXVkaW8uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFRpbWUgLSBDdXJyZW50IGdsb2JhbCB0aW1lIHdoZW4gdXBkYXRlIHdhcyBjYWxsZWQuXHJcbiAgICovXHJcbiAgdXBkYXRlKGN1cnJlbnRUaW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuX3BsYXlpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBsb2NhbCBhdWRpbyB0aW1lXHJcbiAgICB0aGlzLl9sb2NhbFRpbWUgPSBjdXJyZW50VGltZSAtIHRoaXMuX3N0YXJ0VGltZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2RvbmUpIHtcclxuICAgICAgLy8gRW1pdCBzcGVlY2htYXJrIG1lc3NhZ2VzIGZvciBtYXJrcyB1cCB0byB0aGUgY3VycmVudCB0aW1lXHJcbiAgICAgIHdoaWxlIChcclxuICAgICAgICAhdGhpcy5fZG9uZSAmJlxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRNYXJrLnRpbWUgKyB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0IDw9IHRoaXMuX2xvY2FsVGltZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLl9zcGVha2VyLmVtaXQoXHJcbiAgICAgICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UU1t0aGlzLl9jdXJyZW50TWFyay50eXBlXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgc3BlZWNoOiB0aGlzLFxyXG4gICAgICAgICAgICBtYXJrOiB0aGlzLl9jdXJyZW50TWFyayxcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHt2YWx1ZSwgZG9uZX0gPSB0aGlzLl9tYXJrSXRlci5uZXh0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRNYXJrID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5fZG9uZSA9IGRvbmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBFbmQgcGxheWJhY2tcclxuICAgIGlmICh0aGlzLl9jaGVja0ZpbmlzaGVkKCkpIHtcclxuICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQbGF5IHRoZSBzcGVlY2ggZnJvbSB0aGUgYmVnaW5uaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRUaW1lIC0gQ3VycmVudCBnbG9iYWwgdGltZSB3aGVuIHBsYXkgd2FzIGNhbGxlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIHNwZWVjaFxyXG4gICAqIHByb21pc2UgcmVzb2x2ZXMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2hcclxuICAgKiBlbmNvdW50ZXJzIGFuZCBlcnJvciBkdXJpbmcgcGxheWJhY2suXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uSW50ZXJydXB0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoXHJcbiAgICogaXMgY2FuY2VsZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IFJlc29sdmVzIG9uY2UgdGhlIHNwZWVjaCByZWFjaGVzIHRoZSBlbmQgb2YgcGxheWJhY2suXHJcbiAgICovXHJcbiAgcGxheShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICB0aGlzLl9yZXNldChjdXJyZW50VGltZSk7XHJcbiAgICB0aGlzLl9wbGF5aW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheSwgdGhpcyk7XHJcbiAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheSwgdGhpcyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVByb21pc2Uob25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBzcGVlY2ggYXQgdGhlIGN1cnJlbnQgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50VGltZSAtIEN1cnJlbnQgZ2xvYmFsIHRpbWUgd2hlbiBwYXVzZSB3YXMgY2FsbGVkLlxyXG4gICAqL1xyXG4gIHBhdXNlKGN1cnJlbnRUaW1lKSB7XHJcbiAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLl9wYXVzZVRpbWUgPSBjdXJyZW50VGltZTtcclxuXHJcbiAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucGF1c2UsIHRoaXMpO1xyXG4gICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KFxyXG4gICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5wYXVzZSxcclxuICAgICAgdGhpc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3VtZSB0aGUgc3BlZWNoIGF0IHRoZSBjdXJyZW50IHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFRpbWUgLSBDdXJyZW50IGdsb2JhbCB0aW1lIHdoZW4gcmVzdW1lIHdhcyBjYWxsZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBzcGVlY2hcclxuICAgKiBwcm9taXNlIHJlc29sdmVzLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoXHJcbiAgICogZW5jb3VudGVycyBhbmQgZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkludGVycnVwdCAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaFxyXG4gICAqIGlzIGNhbmNlbGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyBvbmNlIHRoZSBzcGVlY2ggcmVhY2hlcyB0aGUgZW5kIG9mIHBsYXliYWNrLlxyXG4gICAqL1xyXG4gIHJlc3VtZShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICAvLyBQbGF5IGZyb20gdGhlIGJlZ2lubmluZyBpZiB0aGUgc3BlZWNoIGhhc24ndCBwbGF5ZWQgeWV0XHJcbiAgICBpZiAoIXRoaXMuX3Byb21pc2UpIHtcclxuICAgICAgdGhpcy5fcmVzZXQoY3VycmVudFRpbWUpO1xyXG4gICAgICB0aGlzLl9jcmVhdGVQcm9taXNlKG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcGxheWluZyA9IHRydWU7XHJcbiAgICB0aGlzLl9zdGFydFRpbWUgKz0gY3VycmVudFRpbWUgLSB0aGlzLl9wYXVzZVRpbWU7XHJcblxyXG4gICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnJlc3VtZSwgdGhpcyk7XHJcbiAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQoXHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnJlc3VtZSxcclxuICAgICAgdGhpc1xyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbmNlbHMgcGxheWJhY2sgb2YgdGhlIHNwZWVjaCBhdCB0aGUgY3VycmVudCB0aW1lLiBDYW5jZWwgdGhlIHNwZWVjaCBwcm9taXNlLlxyXG4gICAqL1xyXG4gIGNhbmNlbCgpIHtcclxuICAgIGlmICh0aGlzLl9wcm9taXNlKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2UuY2FuY2VsKCk7XHJcbiAgICAgIHRoaXMuX3Byb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgdGhlIHNwZWVjaCBhbmQgcmVzZXQgdGltZSB0byB0aGUgYmVnaW5uaW5nLiBSZXNvbHZlIHRoZSBzcGVlY2ggcHJvbWlzZS5cclxuICAgKi9cclxuICBzdG9wKCkge1xyXG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgIHRoaXMuX3Byb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0U3BlZWNoO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdFNwZWVjaCBmcm9tICcuL0Fic3RyYWN0U3BlZWNoJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgYnVpbHQtaW4gY2xhc3MgZm9yIGFzeW5jaHJvbm91cyBQcm9taXNlcy5cclxuICogQGV4dGVybmFsIEF1ZGlvXHJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxBdWRpb0VsZW1lbnQvQXVkaW9cclxuICovXHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgQWJzdHJhY3RTcGVlY2hcclxuICogQGFsaWFzIGNvcmUvU3BlZWNoXHJcbiAqL1xyXG5jbGFzcyBTcGVlY2ggZXh0ZW5kcyBBYnN0cmFjdFNwZWVjaCB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1RleHRUb1NwZWVjaH0gc3BlYWtlciAtIFRoZSBvd25lciBvZiB0aGUgU3BlZWNoIHRoYXQgd2lsbCBlbWl0IHNwZWVjaG1hcmtcclxuICAgKiBtZXNzYWdlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW3NwZWVjaG1hcmtzPVtdXSAtIEFuIGFycmF5IG9mIHNwZWVjaG1hcmsgb2JqZWN0cyByZXByZXNlbnRpbmdcclxuICAgKiB0aGUgdGV4dCBhbmQgdGltaW5nIG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1ZGlvQ29uZmlnIC0gT2JqZWN0IGNvbnRhaW5pbmcgYXVkaW8gYW5kIHVybC5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOkF1ZGlvfSBhdWRpb0NvbmZpZy5hdWRpbyAtIFBsYXlhYmxlIGF1ZGlvIG9iamVjdC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihzcGVha2VyLCB0ZXh0LCBzcGVlY2htYXJrcyA9IFtdLCBhdWRpb0NvbmZpZykge1xyXG4gICAgc3VwZXIoc3BlYWtlciwgdGV4dCwgc3BlZWNobWFya3MpO1xyXG4gICAgdGhpcy5fYXVkaW8gPSBhdWRpb0NvbmZpZy5hdWRpbztcclxuXHJcbiAgICAvLyBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGF1ZGlvIGhhcyBmaW5pc2hlZCBwbGF5aW5nIHRocm91Z2hcclxuICAgIHRoaXMuX2F1ZGlvLm9uZW5kZWQgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvRmluaXNoZWQgPSB0cnVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMuX2F1ZGlvRmluaXNoZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgX2NoZWNrRmluaXNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9GaW5pc2hlZCAmJiBzdXBlci5fY2hlY2tGaW5pc2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgcGxheWFibGUgYXVkaW8gZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7ZXh0ZXJuYWw6QXVkaW99XHJcbiAgICovXHJcbiAgZ2V0IGF1ZGlvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgYXVkaW8gdm9sdW1lIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgdm9sdW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvLnZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGF1ZGlvIHZvbHVtZSBmb3IgdGhlIHNwZWVjaC5cclxuICAgKi9cclxuICBzZXQgdm9sdW1lKHZvbHVtZSkge1xyXG4gICAgdGhpcy5fYXVkaW8udm9sdW1lID0gdm9sdW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBhdWRpbydzIGN1cnJlbnQgbG9jYWwgdGltZSBhbmQgcGxheSBpdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3BsYXlBdWRpbygpIHtcclxuICAgIGlmICh0aGlzLl9zcGVlY2htYXJrT2Zmc2V0IDwgMCkge1xyXG4gICAgICB0aGlzLl9hdWRpby5jdXJyZW50VGltZSA9IHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQ7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9wbGF5aW5nKSB7XHJcbiAgICAgICAgICB0aGlzLl9hdWRpby5jdXJyZW50VGltZSA9XHJcbiAgICAgICAgICAgICh0aGlzLl9sb2NhbFRpbWUgKyB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0KSAvIDEwMDA7XHJcbiAgICAgICAgICB0aGlzLl9hdWRpby5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAtdGhpcy5fc3BlZWNobWFya09mZnNldCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9hdWRpby5jdXJyZW50VGltZSA9IDA7XHJcbiAgICAgIHRoaXMuX2F1ZGlvLnBsYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBhdWRpbyBvbmNlIGl0IGlzIHBsYXlhYmxlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfcGF1c2VBdWRpbygpIHtcclxuICAgIHRoaXMuX2F1ZGlvLnBsYXkoKS50aGVuKCgpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLl9wbGF5aW5nKSB7XHJcbiAgICAgICAgdGhpcy5fYXVkaW8ucGF1c2UoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwbGF5KGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpIHtcclxuICAgIHRoaXMuX2F1ZGlvRmluaXNoZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX3BsYXlBdWRpbygpO1xyXG5cclxuICAgIHJldHVybiBzdXBlci5wbGF5KGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpO1xyXG4gIH1cclxuXHJcbiAgcGF1c2UoY3VycmVudFRpbWUpIHtcclxuICAgIHRoaXMuX3BhdXNlQXVkaW8oKTtcclxuICAgIHN1cGVyLnBhdXNlKGN1cnJlbnRUaW1lKTtcclxuICB9XHJcblxyXG4gIHJlc3VtZShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICB0aGlzLl9hdWRpb0ZpbmlzaGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9hdWRpby5wbGF5KCk7XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnJlc3VtZShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuX3BhdXNlQXVkaW8oKTtcclxuICAgIHN1cGVyLmNhbmNlbCgpO1xyXG4gIH1cclxuXHJcbiAgc3RvcCgpIHtcclxuICAgIHRoaXMuX3BhdXNlQXVkaW8oKTtcclxuICAgIHRoaXMuX2F1ZGlvLmN1cnJlbnRUaW1lID0gMDtcclxuICAgIHN1cGVyLnN0b3AoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNwZWVjaDtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQ29yZVNwZWVjaCBmcm9tICdjb3JlL2F3c3BhY2svU3BlZWNoJztcclxuXHJcbi8qKlxyXG4gKiBUaHJlZWpzIEF1ZGlvIG9iamVjdFxyXG4gKiBAZXh0ZXJuYWwgXCJUSFJFRS5BdWRpb1wiXHJcbiAqIEBzZWUgaHR0cHM6Ly90aHJlZWpzLm9yZy9kb2NzLyNhcGkvZW4vYXVkaW8vQXVkaW9cclxuICovXHJcblxyXG4vKipcclxuICogVGhyZWVqcyBQb3NpdGlvbmFsQXVkaW8gb2JqZWN0XHJcbiAqIEBleHRlcm5hbCBcIlRIUkVFLlBvc2l0aW9uYWxBdWRpb1wiXHJcbiAqIEBzZWUgaHR0cHM6Ly90aHJlZWpzLm9yZy9kb2NzLyNhcGkvZW4vYXVkaW8vUG9zaXRpb25hbEF1ZGlvXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIGNvcmUvU3BlZWNoXHJcbiAqIEBhbGlhcyB0aHJlZS5qcy9TcGVlY2hcclxuICovXHJcbmNsYXNzIFNwZWVjaCBleHRlbmRzIENvcmVTcGVlY2gge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHt0aHJlZS5qcy9UZXh0VG9TcGVlY2hGZWF0dXJlfSBzcGVha2VyIC0gVGhlIG93bmVyIG9mIHRoZSBTcGVlY2ggdGhhdFxyXG4gICAqIHdpbGwgZW1pdCBzcGVlY2htYXJrIG1lc3NhZ2VzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBzcGVlY2htYXJrcyAtIEFuIGFycmF5IG9mIHNwZWVjaG1hcmsgb2JqZWN0cyByZXByZXNlbnRpbmdcclxuICAgKiB0aGUgdGV4dCBhbmQgdGltaW5nIG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1ZGlvQ29uZmlnIC0gT2JqZWN0IGNvbnRhaW5pbmcgYXVkaW8gYW5kIHVybC5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOkF1ZGlvfSBhdWRpb0NvbmZpZy5hdWRpbyAtIFBsYXlhYmxlIGF1ZGlvIG9iamVjdC5cclxuICAgKiBAcGFyYW0geyhleHRlcm5hbDpcIlRIUkVFLkF1ZGlvXCJ8ZXh0ZXJuYWw6XCJUSFJFRS5Qb3NpdGlvbmFsQXVkaW9cIil9IGF1ZGlvQ29uZmlnLnRocmVlQXVkaW8gLVxyXG4gICAqIFRocmVlLmpzIGF1ZGlvIG9iamVjdC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcih0ZXh0VG9TcGVlY2gsIHRleHQsIHNwZWVjaG1hcmtzID0gW10sIGF1ZGlvQ29uZmlnKSB7XHJcbiAgICBzdXBlcih0ZXh0VG9TcGVlY2gsIHRleHQsIHNwZWVjaG1hcmtzLCBhdWRpb0NvbmZpZyk7XHJcbiAgICB0aGlzLl90aHJlZUF1ZGlvID0gYXVkaW9Db25maWcudGhyZWVBdWRpbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIFRocmVlLmpzIGF1ZGlvIG9iamVjdCBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHsoZXh0ZXJuYWw6XCJUSFJFRS5BdWRpb1wifGV4dGVybmFsOlwiVEhSRUUuUG9zaXRpb25hbEF1ZGlvXCIpfVxyXG4gICAqL1xyXG4gIGdldCBhdWRpbygpIHtcclxuICAgIHJldHVybiB0aGlzLl90aHJlZUF1ZGlvO1xyXG4gIH1cclxuXHJcbiAgX3BhdXNlQXVkaW8oKSB7XHJcbiAgICB0aGlzLl9hdWRpby5wYXVzZSgpO1xyXG4gIH1cclxuXHJcbiAgcGxheShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KSB7XHJcbiAgICAvLyBSZS1jb25uZWN0IHRoZSBBdWRpbyBlbGVtZW50IHRvIHN0b3AgcGxheWJhY2tcclxuICAgIHRoaXMuX3RocmVlQXVkaW8uZGlzY29ubmVjdCgpO1xyXG4gICAgdGhpcy5fdGhyZWVBdWRpby5jb25uZWN0KCk7XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnBsYXkoY3VycmVudFRpbWUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGVlY2g7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnY29yZS9BYnN0cmFjdEhvc3RGZWF0dXJlJztcclxuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJ2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uVXRpbHMnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgU3BlZWNoIGZyb20gJy4vQWJzdHJhY3RTcGVlY2gnO1xyXG5pbXBvcnQgVGV4dFRvU3BlZWNoVXRpbHMgZnJvbSAnLi9UZXh0VG9TcGVlY2hVdGlscyc7XHJcblxyXG4vKipcclxuICogVGhlIEFtYXpvbiBQb2xseSBzZXJ2aWNlIG9iamVjdC5cclxuICogQGV4dGVybmFsIFBvbGx5XHJcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvbGF0ZXN0L0FXUy9Qb2xseS5odG1sXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBwcmVzaWduZXIgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgcHJlc2lnbmVkIHVybHMgZm9yIHRoZSBQb2xseSBzZXJ2aWNlLlxyXG4gKiBAZXh0ZXJuYWwgUHJlc2lnbmVyXHJcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvbGF0ZXN0L0FXUy9Qb2xseS9QcmVzaWduZXIuaHRtbFxyXG4gKi9cclxuXHJcbi8vIEF2YWlsYWJsZSBvcHRpb25zIGZvciBQb2xseVxyXG5jb25zdCBlbmdpbmVzID0gWydzdGFuZGFyZCcsICduZXVyYWwnXTtcclxuY29uc3QgYXVkaW9Gb3JtYXRzID0gWydtcDMnLCAnb2dnX3ZvcmJpcycsICdwY20nXTtcclxuY29uc3Qgc3BlZWNobWFya1R5cGVzID0gWydzZW50ZW5jZScsICdzc21sJywgJ3Zpc2VtZScsICd3b3JkJ107XHJcbmNvbnN0IHNhbXBsZVJhdGVzID0ge1xyXG4gIG1wMzoge1xyXG4gICAgcmF0ZXM6IFsnODAwMCcsICcxNjAwMCcsICcyMjA1MCcsICcyNDAwMCddLFxyXG4gICAgZGVmYXVsdHM6IHtcclxuICAgICAgc3RhbmRhcmQ6ICcyMDUwJyxcclxuICAgICAgbmV1cmFsOiAnMjQwMCcsXHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgcGNtOiB7XHJcbiAgICByYXRlczogWyc4MDAwJywgJzE2MDAwJ10sXHJcbiAgICBkZWZhdWx0czoge1xyXG4gICAgICBzdGFuZGFyZDogJzE2MDAnLFxyXG4gICAgICBuZXVyYWw6ICcxNjAwJyxcclxuICAgIH0sXHJcbiAgfSxcclxufTtcclxuc2FtcGxlUmF0ZXMub2dnX3ZvcmJpcyA9IHNhbXBsZVJhdGVzLm1wMztcclxubGV0IGF3c1ZlcnNpb247XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBmb3IgdHVybmluZyB0ZXh0IGlucHV0IGludG8gcGxheWFibGUgYXVkaW8uIFRoZXJlIHNob3VsZCBiZSBvbmUgaW5zdGFuY2VcclxuICogcGVyIHNwZWFrZXIsIGVhY2ggaW5zdGFuY2UgY2FuIHBsYXkgb25seSBvbmUgcGllY2Ugb2YgdGV4dCBhdCBhIHRpbWUuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcclxuICogQGFic3RyYWN0XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7KG51bWJlcnx1bmRlZmluZWQpfSBBV1NfVkVSU0lPTiAtIEdldHMgdGhlIHZlcnNpb24gb2YgQVdTIFNESyBiZWluZ1xyXG4gKiB1c2VkLiBXaWxsIGJlIHVuZGVmaW5lZCB1bnRpbCBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX01JTl9ORVVSQUxfVkVSU0lPTj0nMi41MDMnXSAtIEdldHMgdGhlIG1pbmltdW0gdmVyc2lvblxyXG4gKiBvZiB0aGUgQVdTIFNESyB0aGF0IGlzIG5lY2Vzc2FyeSB0byB1c2UgbmV1cmFsIHZvaWNlcyB3aXRoIEFXUyBQb2xseS5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFBPTExZX0RFRkFVTFRTIC0gRGVmYXVsdCB2YWx1ZXMgdG8gdXNlIHdpdGggY2FsbHMgdG8ge0BsaW5rIGV4dGVybmFsOlBvbGx5fS5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5FbmdpbmU9J3N0YW5kYXJkJ11cclxuICogQHByb3BlcnR5IHtBcnJheS48c3RyaW5nPn0gW1BPTExZX0RFRkFVTFRTLkxleGljb25OYW1lcz1bXV1cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5PdXRwdXRGb3JtYXQ9J21wMyddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuU2FtcGxlUmF0ZT0nMjIwNTAnXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLlRleHQ9JyddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuVGV4dFR5cGU9J3NzbWwnXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLlZvaWNlSWQ9J0FteSddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuTGFuZ3VhZ2VDb2RlPSdlbi1HQiddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuTGFuZ3VhZ2VOYW1lPSdCcml0aXNoIEVuZ2xpc2gnXVxyXG4gKiBAcHJvcGVydHkge0FycmF5LjxzdHJpbmc+fSBbUE9MTFlfVk9JQ0VTPVtdXSAtIEFuIGFycmF5IG9mIHZvaWNlcyBhdmFpbGFibGUgaW5cclxuICogUG9sbHkuIFdpbGwgYmUgZW1wdHkgdW50aWwgW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4gU2VlIFtQb2xseSBEb2N1bWVudGF0aW9uXXtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcG9sbHkvbGF0ZXN0L2RnL3ZvaWNlbGlzdC5odG1sfVxyXG4gKiBmb3IgYSBmdWxsIGxpc3Qgb2YgYXZhaWxhYmxlIHZvaWNlcy5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtQT0xMWV9MQU5HVUFHRVM9e31dIC0gQW4gb2JqZWN0IHRoYXQgbWFwcyBsYW5ndWFnZSBuYW1lc1xyXG4gKiB0byBsYW5ndWFnZSBjb2RlcyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gUG9sbHkuIFdpbGwgYmUgZW1wdHkgdW50aWxcclxuICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4gU2VlIFtQb2xseSBEb2N1bWVudGF0aW9uXXtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcG9sbHkvbGF0ZXN0L2RnL1N1cHBvcnRlZExhbmd1YWdlLmh0bWx9XHJcbiAqIGZvciBhIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIGFuZCBjb3JyZXNwb25kaW5nIGNvZGVzLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1BPTExZX0xBTkdVQUdFX0NPREVTPXt9XSAtIEFuIG9iamVjdCB0aGF0IG1hcHMgbGFuZ3VhZ2UgY29kZXNcclxuICogdG8gbGFuZ3VhZ2UgbmFtZXMgdGhhdCBhcmUgYXZhaWxhYmxlIGluIFBvbGx5LiBXaWxsIGJlIGVtcHR5IHVudGlsXHJcbiAqIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIFNlZSBbUG9sbHkgRG9jdW1lbnRhdGlvbl17QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3BvbGx5L2xhdGVzdC9kZy9TdXBwb3J0ZWRMYW5ndWFnZS5odG1sfVxyXG4gKiBmb3IgYSBmdWxsIGxpc3Qgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyBhbmQgY29ycmVzcG9uZGluZyBjb2Rlcy5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UUyAtIEJ1aWx0LWluIG1lc3NhZ2VzIHRoYXQgdGhlIGZlYXR1cmUgZW1pdHMuIFdoZW4gdGhlXHJcbiAqIGZlYXR1cmUgaXMgYWRkZWQgdG8gYSB7QGxpbmsgY29yZS9Ib3N0T2JqZWN0fSwgZXZlbnQgbmFtZXMgd2lsbCBiZSBwcmVmaXhlZCBieSB0aGVcclxuICogbmFtZSBvZiB0aGUgZmVhdHVyZSBjbGFzcyArICcuJy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVhZHk9b25SZWFkeUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnBsYXk9b25QbGF5RXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtwbGF5XXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGxheX0uIFRoZSBzcGVlY2ggdGhhdCB3YXMgcGxheWVkXHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucGF1c2U9b25QYXVzZUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcGF1c2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwYXVzZX0uIFRoZSBzcGVlY2ggdGhhdCB3YXMgcGF1c2VkXHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVzdW1lPW9uUmVzdW1lRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtyZXN1bWVde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNyZXN1bWV9LiBUaGUgc3BlZWNoIHRoYXQgd2FzXHJcbiAqIHJlc3VtZWQgaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5pbnRlcnJ1cHQ9b25JbnRlcnJ1cHRFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgc3BlZWNoIGluIHByb2dyZXNzIGFuZCBbcGxheV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3BsYXl9XHJcbiAqIG9yIFtyZXN1bWVde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNyZXN1bWV9IGFyZSBleGVjdXRlZCBmb3IgYSBuZXcgc3BlZWNoLlxyXG4gKiBUaGUgc3BlZWNoIHRoYXQgd2FzIGludGVycnVwdGVkIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuc3RvcD1vblN0b3BFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3N0b3Bde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNzdG9wfSBhbmQgd2hlbiBhIHNwZWVjaCByZWFjaGVzXHJcbiAqIHRoZSBlbmQgb2YgcGxheWJhY2suIFRoZSBzcGVlY2ggdGhhdCB3YXMgc3RvcHBlZCBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudFxyXG4gKiB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnNlbnRlbmNlPW9uU2VudGVuY2VFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBlYWNoIHRpbWUgYSBzZW50ZW5jZSBzcGVlY2htYXJrIGlzIGVuY291bnRlcmVkIHdob3NlIHRpbWVzdGFtcCBtYXRjaGVzIHVwIHdpdGhcclxuICogdGhlIHNwZWVjaCBhdWRpbydzIGN1cnJlbnQgdGltZS4gVGhlIHNlbnRlbmNlIHNwZWVjaG1hcmsgb2JqZWN0IGlzIHN1cHBsaWVkIGFzXHJcbiAqIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMud29yZD1vbldvcmRFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBlYWNoIHRpbWUgYSB3b3JkIHNwZWVjaG1hcmsgaXMgZW5jb3VudGVyZWQgd2hvc2UgdGltZXN0YW1wIG1hdGNoZXMgdXAgd2l0aFxyXG4gKiB0aGUgc3BlZWNoIGF1ZGlvJ3MgY3VycmVudCB0aW1lLiBUaGUgd29yZCBzcGVlY2htYXJrIG9iamVjdCBpcyBzdXBwbGllZCBhc1xyXG4gKiBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnZpc2VtZT1vblZpc2VtZUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGVhY2ggdGltZSBhIHZpc2VtZSBzcGVlY2htYXJrIGlzIGVuY291bnRlcmVkIHdob3NlIHRpbWVzdGFtcCBtYXRjaGVzIHVwIHdpdGhcclxuICogdGhlIHNwZWVjaCBhdWRpbydzIGN1cnJlbnQgdGltZS4gVGhlIHZpc2VtZSBzcGVlY2htYXJrIG9iamVjdCBpcyBzdXBwbGllZCBhc1xyXG4gKiBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnNzbWw9b25Tc21sRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogZWFjaCB0aW1lIGEgc3NtbCBzcGVlY2htYXJrIGlzIGVuY291bnRlcmVkIHdob3NlIHRpbWVzdGFtcCBtYXRjaGVzIHVwIHdpdGhcclxuICogdGhlIHNwZWVjaCBhdWRpbydzIGN1cnJlbnQgdGltZS4gVGhlIHNzbWwgc3BlZWNobWFyayBvYmplY3QgaXMgc3VwcGxpZWQgYXNcclxuICogYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gU0VSVklDRVMgLSBBV1Mgc2VydmljZXMgdGhhdCBhcmUgbmVjZXNzYXJ5IGZvciB0aGUgZmVhdHVyZVxyXG4gKiB0byBmdW5jdGlvbi5cclxuICogQHByb3BlcnR5IHtleHRlcm5hbDpQb2xseX0gU0VSVklDRVMucG9sbHkgLSBUaGUgUG9sbHkgc2VydmljZSB0aGF0IGlzIHVzZWRcclxuICogdG8gc3ludGhlc2l6ZSBzcGVlY2htYXJrcy4gV2lsbCBiZSB1bmRlZmluZWQgdW50aWwgW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZFxyXG4gKiBAcHJvcGVydHkge2V4dGVybmFsOlByZXNpZ25lcn0gU0VSVklDRVMucHJlc2lnbmVyIC0gVGhlIFBvbGx5IFByZXNpZ25lclxyXG4gKiBvYmplY3QgdGhhdCBpcyB1c2VkIHRvIHN5bnRoZXNpemUgc3BlZWNoIGF1ZGlvLiBXaWxsIGJlIHVuZGVmaW5lZCB1bnRpbFxyXG4gKiBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLlxyXG4gKi9cclxuY2xhc3MgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2NvcmUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3Qgb2JqZWN0IG1hbmFnaW5nIHRoZSBmZWF0dXJlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgdGhhdCB3aWxsIGJlIHNlbnQgdG8gUG9sbHkgZm9yIGVhY2ggc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy52b2ljZSAtIFRoZSBuYW1lIG9mIHRoZSBQb2xseSB2b2ljZSB0byB1c2UgZm9yIGFsbCBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLmVuZ2luZSAtIFRoZSBuYW1lIG9mIHRoZSBQb2xseSBlbmdpbmUgdG8gdXNlIGZvciBhbGwgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5sYW5ndWFnZSAtIFRoZSBuYW1lIG9mIHRoZSBsYW5ndWFnZSB0byB1c2UgZm9yIGFsbCBzcGVlY2guXHJcbiAgICogQHBhcmFtIHthdWRpb0Zvcm1hdH0gW29wdGlvbnMuYXVkaW9Gb3JtYXQ9J21wMyddIC0gVGhlIGZvcm1hdCB0byB1c2UgZm9yIGdlbmVyYXRlZFxyXG4gICAqIGF1ZGlvIGZvciBhbGwgc3BlZWNoZXMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLnNhbXBsZVJhdGUgLSBUaGUgc2FtcGxlIHJhdGUgZm9yIGF1ZGlvIGZpbGVzIGZvciBhbGxcclxuICAgKiBzcGVlY2hlcy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc3BlZWNobWFya09mZnNldD0wXSAtIEFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgdG9cclxuICAgKiBvZmZzZXQgc3BlZWNobWFyayBldmVudCBlbWlzc2lvbiBmcm9tIHRoZSBhdWRpby5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWluRW5kTWFya0R1cmF0aW9uPS4wNV0gLSBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZVxyXG4gICAqIGluIHNlY29uZHMgdGhhdCB0aGUgbGFzdCBzcGVlY2htYXJrIG9mIGVhY2ggdHlwZSBpbiBhIHNwZWVjaCBjYW4gaGF2ZSBpdHNcclxuICAgKiBkdXJhdGlvbiBwcm9wZXJ0eSBzZXQgdG8uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnZvbHVtZT0xXSAtIFRoZSBkZWZhdWx0IHZvbHVtZSB0byBwbGF5IHNwZWVjaCBhdWRpb1xyXG4gICAqIHdpdGguXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBob3N0LFxyXG4gICAgb3B0aW9ucyA9IHtcclxuICAgICAgdm9pY2U6IHVuZGVmaW5lZCxcclxuICAgICAgZW5naW5lOiB1bmRlZmluZWQsXHJcbiAgICAgIGxhbmd1YWdlOiB1bmRlZmluZWQsXHJcbiAgICAgIGF1ZGlvRm9ybWF0OiAnbXAzJyxcclxuICAgICAgc2FtcGxlUmF0ZTogdW5kZWZpbmVkLFxyXG4gICAgICBzcGVlY2htYXJrT2Zmc2V0OiAwLFxyXG4gICAgICBtaW5FbmRNYXJrRHVyYXRpb246IDAuMDUsXHJcbiAgICAgIHZvbHVtZTogMSxcclxuICAgIH1cclxuICApIHtcclxuICAgIHN1cGVyKGhvc3QpO1xyXG5cclxuICAgIHRoaXMuX3NwZWVjaENhY2hlID0ge307XHJcbiAgICB0aGlzLl9jdXJyZW50U3BlZWNoID0gbnVsbDtcclxuICAgIHRoaXMuX2N1cnJlbnRQcm9taXNlID0gbnVsbDtcclxuICAgIHRoaXMuX2lzVmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnNwZWVjaG1hcmtPZmZzZXQgPSBOdW1iZXIuaXNOYU4oTnVtYmVyKG9wdGlvbnMuc3BlZWNobWFya09mZnNldCkpXHJcbiAgICAgID8gMFxyXG4gICAgICA6IE51bWJlcihvcHRpb25zLnNwZWVjaG1hcmtPZmZzZXQpO1xyXG4gICAgdGhpcy5taW5FbmRNYXJrRHVyYXRpb24gPSBOdW1iZXIuaXNOYU4oTnVtYmVyKG9wdGlvbnMubWluRW5kTWFya0R1cmF0aW9uKSlcclxuICAgICAgPyAwXHJcbiAgICAgIDogTnVtYmVyKG9wdGlvbnMubWluRW5kTWFya0R1cmF0aW9uKTtcclxuICAgIHRoaXMudm9sdW1lID0gTnVtYmVyLmlzTmFOKE51bWJlcihvcHRpb25zLnZvbHVtZSkpXHJcbiAgICAgID8gMVxyXG4gICAgICA6IE51bWJlcihvcHRpb25zLnZvbHVtZSk7XHJcbiAgICB0aGlzLl9wcm9taXNlcyA9IHtcclxuICAgICAgdm9sdW1lOiBEZWZlcnJlZC5yZXNvbHZlKCksXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fdm9sdW1lUGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgLy8gU2V0IGRlZmF1bHQgb3B0aW9ucyBmb3IgZWFjaCBzcGVlY2hcclxuICAgIHRoaXMuX3ZvaWNlID0gb3B0aW9ucy52b2ljZSB8fCB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLlZvaWNlSWQ7XHJcbiAgICB0aGlzLl9sYW5ndWFnZSA9IG9wdGlvbnMubGFuZ3VhZ2UgfHwgdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5MYW5ndWFnZU5hbWU7XHJcbiAgICB0aGlzLl9lbmdpbmUgPSBlbmdpbmVzLmluY2x1ZGVzKG9wdGlvbnMuZW5naW5lKVxyXG4gICAgICA/IG9wdGlvbnMuZW5naW5lXHJcbiAgICAgIDogdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5FbmdpbmU7XHJcbiAgICB0aGlzLl9hdWRpb0Zvcm1hdCA9IGF1ZGlvRm9ybWF0cy5pbmNsdWRlcyhvcHRpb25zLmF1ZGlvRm9ybWF0KVxyXG4gICAgICA/IG9wdGlvbnMuYXVkaW9Gb3JtYXRcclxuICAgICAgOiB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLk91dHB1dEZvcm1hdDtcclxuICAgIHRoaXMuX3NhbXBsZVJhdGUgPSBzYW1wbGVSYXRlc1t0aGlzLl9hdWRpb0Zvcm1hdF0ucmF0ZXMuaW5jbHVkZXMoXHJcbiAgICAgIG9wdGlvbnMuc2FtcGxlUmF0ZVxyXG4gICAgKVxyXG4gICAgICA/IG9wdGlvbnMuc2FtcGxlUmF0ZVxyXG4gICAgICA6IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuU2FtcGxlUmF0ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3JlIFBvbGx5LCBQcmVzaWduZXIgYW5kIEFXUyBTREsgVmVyc2lvbiBmb3IgdXNlIGFjcm9zcyBhbGwgaW5zdGFuY2VzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpQb2xseX0gcG9sbHkgLSBQb2xseSBpbnN0YW5jZSB0byB1c2UgdG8gZ2VuZXJhdGUgc3BlZWNobWFya3MuXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpQcmVzaWduZXJ9IHByZXNpZ25lciAtIFByZXNpZ25lciBpbnN0YW5jZSB0byB1c2UgdG8gZ2VuZXJhdGVcclxuICAgKiBhdWRpbyBVUkxzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIC0gVmVyc2lvbiBvZiB0aGUgQVdTIFNESyB0byB1c2UgdG8gdmFsaWRhdGUgdm9pY2Ugb3B0aW9ucy5cclxuICAgKi9cclxuICBzdGF0aWMgaW5pdGlhbGl6ZVNlcnZpY2UocG9sbHksIHByZXNpZ25lciwgdmVyc2lvbikge1xyXG4gICAgLy8gTWFrZSBzdXJlIGFsbCB3ZXJlIGRlZmluZWRcclxuICAgIGlmIChcclxuICAgICAgcG9sbHkgPT09IHVuZGVmaW5lZFxyXG4gICAgICB8fCBwcmVzaWduZXIgPT09IHVuZGVmaW5lZFxyXG4gICAgICB8fCB2ZXJzaW9uID09PSB1bmRlZmluZWRcclxuICAgICkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ0Nhbm5vdCBpbml0aWFsaXplIFRleHRUb1NwZWVjaCBmZWF0dXJlLiBBbGwgYXJndW1lbnRzIG11c3QgYmUgZGVmaW5lZC4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIHN1bWVyaWFuIGhvc3RzIHVzZXItYWdlbnRcclxuICAgIGlmIChwb2xseS5jb25maWcpIHtcclxuICAgICAgcG9sbHkuY29uZmlnLmN1c3RvbVVzZXJBZ2VudCA9IHRoaXMuX3dpdGhDdXN0b21Vc2VyQWdlbnQoXHJcbiAgICAgICAgcG9sbHkuY29uZmlnLmN1c3RvbVVzZXJBZ2VudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXNpZ25lci5zZXJ2aWNlICYmIHByZXNpZ25lci5zZXJ2aWNlLmNvbmZpZykge1xyXG4gICAgICBwcmVzaWduZXIuc2VydmljZS5jb25maWcuY3VzdG9tVXNlckFnZW50ID0gdGhpcy5fd2l0aEN1c3RvbVVzZXJBZ2VudChcclxuICAgICAgICBwcmVzaWduZXIuc2VydmljZS5jb25maWcuY3VzdG9tVXNlckFnZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faXNSZWFkeSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFN0b3JlIHBhcmFtZXRlcnNcclxuICAgIHRoaXMuU0VSVklDRVMucG9sbHkgPSBwb2xseTtcclxuICAgIHRoaXMuU0VSVklDRVMucHJlc2lnbmVyID0gcHJlc2lnbmVyO1xyXG4gICAgYXdzVmVyc2lvbiA9IHZlcnNpb247XHJcblxyXG4gICAgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgcG9sbHkgb2JqZWN0c1xyXG4gICAgY29uc3QgYXZhaWxhYmxlVm9pY2VzID0gdGhpcy5QT0xMWV9WT0lDRVM7XHJcbiAgICBhdmFpbGFibGVWb2ljZXMubGVuZ3RoID0gMDtcclxuXHJcbiAgICBjb25zdCBhdmFpbGFibGVMYW5ndWFnZXMgPSB0aGlzLlBPTExZX0xBTkdVQUdFUztcclxuICAgIE9iamVjdC5rZXlzKGF2YWlsYWJsZUxhbmd1YWdlcykuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgZGVsZXRlIGF2YWlsYWJsZUxhbmd1YWdlc1tuYW1lXTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGF2YWlsYWJsZUxhbmd1YWdlQ29kZXMgPSB0aGlzLlBPTExZX0xBTkdVQUdFX0NPREVTO1xyXG4gICAgT2JqZWN0LmtleXMoYXZhaWxhYmxlTGFuZ3VhZ2VDb2RlcykuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgZGVsZXRlIGF2YWlsYWJsZUxhbmd1YWdlQ29kZXNbbmFtZV07XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBSZS1wb3B1bGF0ZSBhY2NvcmRpbmcgdG8gdmVyc2lvblxyXG4gICAgY29uc3QgbWluTmV1cmFsU2RrID0gdGhpcy5QT0xMWV9NSU5fTkVVUkFMX1ZFUlNJT047XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuU0VSVklDRVMucG9sbHlcclxuICAgICAgLmRlc2NyaWJlVm9pY2VzKClcclxuICAgICAgLnByb21pc2UoKVxyXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgY29uc3QgYWxsQ29kZXMgPSB7fTtcclxuXHJcbiAgICAgICAgcmVzcG9uc2UuVm9pY2VzLmZvckVhY2godm9pY2UgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB2b2ljZS5TdXBwb3J0ZWRFbmdpbmVzLmluY2x1ZGVzKCdzdGFuZGFyZCcpXHJcbiAgICAgICAgICAgIHx8IHZlcnNpb24gPj0gbWluTmV1cmFsU2RrXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgYXZhaWxhYmxlVm9pY2VzLnB1c2godm9pY2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGF2YWlsYWJsZVZvaWNlcy5mb3JFYWNoKHZvaWNlID0+IHtcclxuICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzW3ZvaWNlLkxhbmd1YWdlTmFtZV0gPSB2b2ljZS5MYW5ndWFnZUNvZGU7XHJcbiAgICAgICAgICAgIGFsbENvZGVzW3ZvaWNlLkxhbmd1YWdlQ29kZV0gPSB2b2ljZS5MYW5ndWFnZU5hbWU7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoYXZhaWxhYmxlTGFuZ3VhZ2VzKS5mb3JFYWNoKChbbmFtZSwgY29kZV0pID0+IHtcclxuICAgICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlQ29kZXNbY29kZV0gPSBuYW1lO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBOb3RpZnkgdGhhdCB3ZSdyZSByZWFkeSB0byBnZW5lcmF0ZSBzcGVlY2hlc1xyXG4gICAgICAgIHRoaXMuX2lzUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLkVWRU5UUy5yZWFkeSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBjbGFzcyBpcyBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgc3BlZWNoIGF1ZGlvLiBQb2xseSxcclxuICAgKiBQcmVzaWduZXIgYW5kIEFXUyBTREsgdmVyc2lvbiBudW1iZXIgbXVzdCBoYXZlIGJlZW4gZGVmaW5lZCB1c2luZ1xyXG4gICAqIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXQgaXNSZWFkeSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1JlYWR5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdGV4dCBvZiB0aGUgY3VycmVudGx5IHBsYXlpbmcgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBnZXQgY3VycmVudFNwZWVjaCgpIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3BlZWNoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3BlZWNoLnRleHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIG9mZnNldCBzcGVlY2htYXJrIGVtaXNzaW9uLlxyXG4gICAqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgc3BlZWNobWFya09mZnNldCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0O1xyXG4gIH1cclxuXHJcbiAgc2V0IHNwZWVjaG1hcmtPZmZzZXQob2Zmc2V0KSB7XHJcbiAgICB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0ID0gb2Zmc2V0O1xyXG5cclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3BlZWNoKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2guc3BlZWNobWFya09mZnNldCA9IG9mZnNldDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgdGhhdCB0aGUgbGFzdFxyXG4gICAqIHNwZWVjaG1hcmsgb2YgZWFjaCB0eXBlIGluIGEgc3BlZWNoIGNhbiBoYXZlIGl0cyBkdXJhdGlvbiBwcm9wZXJ0eSBzZXQgdG8uXHJcbiAgICpcclxuICAgKiBAdHlwZSBudW1iZXJcclxuICAgKi9cclxuICBnZXQgbWluRW5kTWFya0R1cmF0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX21pbkVuZE1hcmtEdXJhdGlvbiAvIDEwMDA7XHJcbiAgfVxyXG5cclxuICBzZXQgbWluRW5kTWFya0R1cmF0aW9uKGR1cmF0aW9uKSB7XHJcbiAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24gPSBkdXJhdGlvbiAqIDEwMDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBlbmRzIHRoZSBTdW1lcmlhbiBIb3N0cyBjdXN0b20gdXNlci1hZ2VudCB0byBhIHN0cmluZyBpZiBpdCBpcyBub3RcclxuICAgKiBhbHJlYWR5IHByZXNlbnQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRVc2VyQWdlbnQgLSBTdHJpbmcgdG8gYXBwZW5kIHRvIGlmIG5lZWRlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgc3RhdGljIF93aXRoQ3VzdG9tVXNlckFnZW50KGN1cnJlbnRVc2VyQWdlbnQpIHtcclxuICAgIGNvbnN0IHN1bWVyaWFuSG9zdHNVc2VyQWdlbnQgPSAncmVxdWVzdC1zb3VyY2UvU3VtZXJpYW5Ib3N0cyc7XHJcblxyXG4gICAgaWYgKGN1cnJlbnRVc2VyQWdlbnQgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gc3VtZXJpYW5Ib3N0c1VzZXJBZ2VudDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY3VycmVudFVzZXJBZ2VudC5pbmRleE9mKHN1bWVyaWFuSG9zdHNVc2VyQWdlbnQpICE9PSAtMSkge1xyXG4gICAgICByZXR1cm4gY3VycmVudFVzZXJBZ2VudDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY3VycmVudFVzZXJBZ2VudC5jb25jYXQoJyAnLCBzdW1lcmlhbkhvc3RzVXNlckFnZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIGVuZ2luZSB0eXBlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQVdTIFNESyB2ZXJzaW9uLiBJZiBpdFxyXG4gICAqIGlzLCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlLiBPdGhlcndpc2UgcmV0dXJuIGEgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5naW5lIC0gVGhlIHR5cGUgb2YgUG9sbHkgdm9pY2UgZW5naW5lIHRvIHZhbGlkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBfdmFsaWRhdGVFbmdpbmUoZW5naW5lKSB7XHJcbiAgICAvLyBEZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBlbmdpbmUgaWYgbmV1cmFsIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdmVyc2lvblxyXG4gICAgaWYgKFxyXG4gICAgICBlbmdpbmUgPT09IHVuZGVmaW5lZFxyXG4gICAgICB8fCB0aGlzLmNvbnN0cnVjdG9yLkFXU19WRVJTSU9OIDwgdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9NSU5fTkVVUkFMX1ZFUlNJT05cclxuICAgICkge1xyXG4gICAgICBlbmdpbmUgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLkVuZ2luZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZW5naW5lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gYXVkaW8gZm9ybWF0IHR5cGUgaXMgY29tcGF0aWJsZSB3aXRoIFBvbGx5LiBJZiBpdCBpcywgcmV0dXJuXHJcbiAgICogdGhlIG9yaWdpbmFsIHZhbHVlLiBPdGhlcndpc2UgcmV0dXJuIGEgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5naW5lIC0gVGhlIHR5cGUgb2YgUG9sbHkgdm9pY2UgZW5naW5lIHRvIHZhbGlkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBfdmFsaWRhdGVGb3JtYXQoZm9ybWF0KSB7XHJcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQgfHwgIWF1ZGlvRm9ybWF0cy5pbmNsdWRlcyhmb3JtYXQpKSB7XHJcbiAgICAgIGZvcm1hdCA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuT3V0cHV0Rm9ybWF0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBhdWRpbyBzYW1wbGluZyByYXRlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCBhdWRpb1xyXG4gICAqIGZvcm1hdC4gSWYgaXQgaXMsIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUuIE90aGVyd2lzZSByZXR1cm4gYSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmdpbmUgLSBUaGUgdHlwZSBvZiBQb2xseSB2b2ljZSBlbmdpbmUgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZVJhdGUocmF0ZSkge1xyXG4gICAgLy8gVXNlIGRlZmF1bHQgaWYgc3BlY2lmaWVkIHNhbXBsZSByYXRlIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGF1ZGlvIGZvcm1hdFxyXG4gICAgaWYgKFxyXG4gICAgICByYXRlID09PSB1bmRlZmluZWRcclxuICAgICAgfHwgIXNhbXBsZVJhdGVzW3RoaXMuX2F1ZGlvRm9ybWF0XS5yYXRlcy5pbmNsdWRlcyhyYXRlKVxyXG4gICAgKSB7XHJcbiAgICAgIHJhdGUgPSBzYW1wbGVSYXRlc1t0aGlzLl9hdWRpb0Zvcm1hdF0uZGVmYXVsdHNbdGhpcy5fZW5naW5lXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmF0ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIFBvbGx5IHZvaWNlIGlkIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCBQb2xseSBlbmdpbmUuXHJcbiAgICogSWYgaXQgaXMsIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUuIE90aGVyd2lzZSByZXR1cm4gYSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmdpbmUgLSBUaGUgdHlwZSBvZiBQb2xseSB2b2ljZSBlbmdpbmUgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZVZvaWNlKHZvaWNlSWQpIHtcclxuICAgIGNvbnN0IHZvaWNlID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9WT0lDRVMuZmluZCh2ID0+IHYuSWQgPT09IHZvaWNlSWQpO1xyXG5cclxuICAgIC8vIFVzZSB0aGUgZGVmYXVsdCB2b2ljZSBpZiB0aGUgdm9pY2UgaXNuJ3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbmdpbmVcclxuICAgIGlmICh2b2ljZSA9PT0gdW5kZWZpbmVkIHx8ICF2b2ljZS5TdXBwb3J0ZWRFbmdpbmVzLmluY2x1ZGVzKHRoaXMuX2VuZ2luZSkpIHtcclxuICAgICAgdm9pY2VJZCA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuVm9pY2VJZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdm9pY2VJZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIFBvbGx5IGxhbmd1YWdlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCBQb2xseSB2b2ljZS5cclxuICAgKiBJZiBpdCBpcywgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZS4gT3RoZXJ3aXNlIHJldHVybiBhIGRlZmF1bHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuZ2luZSAtIFRoZSB0eXBlIG9mIFBvbGx5IHZvaWNlIGVuZ2luZSB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlTGFuZ3VhZ2UobGFuZ3VhZ2UpIHtcclxuICAgIGNvbnN0IHZvaWNlID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9WT0lDRVMuZmluZCh2ID0+IHYuSWQgPT09IHRoaXMuX3ZvaWNlKTtcclxuICAgIGNvbnN0IGxhbmd1YWdlQ29kZSA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfTEFOR1VBR0VTW2xhbmd1YWdlXTtcclxuXHJcbiAgICAvLyBGaW5kIHRoZSBsYW5ndWFnZXMgYXZhaWxhYmxlIGZvciB0aGUgY3VycmVudCB2b2ljZVxyXG4gICAgY29uc3QgYXZhaWxhYmxlQ29kZXMgPSBbdm9pY2UuTGFuZ3VhZ2VDb2RlXTtcclxuICAgIGlmICh2b2ljZS5BZGRpdGlvbmFsTGFuZ3VhZ2VDb2Rlcykge1xyXG4gICAgICBhdmFpbGFibGVDb2Rlcy5wdXNoKC4uLnZvaWNlLkFkZGl0aW9uYWxMYW5ndWFnZUNvZGVzKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB0aGUgY3VycmVudCB2b2ljZSBkb2Vzbid0IHN1cHBvcnQgdGhlIGxhbmd1YWdlLCB1c2UgaXRzIGRlZmF1bHRcclxuICAgIGlmICghYXZhaWxhYmxlQ29kZXMuaW5jbHVkZXMobGFuZ3VhZ2VDb2RlKSkge1xyXG4gICAgICBsYW5ndWFnZSA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfTEFOR1VBR0VfQ09ERVNbdm9pY2UuTGFuZ3VhZ2VDb2RlXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGFuZ3VhZ2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZSB0aGUgY3VycmVudCBQb2xseSBvcHRpb25zIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBjb21wYXRpYmxlIHdpdGggZWFjaFxyXG4gICAqIG90aGVyLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfdmFsaWRhdGUoKSB7XHJcbiAgICAvLyBWYWxpZGF0ZSBzcGVlY2ggcGFyYW1ldGVyc1xyXG4gICAgdGhpcy5fZW5naW5lID0gdGhpcy5fdmFsaWRhdGVFbmdpbmUodGhpcy5fZW5naW5lKTtcclxuICAgIHRoaXMuX2F1ZGlvRm9ybWF0ID0gdGhpcy5fdmFsaWRhdGVGb3JtYXQodGhpcy5fYXVkaW9Gb3JtYXQpO1xyXG4gICAgdGhpcy5fc2FtcGxlUmF0ZSA9IHRoaXMuX3ZhbGlkYXRlUmF0ZSh0aGlzLl9zYW1wbGVSYXRlKTtcclxuICAgIHRoaXMuX3ZvaWNlID0gdGhpcy5fdmFsaWRhdGVWb2ljZSh0aGlzLl92b2ljZSk7XHJcbiAgICB0aGlzLl9sYW5ndWFnZSA9IHRoaXMuX3ZhbGlkYXRlTGFuZ3VhZ2UodGhpcy5fbGFuZ3VhZ2UpO1xyXG4gICAgdGhpcy5faXNWYWxpZGF0ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIHBhcmFtZXRlcnMgY29tcGF0aWJsZSB3aXRoIFBvbGx5LnN5bnRoZXNpemVTcGVlY2guXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09iamVjdH1cclxuICAgKi9cclxuICBfZ2V0Q29uZmlnKCkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHZhbGlkYXRlZFxyXG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IuaXNSZWFkeSAmJiAhdGhpcy5faXNWYWxpZGF0ZWQpIHtcclxuICAgICAgdGhpcy5fdmFsaWRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgYSBjb25maWcgb2JqZWN0IGNvbXBhdGlibGUgd2l0aCBQb2xseVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgRW5naW5lOiB0aGlzLl9lbmdpbmUsXHJcbiAgICAgIE91dHB1dEZvcm1hdDogdGhpcy5fYXVkaW9Gb3JtYXQsXHJcbiAgICAgIFNhbXBsZVJhdGU6IHRoaXMuX3NhbXBsZVJhdGUsXHJcbiAgICAgIFZvaWNlSWQ6IHRoaXMuX3ZvaWNlLFxyXG4gICAgICBMYW5ndWFnZUNvZGU6IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfTEFOR1VBR0VTW3RoaXMuX2xhbmd1YWdlXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgUG9sbHkgcGFyYW1ldGVycyB3aXRoIG9wdGlvbnMgZnJvbSBhIGdpdmVuIGNvbmZpZy4gQWxsIHN0b3JlZCBzcGVlY2hlc1xyXG4gICAqIHdpbGwgYmUgdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBwYXJhbWV0ZXJzLCB1bmxlc3MgdGhlIHNwZWVjaCB0ZXh0IGlzIGNvbnRhaW5lZFxyXG4gICAqIGluIHRoZSAnc2tpcFNwZWVjaGVzJyBwYXJhbWV0ZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIFBvbGx5IHBhcmFtZXRlciBvcHRpb25zIHRvIG92ZXJ3cml0ZS5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBza2lwU3BlZWNoZXMgLSBUZXh0IG9mIGFueSBzcGVlY2hlcyB0aGF0IHNob3VsZCBub3RcclxuICAgKiBoYXZlIHBhcmFtZXRlcnMgdXBkYXRlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XHJcbiAgICovXHJcbiAgX3VwZGF0ZUNvbmZpZyhjb25maWcsIHNraXBTcGVlY2hlcyA9IFtdKSB7XHJcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKCk7XHJcbiAgICBpZiAoIWNvbmZpZykge1xyXG4gICAgICByZXR1cm4gY3VycmVudENvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1ZhbGlkYXRlZCA9IGZhbHNlO1xyXG4gICAgY29uc3QgY3VycmVudENvbmZpZ1N0ciA9IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRDb25maWcpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBvcHRpb25zXHJcbiAgICBpZiAoY29uZmlnLkVuZ2luZSkge1xyXG4gICAgICB0aGlzLl9lbmdpbmUgPSBjb25maWcuRW5naW5lO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcuYXVkaW9Gb3JtYXQpIHtcclxuICAgICAgdGhpcy5fYXVkaW9Gb3JtYXQgPSBjb25maWcuYXVkaW9Gb3JtYXQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5TYW1wbGVSYXRlKSB7XHJcbiAgICAgIHRoaXMuX3NhbXBsZVJhdGUgPSBjb25maWcuU2FtcGxlUmF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLlZvaWNlSWQpIHtcclxuICAgICAgdGhpcy5fdm9pY2UgPSBjb25maWcuVm9pY2VJZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLkxhbmd1YWdlKSB7XHJcbiAgICAgIHRoaXMuX2xhbmd1YWdlID0gY29uZmlnLkxhbmd1YWdlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFZhbGlkYXRlIHRoZSBjb25maWdcclxuICAgIGNvbnN0IHZhbGlkQ29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKCk7XHJcblxyXG4gICAgLy8gRXhpdCBpZiBub3RoaW5nIGhhcyBjaGFuZ2VkXHJcbiAgICBjb25zdCBjb25maWdTdHIgPSBKU09OLnN0cmluZ2lmeSh2YWxpZENvbmZpZyk7XHJcbiAgICBpZiAoY3VycmVudENvbmZpZ1N0ciA9PT0gY29uZmlnU3RyKSB7XHJcbiAgICAgIHRoaXMuX2lzVmFsaWRhdGVkID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIHZhbGlkQ29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBhbGwgY2FjaGVkIGNvbmZpZ3NcclxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX3NwZWVjaENhY2hlKS5mb3JFYWNoKChbdGV4dCwgc3BlZWNoXSkgPT4ge1xyXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgc2tpcHBlZCBzcGVlY2hcclxuICAgICAgaWYgKHNraXBTcGVlY2hlcy5pbmNsdWRlcyh0ZXh0KSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc3BlZWNoQ29uZmlnU3RyID0gSlNPTi5zdHJpbmdpZnkoc3BlZWNoLmNvbmZpZyk7XHJcblxyXG4gICAgICAvLyBVcGRhdGUgdGhlIHNwZWVjaCB3aXRoIG5ldyBwYXJhbWV0ZXJzXHJcbiAgICAgIGlmIChzcGVlY2hDb25maWdTdHIgIT09IGNvbmZpZ1N0cikge1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVNwZWVjaCh0ZXh0LCB2YWxpZENvbmZpZyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB2YWxpZENvbmZpZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBhbiBleGlzdGluZyBzcGVlY2gsIG9yIGFkZCBhIG5ldyBzcGVlY2ggd2l0aCBuZXcgUG9sbHkgcGFyYW1ldGVycyB3aXRoXHJcbiAgICogb3B0aW9ucyBmcm9tIGEgZ2l2ZW4gY29uZmlnLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIHNwZWVjaCB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIFBvbGx5IHBhcmFtZXRlciBvcHRpb25zIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBXaGV0aGVyIHRvIGZvcmNlIHRoZSBzcGVlY2ggdG8gYmUgdXBkYXRlZFxyXG4gICAqIGlmIG5vIHBhcmFtZXRlcnMgaGF2ZSBjaGFuZ2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0Fic3RyYWN0U3BlZWNofVxyXG4gICAqL1xyXG4gIF91cGRhdGVTcGVlY2godGV4dCwgY29uZmlnLCBmb3JjZSA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBzcGVlY2ggPSB0aGlzLl9zcGVlY2hDYWNoZVt0ZXh0XSB8fCB7fTtcclxuICAgIC8vIEV4aXQgaWYgbm90aGluZyBoYXMgY2hhbmdlZCBhbmQgZm9yY2UgaXMgZmFsc2VcclxuICAgIGlmIChcclxuICAgICAgIWZvcmNlXHJcbiAgICAgICYmIGNvbmZpZyAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICYmIHNwZWVjaC5jb25maWdcclxuICAgICAgJiYgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSA9PT0gSlNPTi5zdHJpbmdpZnkoc3BlZWNoLmNvbmZpZylcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gc3BlZWNoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBzZXBhcmF0ZSBwYXJhbWV0ZXJzIGZvciBhdWRpbyBhbmQgc3BlZWNobWFyayBnZW5lcmF0aW9uXHJcbiAgICBjb25zdCBhdWRpb1BhcmFtcyA9IHtcclxuICAgICAgLi4uY29uZmlnLFxyXG4gICAgICBUZXh0OiB0ZXh0LFxyXG4gICAgICBUZXh0VHlwZTogJ3NzbWwnLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHNwZWVjaG1hcmtQYXJhbXMgPSB7XHJcbiAgICAgIC4uLmF1ZGlvUGFyYW1zLFxyXG4gICAgICBPdXRwdXRGb3JtYXQ6ICdqc29uJyxcclxuICAgICAgU3BlZWNoTWFya1R5cGVzOiBzcGVlY2htYXJrVHlwZXMsXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEdlbmVyYXRlIGF1ZGlvIGFuZCBzcGVlY2htYXJrc1xyXG4gICAgc3BlZWNoLmNvbmZpZyA9IGNvbmZpZztcclxuICAgIHNwZWVjaC5wcm9taXNlID0gUHJvbWlzZS5hbGwoW1xyXG4gICAgICB0aGlzLl9zeW50aGVzaXplU3BlZWNobWFya3Moc3BlZWNobWFya1BhcmFtcyksXHJcbiAgICAgIHRoaXMuX3N5bnRoZXNpemVBdWRpbyhhdWRpb1BhcmFtcyksXHJcbiAgICBdKS50aGVuKHJlc3VsdHMgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5fY3JlYXRlU3BlZWNoKHRleHQsIC4uLnJlc3VsdHMpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zcGVlY2hDYWNoZVt0ZXh0XSA9IHNwZWVjaDtcclxuXHJcbiAgICByZXR1cm4gc3BlZWNoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IFNwZWVjaCBvYmplY3QgZm9yIHRoZSBzcGVha2VyLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7VGV4dFRvU3BlZWNofSBzcGVha2VyIC0gVGhlIFRleHRUb1NwZWVjaCBpbnN0YW5jZSB0aGF0IHdpbGwgb3duIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHNwZWVjaG1hcmtzIC0gU3BlZWNobWFya3MgZm9yIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1ZGlvQ29uZmlnIC0gQXVkaW8gZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QWJzdHJhY3RTcGVlY2h9XHJcbiAgICovXHJcbiAgX2NyZWF0ZVNwZWVjaCh0ZXh0LCBzcGVlY2htYXJrcywgYXVkaW9Db25maWcpIHtcclxuICAgIHJldHVybiBuZXcgU3BlZWNoKHRoaXMsIHRleHQsIHNwZWVjaG1hcmtzLCBhdWRpb0NvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgcHJlc2lnbmVkIFVSTCBvZiBzcGVlY2ggYXVkaW8gZm9yIHRoZSBnaXZlbiBzcGVlY2ggdGV4dC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gUGFyYW1ldGVycyBvYmplY3QgY29tcGF0aWJsZSB3aXRoIFBvbGx5LnN5bnRoZXNpemVTcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGF1ZGlvIFVSTC5cclxuICAgKi9cclxuICBfc3ludGhlc2l6ZUF1ZGlvKHBhcmFtcykge1xyXG4gICAgcmV0dXJuIG5ldyBEZWZlcnJlZCgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3IuU0VSVklDRVMucHJlc2lnbmVyLmdldFN5bnRoZXNpemVTcGVlY2hVcmwoXHJcbiAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgIGZ1bmN0aW9uIChlcnJvciwgdXJsKSB7XHJcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyB1cmwgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGFuZCBwYXJzZXMgc3BlZWNobWFya3MgZm9yIHRoZSBnaXZlbiBzcGVlY2ggdGV4dC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gUGFyYW1ldGVycyBvYmplY3QgY29tcGF0aWJsZSB3aXRoIFBvbGx5LnN5bnRoZXNpemVTcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IFJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2Ygc3BlZWNobWFyayBvYmplY3RzXHJcbiAgICovXHJcbiAgX3N5bnRoZXNpemVTcGVlY2htYXJrcyhwYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLlNFUlZJQ0VTLnBvbGx5XHJcbiAgICAgIC5zeW50aGVzaXplU3BlZWNoKHBhcmFtcylcclxuICAgICAgLnByb21pc2UoKVxyXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgIC8vIENvbnZlcnQgY2hhcmNvZGVzIHRvIHN0cmluZ1xyXG4gICAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShyZXN1bHQuQXVkaW9TdHJlYW0pO1xyXG4gICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xyXG4gICAgICAgIGNvbnN0IGRhdGFTdHIgPSBqc29uLmRhdGEubWFwKGMgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjKSkuam9pbignJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1hcmtUeXBlcyA9IHtcclxuICAgICAgICAgIHNlbnRlbmNlOiBbXSxcclxuICAgICAgICAgIHdvcmQ6IFtdLFxyXG4gICAgICAgICAgdmlzZW1lOiBbXSxcclxuICAgICAgICAgIHNzbWw6IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZW5kTWFya1R5cGVzID0ge1xyXG4gICAgICAgICAgc2VudGVuY2U6IG51bGwsXHJcbiAgICAgICAgICB3b3JkOiBudWxsLFxyXG4gICAgICAgICAgdmlzZW1lOiBudWxsLFxyXG4gICAgICAgICAgc3NtbDogbnVsbCxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBTcGxpdCBieSBlbmNsb3Npbmcge30gdG8gY3JlYXRlIHNwZWVjaG1hcmsgb2JqZWN0c1xyXG4gICAgICAgIGNvbnN0IHNwZWVjaE1hcmtzID0gWy4uLmRhdGFTdHIubWF0Y2hBbGwoL1xcey4qP1xcfSg/PVxcbnwkKS9nbSldLm1hcChcclxuICAgICAgICAgIG1hdGNoID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWFyayA9IEpTT04ucGFyc2UobWF0Y2hbMF0pO1xyXG5cclxuICAgICAgICAgICAgLy8gU2V0IHRoZSBkdXJhdGlvbiBvZiB0aGUgbGFzdCBzcGVlY2htYXJrIHN0b3JlZCBtYXRjaGluZyB0aGlzIG9uZSdzIHR5cGVcclxuICAgICAgICAgICAgY29uc3QgbnVtTWFya3MgPSBtYXJrVHlwZXNbbWFyay50eXBlXS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGlmIChudW1NYXJrcyA+IDApIHtcclxuICAgICAgICAgICAgICBjb25zdCBsYXN0TWFyayA9IG1hcmtUeXBlc1ttYXJrLnR5cGVdW251bU1hcmtzIC0gMV07XHJcbiAgICAgICAgICAgICAgbGFzdE1hcmsuZHVyYXRpb24gPSBtYXJrLnRpbWUgLSBsYXN0TWFyay50aW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtYXJrVHlwZXNbbWFyay50eXBlXS5wdXNoKG1hcmspO1xyXG4gICAgICAgICAgICBlbmRNYXJrVHlwZXNbbWFyay50eXBlXSA9IG1hcms7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXJrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIEZpbmQgdGhlIHRpbWUgb2YgdGhlIGxhdGVzdCBzcGVlY2htYXJrXHJcbiAgICAgICAgY29uc3QgZW5kVGltZXMgPSBbXTtcclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLnNlbnRlbmNlKSB7XHJcbiAgICAgICAgICBlbmRUaW1lcy5wdXNoKGVuZE1hcmtUeXBlcy5zZW50ZW5jZS50aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy53b3JkKSB7XHJcbiAgICAgICAgICBlbmRUaW1lcy5wdXNoKGVuZE1hcmtUeXBlcy53b3JkLnRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLnZpc2VtZSkge1xyXG4gICAgICAgICAgZW5kVGltZXMucHVzaChlbmRNYXJrVHlwZXMudmlzZW1lLnRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLnNzbWwpIHtcclxuICAgICAgICAgIGVuZFRpbWVzLnB1c2goZW5kTWFya1R5cGVzLnNzbWwudGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBNYXRoLm1heCguLi5lbmRUaW1lcyk7XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSBkdXJhdGlvbiBmb3IgdGhlIGVuZGluZyBzcGVlY2hNYXJrcyBvZiBlYWNoIHR5cGVcclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLnNlbnRlbmNlKSB7XHJcbiAgICAgICAgICBlbmRNYXJrVHlwZXMuc2VudGVuY2UuZHVyYXRpb24gPSBNYXRoLm1heChcclxuICAgICAgICAgICAgdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uLFxyXG4gICAgICAgICAgICBlbmRUaW1lIC0gZW5kTWFya1R5cGVzLnNlbnRlbmNlLnRpbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMud29yZCkge1xyXG4gICAgICAgICAgZW5kTWFya1R5cGVzLndvcmQuZHVyYXRpb24gPSBNYXRoLm1heChcclxuICAgICAgICAgICAgdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uLFxyXG4gICAgICAgICAgICBlbmRUaW1lIC0gZW5kTWFya1R5cGVzLndvcmQudGltZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy52aXNlbWUpIHtcclxuICAgICAgICAgIGVuZE1hcmtUeXBlcy52aXNlbWUuZHVyYXRpb24gPSBNYXRoLm1heChcclxuICAgICAgICAgICAgdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uLFxyXG4gICAgICAgICAgICBlbmRUaW1lIC0gZW5kTWFya1R5cGVzLnZpc2VtZS50aW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLnNzbWwpIHtcclxuICAgICAgICAgIGVuZE1hcmtUeXBlcy5zc21sLmR1cmF0aW9uID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgIHRoaXMuX21pbkVuZE1hcmtEdXJhdGlvbixcclxuICAgICAgICAgICAgZW5kVGltZSAtIGVuZE1hcmtUeXBlcy5zc21sLnRpbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3BlZWNoTWFya3M7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIFNwZWVjaCBvYmplY3QgdGhhdCBoYXMgdGhlIGdpdmVuIHRleHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBjb250ZW50IG9mIHRoZSBTcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgLSBPcHRpb25zIHRvIHVwZGF0ZSB0aGUgU3BlZWNoIHdpdGguXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IFJlc29sdmVzIHdpdGggU3BlZWNoIG9yIG51bGw7XHJcbiAgICovXHJcbiAgX2dldFNwZWVjaCh0ZXh0LCBjb25maWcpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSBBV1Mgc2VydmljZXMgZXhpc3RcclxuICAgIGlmICghdGhpcy5jb25zdHJ1Y3Rvci5pc1JlYWR5KSB7XHJcbiAgICAgIGNvbnN0IGUgPSAnQVdTIHNlcnZpY2VzIGhhdmUgbm90IGJlZW4gaW5pdGlhbGl6ZWQuJztcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgaXRzIHBvc3NpYmxlIHRvIGdlbmVyYXRlIHNwZWVjaGVzXHJcbiAgICBpZiAoIXRleHQpIHtcclxuICAgICAgY29uc3QgZSA9ICdDYW5ub3QgcGxheSBhIHNwZWVjaCB3aXRoIG5vIHRleHQuJztcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIHNwZWVjaCB3aXRoIG9wdGlvbnNcclxuICAgIHRleHQgPSBUZXh0VG9TcGVlY2hVdGlscy52YWxpZGF0ZVRleHQodGV4dCk7XHJcbiAgICBjb25maWcgPSB0aGlzLl91cGRhdGVDb25maWcoY29uZmlnLCB0ZXh0KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlU3BlZWNoKHRleHQsIGNvbmZpZykucHJvbWlzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBuYW1lc3BhY2UgdG8gdGhlIGhvc3Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBjb250YWluIHByb3BlcnRpZXNcclxuICAgKiBhbmQgbWV0aG9kcyBmcm9tIHRoZSBmZWF0dXJlIHRoYXQgdXNlcnMgb2YgdGhlIGhvc3QgbmVlZCBhY2Nlc3MgdG8uXHJcbiAgICpcclxuICAgKiBAc2VlIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgKi9cclxuICBpbnN0YWxsQXBpKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaW5uZXJcclxuICAgICAqIEBuYW1lc3BhY2UgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICovXHJcbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihhcGksIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3BsYXlcclxuICAgICAgICovXHJcbiAgICAgIHBsYXk6IHRoaXMucGxheS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGF1c2VcclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlOiB0aGlzLnBhdXNlLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNyZXN1bWVcclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZTogdGhpcy5yZXN1bWUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3N0b3BcclxuICAgICAgICovXHJcbiAgICAgIHN0b3A6IHRoaXMuc3RvcC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjZ2V0Vm9sdW1lXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRWb2x1bWU6IHRoaXMuZ2V0Vm9sdW1lLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNzZXRWb2x1bWVcclxuICAgICAgICovXHJcbiAgICAgIHNldFZvbHVtZTogdGhpcy5zZXRWb2x1bWUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3BhdXNlVm9sdW1lXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZVZvbHVtZTogdGhpcy5wYXVzZVZvbHVtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcmVzdW1lVm9sdW1lXHJcbiAgICAgICAqL1xyXG4gICAgICByZXN1bWVWb2x1bWU6IHRoaXMucmVzdW1lVm9sdW1lLmJpbmQodGhpcyksXHJcbiAgICB9KTtcclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhcGksIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNzcGVlY2htYXJrT2Zmc2V0XHJcbiAgICAgICAqL1xyXG4gICAgICBzcGVlY2htYXJrT2Zmc2V0OiB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLnNwZWVjaG1hcmtPZmZzZXQsXHJcbiAgICAgICAgc2V0OiBvZmZzZXQgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zcGVlY2htYXJrT2Zmc2V0ID0gb2Zmc2V0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gYXBpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgdm9sdW1lIHVzZWQgZm9yIGFsbCBhdWRpbyBjbGlwcyBwbGF5ZWQgYnkgdGhlIHNwZWFrZXIuXHJcbiAgICpcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHNldCB2b2x1bWUodm9sdW1lKSB7XHJcbiAgICB0aGlzLl92b2x1bWUgPSBNYXRoVXRpbHMuY2xhbXAodm9sdW1lKTtcclxuICB9XHJcblxyXG4gIGdldCB2b2x1bWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdm9sdW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgc3BlYWtlcidzIHZvbHVtZSB2YWx1ZSBpcyBjdXJyZW50bHkgYmVpbmcgdHdlZW5lZC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldCB2b2x1bWVQZW5kaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLnZvbHVtZSAmJiB0aGlzLl9wcm9taXNlcy52b2x1bWUucGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHZvbHVtZSB1c2VkIGZvciBhbGwgYXVkaW8gY2xpcHMgcGxheWVkIGJ5IHRoZSBzcGVha2VyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn1cclxuICAgKi9cclxuICBnZXRWb2x1bWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy52b2x1bWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSB2b2x1bWUgdXNlZCBmb3IgYWxsIGF1ZGlvIGNsaXBzIHBsYXllZCBieSB0aGUgc3BlYWtlciBvdmVyIHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gdm9sdW1lIC0gVGFyZ2V0IHZvbHVtZSB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlIHRhcmdldFxyXG4gICAqIHZvbHVtZS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdXNlZCBmb3IgaW50ZXJwb2xhdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzZXRWb2x1bWUodm9sdW1lLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcclxuICAgIGlmICh0aGlzLnZvbHVtZVBlbmRpbmcpIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZXMudm9sdW1lLmNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHZvbHVtZSA9IE1hdGhVdGlscy5jbGFtcCh2b2x1bWUpO1xyXG4gICAgdGhpcy5fcHJvbWlzZXMudm9sdW1lID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcclxuICAgICAgdGhpcyxcclxuICAgICAgJ3ZvbHVtZScsXHJcbiAgICAgIHZvbHVtZSxcclxuICAgICAgeyBzZWNvbmRzLCBlYXNpbmdGbiB9XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy52b2x1bWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBpbnRlcnBvbGF0aW9uIGhhcHBlbmluZyBvbiB0aGUgc3BlYWtlcidzIHZvbHVtZSBwcm9wZXJ0eS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHBhdXNlVm9sdW1lKCkge1xyXG4gICAgdGhpcy5fdm9sdW1lUGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy52b2x1bWVQZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIGFueSBpbnRlcnBvbGF0aW9uIGhhcHBlbmluZyBvbiB0aGUgc3BlYWtlcidzIHZvbHVtZSBwcm9wZXJ0eS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIHJlc3VtZVZvbHVtZSgpIHtcclxuICAgIHRoaXMuX3ZvbHVtZVBhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnZvbHVtZVBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIGN1cnJlbnRseSBwbGF5aW5nIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuX3ZvbHVtZVBhdXNlZCkge1xyXG4gICAgICB0aGlzLl9wcm9taXNlcy52b2x1bWUuZXhlY3V0ZShkZWx0YVRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3BlZWNoICYmIHRoaXMuX2N1cnJlbnRTcGVlY2gucGxheWluZykge1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLnZvbHVtZSA9IHRoaXMuX3ZvbHVtZTtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC51cGRhdGUodGhpcy5faG9zdC5ub3cpO1xyXG4gICAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgY3VycmVudCBzcGVlY2ggdG8gYSBuZXcgYXNzZXQgYW5kIHVwZGF0ZSB0aGUgc3BlZWNoJ3Mgc3BlZWNobWFya1xyXG4gICAqIG9mZnNldCB2YWx1ZSB0byBtYXRjaCB0aGF0IG9mIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTcGVlY2h9IHNwZWVjaCAtIFNwZWVjaCB0byBzZXQgYXMgY3VycmVudC5cclxuICAgKi9cclxuICBfc2V0Q3VycmVudFNwZWVjaChzcGVlY2gpIHtcclxuICAgIHNwZWVjaC5zcGVlY2htYXJrT2Zmc2V0ID0gdGhpcy5fc3BlZWNobWFya09mZnNldDtcclxuICAgIHRoaXMuX2N1cnJlbnRTcGVlY2ggPSBzcGVlY2g7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBwcm9taXNlIHRoYXQgd2lsbCBwbGF5L3Jlc3VtZSBhIHNwZWVjaCB3aXRoIHRoZSBnaXZlbiB0ZXh0IGFmdGVyXHJcbiAgICogdGhlIGF1ZGlvIGNvbnRleHQgYXR0ZW1wdHMgdG8gcmVzdW1lIGFuZCBzcGVlY2ggYXVkaW8gaXMgcmV0cmlldmVkIGZyb20gUG9sbHkuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgbmV3IHNwZWVjaCB0byBwbGF5LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIC0gT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BsYXlNZXRob2QgPSAncGxheSddIC0gTWV0aG9kIHRvIGV4ZWN1dGUgb24gdGhlIHJlc3VsdGluZ1xyXG4gICAqIFNwZWVjaCBvYmplY3QuIFZhbGlkIG9wdGlvbnMgYXJlICdwbGF5JyBhbmQgJ3Jlc3VtZScuXHJcbiAgICovXHJcbiAgX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgcGxheU1ldGhvZCA9ICdwbGF5Jykge1xyXG4gICAgLy8gSWYgbm8gdGV4dCBpcyBwcm92aWRlZCwgdHJ5IHRvIHVzZSB0aGUgY3VycmVudCBzcGVlY2hcclxuICAgIGlmICh0ZXh0ID09PSB1bmRlZmluZWQgJiYgcGxheU1ldGhvZCA9PT0gJ3Jlc3VtZScgJiYgdGhpcy5fY3VycmVudFNwZWVjaCkge1xyXG4gICAgICB0ZXh0ID0gdGhpcy5fY3VycmVudFNwZWVjaC50ZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRQcm9taXNlID0gdGhpcy5fY3VycmVudFByb21pc2UgfHwge1xyXG4gICAgICBwbGF5OiBuZXcgRGVmZXJyZWQoXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICgpID0+IHsgY3VycmVudFByb21pc2Uuc3BlZWNoLmNhbmNlbCgpOyB9LFxyXG4gICAgICAgICgpID0+IHsgY3VycmVudFByb21pc2Uuc3BlZWNoLmNhbmNlbCgpOyB9LFxyXG4gICAgICAgICgpID0+IHsgY3VycmVudFByb21pc2Uuc3BlZWNoLmNhbmNlbCgpOyB9XHJcbiAgICAgICksXHJcbiAgICAgIHNwZWVjaDogbmV3IERlZmVycmVkKCksXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fY3VycmVudFByb21pc2UgPSBjdXJyZW50UHJvbWlzZTtcclxuXHJcbiAgICB0aGlzLl9nZXRTcGVlY2godGV4dCwgY29uZmlnKVxyXG4gICAgICAudGhlbihzcGVlY2ggPT4ge1xyXG4gICAgICAgIC8vIEV4aXQgaWYgdGhlIHByb21pc2UgaXMgbm8gbG9uZ2VyIHBlbmRpbmcgYmVjYXVzZSBvZiB1c2VyIGludGVyYWN0aW9uXHJcbiAgICAgICAgaWYgKCFjdXJyZW50UHJvbWlzZS5wbGF5LnBlbmRpbmcpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRQcm9taXNlICE9PSBjdXJyZW50UHJvbWlzZSkge1xyXG4gICAgICAgICAgLy8gQ2FuY2VsIGlmIGFub3RoZXIgY2FsbCB0byBwbGF5IGhhcyBhbHJlYWR5IGJlZW4gbWFkZVxyXG4gICAgICAgICAgY3VycmVudFByb21pc2UucGxheS5jYW5jZWwoKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IGN1cnJlbnQgc3BlZWNoIHdoZW4gdGhlIHNwZWVjaCBlbmRzXHJcbiAgICAgICAgY29uc3Qgb25GaW5pc2ggPSAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9jdXJyZW50U3BlZWNoID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRQcm9taXNlID0gbnVsbDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnRseSBwbGF5aW5nIHNwZWVjaFxyXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3BlZWNoICYmIHRoaXMuX2N1cnJlbnRTcGVlY2gucGxheWluZykge1xyXG4gICAgICAgICAgaWYgKHBsYXlNZXRob2QgPT09ICdwbGF5Jykge1xyXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLmNhbmNlbCgpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChwbGF5TWV0aG9kID09PSAncmVzdW1lJ1xyXG4gICAgICAgICAgICAmJiB0aGlzLl9jdXJyZW50U3BlZWNoLmF1ZGlvICE9PSBzcGVlY2guYXVkaW8pIHtcclxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5jYW5jZWwoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldEN1cnJlbnRTcGVlY2goc3BlZWNoKTtcclxuXHJcbiAgICAgICAgLy8gUGxheSB0aGUgc3BlZWNoXHJcbiAgICAgICAgY3VycmVudFByb21pc2Uuc3BlZWNoID0gc3BlZWNoW3BsYXlNZXRob2RdKHRoaXMuX2hvc3Qubm93LCBvbkZpbmlzaCwgb25GaW5pc2gsIG9uRmluaXNoKTtcclxuICAgICAgICBjdXJyZW50UHJvbWlzZS5zcGVlY2gudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY3VycmVudFByb21pc2Uuc3BlZWNoLnJlc29sdmVkKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY3VycmVudFByb21pc2UucGxheS5jYW5jZWwoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICBjdXJyZW50UHJvbWlzZS5wbGF5LnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlID0+IHtcclxuICAgICAgICBlID0gYENhbm5vdCAke3BsYXlNZXRob2R9IHNwZWVjaCAke3RleHR9IG9uIGhvc3QgJHt0aGlzLmhvc3QuaWR9LiAke2V9YDtcclxuICAgICAgICBjdXJyZW50UHJvbWlzZS5wbGF5LnJlamVjdChlKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRQcm9taXNlLnBsYXk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGFueSBzcGVlY2hlcyBjdXJyZW50bHkgcGxheWluZyBhbmQgcGxheSBhIG5ldyBzcGVlY2ggZnJvbSB0aGUgYmVnaW5uaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgbmV3IHNwZWVjaCB0byBwbGF5LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIC0gT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBwbGF5KHRleHQsIGNvbmZpZykge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgJ3BsYXknKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGEgc3BlZWNoIGlzIGN1cnJlbnRseSBwbGF5aW5nLCBwYXVzZSBpdCBhdCB0aGUgY3VycmVudCB0aW1lLlxyXG4gICAqL1xyXG4gIHBhdXNlKCkge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2gucGF1c2UodGhpcy5faG9zdC5ub3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBDYW5ub3QgcGF1c2Ugc3BlZWNoIG9uIGhvc3QgJHt0aGlzLmhvc3QuaWR9LiBObyBzcGVlY2ggaXMgY3VycmVudGx5IHBsYXlpbmdgXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGFueSBzcGVlY2hlcyBjdXJyZW50bHkgcGxheWluZyBhbmQgcmVzdW1lIGEgbmV3IHNwZWVjaCBmcm9tIHRoZSBjdXJyZW50XHJcbiAgICogdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBuZXcgc3BlZWNoIHRvIHBsYXkuIElmIHVuZGVmaW5lZCBhbmRcclxuICAgKiB0aGVyZSBpcyBhIGN1cnJlbnQgc3BlZWNoIHRoYXQgaXMgcGF1c2VkLCB0aGUgY3VycmVudCBzcGVlY2ggd2lsbCBiZSByZXN1bWVkLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIC0gT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICByZXN1bWUodGV4dCwgY29uZmlnKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCAncmVzdW1lJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiBhIHNwZWVjaCBpcyBjdXJyZW50bHkgcGxheWluZywgc3RvcCBwbGF5YmFjayBhbmQgcmVzZXQgdGltZS5cclxuICAgKi9cclxuICBzdG9wKCkge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2guc3RvcCgpO1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgQ2Fubm90IHN0b3Agc3BlZWNoIG9uIGhvc3QgJHt0aGlzLmhvc3QuaWR9LiBObyBzcGVlY2ggaXMgY3VycmVudGx5IHBsYXlpbmcuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIGlmICh0aGlzLl9jdXJyZW50U3BlZWNoICYmIHRoaXMuX2N1cnJlbnRTcGVlY2gucGxheWluZykge1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLnN0b3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGUgdGhpcy5fc3BlZWNoQ2FjaGU7XHJcblxyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLCB7XHJcbiAgQVdTX1ZFUlNJT046IHtcclxuICAgIGdldDogKCkgPT4gYXdzVmVyc2lvbixcclxuICB9LFxyXG4gIFBPTExZX01JTl9ORVVSQUxfVkVSU0lPTjoge1xyXG4gICAgdmFsdWU6ICcyLjUwMycsXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBQT0xMWV9ERUZBVUxUUzoge1xyXG4gICAgdmFsdWU6IHtcclxuICAgICAgRW5naW5lOiAnc3RhbmRhcmQnLFxyXG4gICAgICBMZXhpY29uTmFtZXM6IFtdLFxyXG4gICAgICBPdXRwdXRGb3JtYXQ6ICdtcDMnLFxyXG4gICAgICBTYW1wbGVSYXRlOiAnMjIwNTAnLFxyXG4gICAgICBUZXh0OiAnJyxcclxuICAgICAgVGV4dFR5cGU6ICdzc21sJyxcclxuICAgICAgVm9pY2VJZDogJ0FteScsXHJcbiAgICAgIExhbmd1YWdlQ29kZTogJ2VuLUdCJyxcclxuICAgICAgTGFuZ3VhZ2VOYW1lOiAnQnJpdGlzaCBFbmdsaXNoJyxcclxuICAgIH0sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBQT0xMWV9WT0lDRVM6IHtcclxuICAgIHZhbHVlOiBbXSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIFBPTExZX0xBTkdVQUdFUzoge1xyXG4gICAgdmFsdWU6IHt9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgUE9MTFlfTEFOR1VBR0VfQ09ERVM6IHtcclxuICAgIHZhbHVlOiB7fSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIF9pc1JlYWR5OiB7XHJcbiAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICB3cml0YWJsZTogdHJ1ZSxcclxuICB9LFxyXG4gIEVWRU5UUzoge1xyXG4gICAgdmFsdWU6IHtcclxuICAgICAgLi4uT2JqZWN0LmdldFByb3RvdHlwZU9mKEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSkuRVZFTlRTLFxyXG4gICAgICByZWFkeTogJ29uUmVhZHlFdmVudCcsXHJcbiAgICAgIHBsYXk6ICdvblBsYXlFdmVudCcsXHJcbiAgICAgIHBhdXNlOiAnb25QYXVzZUV2ZW50JyxcclxuICAgICAgcmVzdW1lOiAnb25SZXN1bWVFdmVudCcsXHJcbiAgICAgIGludGVycnVwdDogJ29uSW50ZXJydXB0RXZlbnQnLFxyXG4gICAgICBzdG9wOiAnb25TdG9wRXZlbnQnLFxyXG4gICAgICBzZW50ZW5jZTogJ29uU2VudGVuY2VFdmVudCcsXHJcbiAgICAgIHdvcmQ6ICdvbldvcmRFdmVudCcsXHJcbiAgICAgIHZpc2VtZTogJ29uVmlzZW1lRXZlbnQnLFxyXG4gICAgICBzc21sOiAnb25Tc21sRXZlbnQnLFxyXG4gICAgfSxcclxuICB9LFxyXG4gIFNFUlZJQ0VTOiB7XHJcbiAgICB2YWx1ZToge1xyXG4gICAgICAuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlKS5TRVJWSUNFUyxcclxuICAgICAgcG9sbHk6IHVuZGVmaW5lZCxcclxuICAgICAgcHJlc2lnbmVyOiB1bmRlZmluZWQsXHJcbiAgICB9LFxyXG4gIH0sXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBTcGVlY2ggZnJvbSAnYXBwL2F3c3BhY2svU3BlZWNoJztcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlIGZyb20gJy4vQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlJztcclxuXHJcbi8qKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICogQGFsaWFzIGNvcmUvVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gKi9cclxuY2xhc3MgVGV4dFRvU3BlZWNoRmVhdHVyZSBleHRlbmRzIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSB7XHJcbiAgY29uc3RydWN0b3IoLi4uYXJncykge1xyXG4gICAgc3VwZXIoLi4uYXJncyk7XHJcblxyXG4gICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fc2V0QXVkaW9Db250ZXh0KCk7XHJcbiAgICB0aGlzLl9vYnNlcnZlQXVkaW9Db250ZXh0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSB0aGUgYXVkaW8gY29udGV4dCB0aGF0IHdpbGwgYmUgdXNlZCB0byBlbnN1cmUgYXVkaW8gY2FuIGJlIHBsYXllZC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX3NldEF1ZGlvQ29udGV4dCgpIHtcclxuICAgIHRoaXMuX2F1ZGlvQ29udGV4dCA9IG5ldyBBdWRpb0NvbnRleHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiBmb3Igc3RhdGUgY2hhbmdlcyBvbiB0aGUgYXVkaW8gY29udGV4dCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZmVhdHVyZVxyXG4gICAqIGlzIGVuYWJsZWQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9vYnNlcnZlQXVkaW9Db250ZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuX2F1ZGlvQ29udGV4dCkge1xyXG4gICAgICB0aGlzLl9hdWRpb0NvbnRleHQub25zdGF0ZWNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fYXVkaW9Db250ZXh0LnN0YXRlID09PSAncnVubmluZycpIHtcclxuICAgICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgICdUaGUgYXVkaW8gY29udGV4dCBpcyBub3QgcnVubmluZy4gU3BlZWNoIHdpbGwgbm90IGJlIGFibGUgdG8gYmUgcGxheWVkIHVudGlsIGl0IGlzIHJlc3VtZWQuIFVzZSB0aGUgXCJUZXh0VG9TcGVlY2hGZWF0dXJlLnJlc3VtZUF1ZGlvXCIgbWV0aG9kIHRvIHRyeSB0byByZXN1bWUgaXQgYWZ0ZXIgYSB1c2VyIGdlc3R1cmUuJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLl9hdWRpb0NvbnRleHQub25zdGF0ZWNoYW5nZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuIEF1ZGlvIG9iamVjdCBvZiBzcGVlY2ggYXVkaW8gZm9yIHRoZSBnaXZlbiBzcGVlY2ggdGV4dC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gUGFyYW1ldGVycyBvYmplY3QgY29tcGF0aWJsZSB3aXRoIFBvbGx5LnN5bnRoZXNpemVTcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYXVkaW8gVVJMIGFuZCBBdWRpb1xyXG4gICAqIG9iamVjdC5cclxuICAgKi9cclxuICBfc3ludGhlc2l6ZUF1ZGlvKHBhcmFtcykge1xyXG4gICAgcmV0dXJuIHN1cGVyLl9zeW50aGVzaXplQXVkaW8ocGFyYW1zKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgIGNvbnN0IHt1cmx9ID0gcmVzdWx0O1xyXG5cclxuICAgICAgLy8gQ3JlYXRlIGFuIEF1ZGlvIG9iamVjdCB0aGF0IHBvaW50cyB0byB0aGUgcHJlc2lnbmVkIHVybFxyXG4gICAgICBjb25zdCBhdWRpbyA9IG5ldyBBdWRpbyh1cmwpO1xyXG4gICAgICBhdWRpby5sb29wID0gdGhpcy5sb29wO1xyXG4gICAgICBhdWRpby5jcm9zc09yaWdpbiA9ICdhbm9ueW1vdXMnO1xyXG4gICAgICBhdWRpby5wcmVsb2FkID0gJ2F1dG8nO1xyXG4gICAgICByZXN1bHQuYXVkaW8gPSBhdWRpbztcclxuXHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAvLyBSZXNvbHZlIG9uY2UgdGhlIG1pbmltdW0gYW1vdW50IGlzIGxvYWRlZFxyXG4gICAgICAgIGF1ZGlvLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgKCkgPT4ge1xyXG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBTdGFydCBsb2FkaW5nIHRoZSBhdWRpb1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYXVkaW8pO1xyXG4gICAgICAgIGF1ZGlvLmxvYWQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIG5ldyBTcGVlY2ggb2JqZWN0IGZvciB0aGUgc3BlYWtlci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1RleHRUb1NwZWVjaH0gc3BlYWtlciAtIFRoZSBUZXh0VG9TcGVlY2ggaW5zdGFuY2UgdGhhdCB3aWxsIG93biB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGV4dCBvZiB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzcGVlY2htYXJrcyAtIFNwZWVjaG1hcmtzIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdWRpb0NvbmZpZyAtIEF1ZGlvIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0Fic3RyYWN0U3BlZWNofVxyXG4gICAqL1xyXG4gIF9jcmVhdGVTcGVlY2godGV4dCwgc3BlZWNobWFya3MsIGF1ZGlvQ29uZmlnKSB7XHJcbiAgICByZXR1cm4gbmV3IFNwZWVjaCh0aGlzLCB0ZXh0LCBzcGVlY2htYXJrcywgYXVkaW9Db25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgYXVkaW8gY29udGV4dCBpcyBydW5uaW5nIGFuZCBzcGVlY2ggY2FuIGJlIHBsYXllZC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldCBlbmFibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcnkgdG8gcmVzdW1lIHRoZSBhdWRpbyBjb250ZXh0LiBUaGlzIHdpbGwgYmUgYXV0b21hdGljYWxseSBleGVjdXRlZCBlYWNoIHRpbWVcclxuICAgKiBzcGVlY2ggaXMgcGxheWVkIG9yIHJlc3VtZWQuIElmIHVzaW5nIG1hbnVhbGx5LCBpdCBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGFcclxuICAgKiB1c2VyIGludGVyYWN0aW9uIG9jY3Vycy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBhdWRpbyBjb250ZXh0IGhhcyByZXN1bWVkLlxyXG4gICAqL1xyXG4gIHJlc3VtZUF1ZGlvKCkge1xyXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBEZWZlcnJlZCgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dFxyXG4gICAgICAgIC5yZXN1bWUoKVxyXG4gICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuICB9XHJcblxyXG4gIF9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsIHBsYXlNZXRob2QgPSAncGxheScpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRQcm9taXNlID0ge1xyXG4gICAgICBwbGF5OiBuZXcgRGVmZXJyZWQoXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICgpID0+IHsgY3VycmVudFByb21pc2Uuc3BlZWNoLmNhbmNlbCgpOyB9LFxyXG4gICAgICAgICgpID0+IHsgY3VycmVudFByb21pc2Uuc3BlZWNoLmNhbmNlbCgpOyB9LFxyXG4gICAgICAgICgpID0+IHsgY3VycmVudFByb21pc2Uuc3BlZWNoLmNhbmNlbCgpOyB9XHJcbiAgICAgICksXHJcbiAgICAgIHNwZWVjaDogbmV3IERlZmVycmVkKCksXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fY3VycmVudFByb21pc2UgPSBjdXJyZW50UHJvbWlzZTtcclxuXHJcbiAgICAvLyBUcnkgdG8gc3RhcnQgdGhlIGF1ZGlvIGNvbnRleHRcclxuICAgIHRoaXMucmVzdW1lQXVkaW8oKS50aGVuKCgpID0+IHtcclxuICAgICAgLy8gRXhpdCBpZiB0aGUgcHJvbWlzZSBpcyBubyBsb25nZXIgcGVuZGluZyBiZWNhdXNlIG9mIHVzZXIgaW50ZXJhY3Rpb25cclxuICAgICAgaWYgKCFjdXJyZW50UHJvbWlzZS5wbGF5LnBlbmRpbmcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgLy8gQ2FuY2VsIGlmIGFub3RoZXIgY2FsbCB0byBwbGF5IGhhcyBhbHJlYWR5IGJlZW4gbWFkZVxyXG4gICAgICBlbHNlIGlmICh0aGlzLl9jdXJyZW50UHJvbWlzZSAhPT0gY3VycmVudFByb21pc2UpIHtcclxuICAgICAgICBjdXJyZW50UHJvbWlzZS5wbGF5LmNhbmNlbCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVGhlIGF1ZGlvIGNvbnRleHQgaXMgcnVubmluZyBzbyB0aGUgc3BlZWNoIGNhbiBiZSBwbGF5ZWRcclxuICAgICAgaWYgKHRoaXMuX2VuYWJsZWQpIHtcclxuICAgICAgICBzdXBlci5fc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCBwbGF5TWV0aG9kKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBSZWplY3QgaWYgdGhlIGF1ZGlvIGNvbnRleHQgaXMgbm90IHJ1bm5pbmdcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY3VycmVudFByb21pc2UucmVqZWN0KFxyXG4gICAgICAgICAgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgQ2Fubm90ICR7cGxheU1ldGhvZH0gc3BlZWNoIG9uIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gVGhlIGF1ZGlvIGNvbnRleHQgaXMgbm90IHJ1bm5pbmcuIFVzZSB0aGUgXCJUZXh0VG9TcGVlY2hGZWF0dXJlLnJlc3VtZUF1ZGlvXCIgbWV0aG9kIHRvIHRyeSB0byByZXN1bWUgaXQgYWZ0ZXIgYSB1c2VyIGdlc3R1cmUuYFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBjdXJyZW50UHJvbWlzZS5wbGF5O1xyXG4gIH1cclxuXHJcbiAgcGxheSh0ZXh0LCBjb25maWcpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsICdwbGF5Jyk7XHJcbiAgfVxyXG5cclxuICByZXN1bWUodGV4dCwgY29uZmlnKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCAncmVzdW1lJyk7XHJcbiAgfVxyXG5cclxuICBpbnN0YWxsQXBpKCkge1xyXG4gICAgY29uc3QgYXBpID0gc3VwZXIuaW5zdGFsbEFwaSgpO1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBzZWUgY29yZS9UZXh0VG9TcGVlY2hGZWF0dXJlI2VuYWJsZWRcclxuICAgICAgICovXHJcbiAgICAgIGVuYWJsZWQ6IHtcclxuICAgICAgICBnZXQ6ICgpID0+IHRoaXMuX2VuYWJsZWQsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gYXBpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dFRvU3BlZWNoRmVhdHVyZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQ29yZVRleHRUb1NwZWVjaEZlYXR1cmUgZnJvbSAnY29yZS9hd3NwYWNrL1RleHRUb1NwZWVjaEZlYXR1cmUnO1xyXG5cclxuLyoqXHJcbiAqIFRocmVlanMgUG9zaXRpb25hbEF1ZGlvIG9iamVjdFxyXG4gKiBAZXh0ZXJuYWwgXCJUSFJFRS5BdWRpb0xpc3RlbmVyXCJcclxuICogQHNlZSBodHRwczovL3RocmVlanMub3JnL2RvY3MvI2FwaS9lbi9hdWRpby9BdWRpb0xpc3RlbmVyXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRocmVlanMgQXVkaW8gb2JqZWN0XHJcbiAqIEBleHRlcm5hbCBcIlRIUkVFLk9iamVjdDNEXCJcclxuICogQHNlZSBodHRwczovL3RocmVlanMub3JnL2RvY3MvI2FwaS9lbi9jb3JlL09iamVjdDNEXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIGNvcmUvVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gKiBAYWxpYXMgdGhyZWUuanMvVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gKi9cclxuY2xhc3MgVGV4dFRvU3BlZWNoRmVhdHVyZSBleHRlbmRzIENvcmVUZXh0VG9TcGVlY2hGZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7dGhyZWUvSG9zdE9iamVjdH0gaG9zdCAtIEhvc3Qgb2JqZWN0IG1hbmFnaW5nIHRoZSBmZWF0dXJlLlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgdGhhdCB3aWxsIGJlIHNlbnQgdG8gUG9sbHkgZm9yIGVhY2ggc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6XCJUSFJFRS5BdWRpb0xpc3RlbmVyXCJ9IG9wdGlvbnMubGlzdGVuZXIgLSBUaHJlZSBhdWRpbyBsaXN0ZW5lciB0byB1c2Ugd2l0aFxyXG4gICAqIGF1ZGlvLlxyXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6XCJUSFJFRS5PYmplY3QzRFwiPX0gb3B0aW9ucy5hdHRhY2hUbyAtIE9wdGlvbmFsIG9iamVjdCB0byBhdHRhY2ggdGhlIHNwZWVjaFxyXG4gICAqIGF1ZGlvIHRvLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgaG9zdCxcclxuICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgIHZvaWNlOiB1bmRlZmluZWQsXHJcbiAgICAgIGVuZ2luZTogdW5kZWZpbmVkLFxyXG4gICAgICBsYW5ndWFnZTogdW5kZWZpbmVkLFxyXG4gICAgICBhdWRpb0Zvcm1hdDogJ21wMycsXHJcbiAgICAgIHNhbXBsZVJhdGU6IHVuZGVmaW5lZCxcclxuICAgICAgbGlzdGVuZXI6IHVuZGVmaW5lZCxcclxuICAgICAgYXR0YWNoVG86IHVuZGVmaW5lZCxcclxuICAgIH1cclxuICApIHtcclxuICAgIHN1cGVyKGhvc3QsIG9wdGlvbnMpO1xyXG4gICAgdGhpcy5fbGlzdGVuZXIgPSBvcHRpb25zLmxpc3RlbmVyO1xyXG4gICAgdGhpcy5fYXR0YWNoVG8gPSBvcHRpb25zLmF0dGFjaFRvIHx8IGhvc3Qub3duZXI7XHJcbiAgICB0aGlzLl9zZXRBdWRpb0NvbnRleHQoKTtcclxuICAgIHRoaXMuX29ic2VydmVBdWRpb0NvbnRleHQoKTtcclxuICB9XHJcblxyXG4gIF9zZXRBdWRpb0NvbnRleHQoKSB7XHJcbiAgICBpZiAodGhpcy5fbGlzdGVuZXIpIHtcclxuICAgICAgdGhpcy5fYXVkaW9Db250ZXh0ID0gdGhpcy5fbGlzdGVuZXIuY29udGV4dDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhbiBBdWRpbyBvYmplY3QgYW5kIFRocmVlLmpzIGF1ZGlvIG9iamVjdCBvZiBzcGVlY2ggYXVkaW8gZm9yIHRoZVxyXG4gICAqIGdpdmVuIHNwZWVjaCB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBhdWRpbyBVUkwgYW5kIEF1ZGlvXHJcbiAgICogb2JqZWN0cy5cclxuICAgKi9cclxuICBfc3ludGhlc2l6ZUF1ZGlvKHBhcmFtcykge1xyXG4gICAgcmV0dXJuIHN1cGVyLl9zeW50aGVzaXplQXVkaW8ocGFyYW1zKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9hdHRhY2hUbyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgLy8gQ3JlYXRlIHBvc2l0aW9uYWwgYXVkaW8gaWYgdGhlcmUncyBhbiBhdHRhY2ggcG9pbnRcclxuICAgICAgICByZXN1bHQudGhyZWVBdWRpbyA9IG5ldyBUSFJFRS5Qb3NpdGlvbmFsQXVkaW8odGhpcy5fbGlzdGVuZXIpO1xyXG4gICAgICAgIHRoaXMuX2F0dGFjaFRvLmFkZChyZXN1bHQudGhyZWVBdWRpbyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gQ3JlYXRlIG5vbi1wb3NpdGlvbmFsIGF1ZGlvXHJcbiAgICAgICAgcmVzdWx0LnRocmVlQXVkaW8gPSBuZXcgVEhSRUUuQXVkaW8odGhpcy5fbGlzdGVuZXIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTZXQgQXVkaW8gb2JqZWN0IGFzIHRoZSBzb3VyY2VcclxuICAgICAgcmVzdWx0LnRocmVlQXVkaW8uc2V0TWVkaWFFbGVtZW50U291cmNlKHJlc3VsdC5hdWRpbyk7XHJcblxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0VG9TcGVlY2hGZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBUZXh0VG9TcGVlY2hVdGlscyBmcm9tICdjb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoVXRpbHMnO1xyXG5pbXBvcnQgVGV4dFRvU3BlZWNoRmVhdHVyZSBmcm9tICcuL1RleHRUb1NwZWVjaEZlYXR1cmUnO1xyXG5pbXBvcnQgU3BlZWNoIGZyb20gJy4vU3BlZWNoJztcclxuXHJcbi8qKlxyXG4gKiBAbW9kdWxlIHRocmVlL2F3c3BhY2tcclxuICovXHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgLyoqXHJcbiAgICogQHNlZSB0aHJlZS5qcy9UZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICovXHJcbiAgVGV4dFRvU3BlZWNoRmVhdHVyZSxcclxuICAvKipcclxuICAgKiBAc2VlIGNvcmUvVGV4dFRvU3BlZWNoVXRpbHNcclxuICAgKi9cclxuICBUZXh0VG9TcGVlY2hVdGlscyxcclxuICAvKipcclxuICAgKiBAc2VlIHRocmVlLmpzL1NwZWVjaFxyXG4gICAqL1xyXG4gIFNwZWVjaCxcclxufTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBDb3JlU2luZ2xlU3RhdGUgZnJvbSAnY29yZS9hbmltcGFjay9zdGF0ZS9TaW5nbGVTdGF0ZSc7XG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcblxuLyoqXG4gKiBUaHJlZWpzIEFuaW1hdGlvbkFjdGlvbiBvYmplY3RcbiAqIEBleHRlcm5hbCBcIlRIUkVFLkFuaW1hdGlvbkFjdGlvblwiXG4gKiBAc2VlIGh0dHBzOi8vdGhyZWVqcy5vcmcvZG9jcy8jYXBpL2VuL2FuaW1hdGlvbi9BbmltYXRpb25BY3Rpb25cbiAqL1xuXG5jb25zdCB0aHJlZUJsZW5kTW9kZXMgPSB7XG4gIE92ZXJyaWRlOiBUSFJFRS5Ob3JtYWxBbmltYXRpb25CbGVuZE1vZGUsXG4gIEFkZGl0aXZlOiBUSFJFRS5BZGRpdGl2ZUFuaW1hdGlvbkJsZW5kTW9kZSxcbn07XG5cbi8qKlxuICogQGV4dGVuZHMgY29yZS9TaW5nbGVTdGF0ZVxuICogQGFsaWFzIHRocmVlLmpzL1NpbmdsZVN0YXRlXG4gKi9cbmNsYXNzIFNpbmdsZVN0YXRlIGV4dGVuZHMgQ29yZVNpbmdsZVN0YXRlIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLlxuICAgKiBAcGFyYW0ge2V4dGVybmFsOlwiVEhSRUUuQW5pbWF0aW9uQWN0aW9uXCJ9IHRocmVlQWN0aW9uIC0gQW5pbWF0aW9uIGFjdGlvbiB0aGF0IGNvbnRyb2xzXG4gICAqIHBsYXliYWNrIG9mIHRoZSBjbGlwLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCB0aHJlZUFjdGlvbikge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgLy8gQ2FsbGJhY2sgdG8gY2F0Y2ggVEhSRUUgYW5pbWF0aW9uIGFjdGlvbiBjb21wbGV0aW9uXG4gICAgdGhpcy5fb25GaW5pc2hlZEV2ZW50ID0gKHt0eXBlLCBhY3Rpb259KSA9PiB7XG4gICAgICAvLyBFeGl0IGlmIHRoaXMgaXNuJ3QgdGhlIGZpbmlzaCBldmVudCBmb3IgdGhpcyBhbmltYXRpb25cbiAgICAgIGlmICh0eXBlICE9PSAnZmluaXNoZWQnIHx8IGFjdGlvbiAhPT0gdGhpcy50aHJlZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXkucmVzb2x2ZSgpO1xuXG4gICAgICAvLyBTdG9wIGV2YWx1YXRpbmcgaW50ZXJwb2xhdG9ycyBpZiB0aGV5IGhhdmUgYWxyZWFkeSBjb21wbGV0ZWRcbiAgICAgIGlmICghdGhpcy53ZWlnaHRQZW5kaW5nICYmICF0aGlzLnRpbWVTY2FsZVBlbmRpbmcpIHtcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24gPSB0aHJlZUFjdGlvbjtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5jbGFtcFdoZW5GaW5pc2hlZCA9IHRydWU7IC8vIEhvbGQgdGhlIGxhc3QgZnJhbWUgb24gY29tcGxldGlvblxuICAgIHRoaXMuX3RocmVlQWN0aW9uLmVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5sb29wID1cbiAgICAgIHRoaXMuX2xvb3BDb3VudCA9PT0gMSA/IFRIUkVFLkxvb3BPbmNlIDogVEhSRUUuTG9vcFJlcGVhdDtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5wYXVzZWQgPSB0aGlzLl9wYXVzZWQ7XG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ucmVwZXRpdGlvbnMgPSB0aGlzLl9sb29wQ291bnQ7XG4gICAgdGhpcy5fdGhyZWVBY3Rpb24udGltZVNjYWxlID0gdGhpcy5fdGltZVNjYWxlO1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLndlaWdodCA9IHRoaXMuX2ludGVybmFsV2VpZ2h0O1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLmJsZW5kTW9kZSA9IHRocmVlQmxlbmRNb2Rlc1t0aGlzLl9ibGVuZE1vZGVdO1xuXG4gICAgLy8gU3RhcnQgbGlzdGVuaW5nIGZvciBhbmltYXRpb24gZmluaXNoZWQgZXZlbnRzXG4gICAgdGhpcy5fdGhyZWVBY3Rpb25cbiAgICAgIC5nZXRNaXhlcigpXG4gICAgICAuYWRkRXZlbnRMaXN0ZW5lcignZmluaXNoZWQnLCB0aGlzLl9vbkZpbmlzaGVkRXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIFRIUkVFLkFuaW1hdGlvbkFjdGlvbiBvYmplY3QuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7ZXh0ZXJuYWw6XCJUSFJFRS5BbmltYXRpb25BY3Rpb25cIn1cbiAgICovXG4gIGdldCB0aHJlZUFjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZWVBY3Rpb247XG4gIH1cblxuICBnZXQgbm9ybWFsaXplZFRpbWUoKSB7XG4gICAgaWYgKHRoaXMuX3RocmVlQWN0aW9uLnRpbWUgJiYgdGhpcy5fdGhyZWVBY3Rpb24uZ2V0Q2xpcCgpICYmIHRoaXMuX3RocmVlQWN0aW9uLmdldENsaXAoKS5kdXJhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuX3RocmVlQWN0aW9uLnRpbWUvdGhpcy5fdGhyZWVBY3Rpb24uZ2V0Q2xpcCgpLmR1cmF0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHNldCBub3JtYWxpemVkVGltZSh0aW1lKSB7XG4gICAgdGltZSA9IE1hdGhVdGlscy5jbGFtcCh0aW1lKTtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi50aW1lID0gdGhpcy5fdGhyZWVBY3Rpb24uZ2V0Q2xpcCgpLmR1cmF0aW9uICogdGltZTtcbiAgfVxuXG4gIGdldCB3ZWlnaHQoKSB7XG4gICAgcmV0dXJuIHN1cGVyLndlaWdodDtcbiAgfVxuXG4gIHNldCB3ZWlnaHQod2VpZ2h0KSB7XG4gICAgc3VwZXIud2VpZ2h0ID0gd2VpZ2h0O1xuXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24uZW5hYmxlZCA9IHRydWU7XG4gIH1cblxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xuXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24uc2V0RWZmZWN0aXZlV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcbiAgfVxuXG4gIGdldCB0aW1lU2NhbGUoKSB7XG4gICAgcmV0dXJuIHN1cGVyLnRpbWVTY2FsZTtcbiAgfVxuXG4gIHNldCB0aW1lU2NhbGUodGltZVNjYWxlKSB7XG4gICAgc3VwZXIudGltZVNjYWxlID0gdGltZVNjYWxlO1xuXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24udGltZVNjYWxlID0gdGltZVNjYWxlO1xuICB9XG5cbiAgZ2V0IGxvb3BDb3VudCgpIHtcbiAgICByZXR1cm4gc3VwZXIubG9vcENvdW50O1xuICB9XG5cbiAgc2V0IGxvb3BDb3VudChsb29wQ291bnQpIHtcbiAgICBzdXBlci5sb29wQ291bnQgPSBsb29wQ291bnQ7XG5cbiAgICB0aGlzLl90aHJlZUFjdGlvbi5sb29wID1cbiAgICAgIGxvb3BDb3VudCA9PT0gMSA/IFRIUkVFLkxvb3BPbmNlIDogVEhSRUUuTG9vcFJlcGVhdDtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5yZXBldGl0aW9ucyA9IGxvb3BDb3VudDtcbiAgfVxuXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XG4gICAgLy8gUmVzdGFydCBhbmltYXRpb25cbiAgICB0aGlzLl90aHJlZUFjdGlvbi5yZXNldCgpO1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLnBsYXkoKTtcblxuICAgIHJldHVybiBzdXBlci5wbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG4gIH1cblxuICBwYXVzZSgpIHtcbiAgICAvLyBNYWtlIHN1cmUgYW5pbWF0aW9uIGhhcyBpbmZsdWVuY2VcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5wYXVzZWQgPSB0cnVlO1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLnBsYXkoKTtcblxuICAgIHJldHVybiBzdXBlci5wYXVzZSgpO1xuICB9XG5cbiAgcmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCkge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGNhbiBwbGF5IGFuZCBoYXMgaW5mbHVlbmNlXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ucGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5fdGhyZWVBY3Rpb24uZW5hYmxlZCA9IHRydWU7XG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ucGxheSgpO1xuXG4gICAgcmV0dXJuIHN1cGVyLnJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIC8vIFN0b3AgYW5pbWF0aW9uIHBsYXliYWNrXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ucGF1c2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiBzdXBlci5jYW5jZWwoKTtcbiAgfVxuXG4gIHN0b3AoKSB7XG4gICAgLy8gUmVzdGFydCBhbmQgcGF1c2UgdGhlIGFuaW1hdGlvblxuICAgIHRoaXMuX3RocmVlQWN0aW9uLnJlc2V0KCk7XG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ucGF1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5wbGF5KCk7XG5cbiAgICByZXR1cm4gc3VwZXIuc3RvcCgpO1xuICB9XG5cbiAgZGlzY2FyZCgpIHtcbiAgICAvLyBTdG9wIHRoZSBhbmltYXRpb24gZnJvbSBoYXZpbmcgaW5mbHVlbmNlXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24uZW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgLy8gU3RvcCBsaXN0ZW5pbmcgZm9yIGZpbmlzaCBldmVudHNcbiAgICB0aGlzLl90aHJlZUFjdGlvblxuICAgICAgLmdldE1peGVyKClcbiAgICAgIC5yZW1vdmVFdmVudExpc3RlbmVyKCdmaW5pc2hlZCcsIHRoaXMuX29uRmluaXNoZWRFdmVudCk7XG5cbiAgICBzdXBlci5kaXNjYXJkKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2luZ2xlU3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBDb3JlQW5pbWF0aW9uRmVhdHVyZSwge1xyXG4gIEFuaW1hdGlvblR5cGVzLFxyXG59IGZyb20gJ2NvcmUvYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZSc7XHJcbmltcG9ydCBTaW5nbGVTdGF0ZSBmcm9tICcuL3N0YXRlL1NpbmdsZVN0YXRlJztcclxuXHJcbi8qKlxyXG4gKiBUaHJlZWpzIEFuaW1hdGlvbk1peGVyIG9iamVjdFxyXG4gKiBAZXh0ZXJuYWwgXCJUSFJFRS5BbmltYXRpb25NaXhlclwiXHJcbiAqIEBzZWUgaHR0cHM6Ly90aHJlZWpzLm9yZy9kb2NzLyNhcGkvZW4vYW5pbWF0aW9uL0FuaW1hdGlvbk1peGVyXHJcbiAqL1xyXG5BbmltYXRpb25UeXBlcy5zaW5nbGUgPSBTaW5nbGVTdGF0ZTtcclxuZXhwb3J0IHtBbmltYXRpb25UeXBlc307XHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgY29yZS9BbmltYXRpb25GZWF0dXJlXHJcbiAqIEBhbGlhcyB0aHJlZS5qcy9BbmltYXRpb25GZWF0dXJlXHJcbiAqL1xyXG5jbGFzcyBBbmltYXRpb25GZWF0dXJlIGV4dGVuZHMgQ29yZUFuaW1hdGlvbkZlYXR1cmUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHt0aHJlZS5qcy9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGhvc3QpIHtcclxuICAgIHN1cGVyKGhvc3QpO1xyXG5cclxuICAgIHRoaXMuX21peGVyID0gbmV3IFRIUkVFLkFuaW1hdGlvbk1peGVyKGhvc3Qub3duZXIpO1xyXG4gIH1cclxuXHJcbiAgX2NyZWF0ZVNpbmdsZVN0YXRlKG9wdGlvbnMpIHtcclxuICAgIC8vIER1cGxpY2F0ZSB0aGUgY2xpcCBpZiBpdCBpcyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyIHRocmVlIGFjdGlvblxyXG4gICAgbGV0IHtjbGlwfSA9IG9wdGlvbnM7XHJcbiAgICBpZiAodGhpcy5fbWl4ZXIuZXhpc3RpbmdBY3Rpb24oY2xpcCkpIHtcclxuICAgICAgY2xpcCA9IGNsaXAuY2xvbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0aHJlZUFjdGlvbiA9IHRoaXMuX21peGVyLmNsaXBBY3Rpb24oY2xpcCk7XHJcbiAgICByZXR1cm4gbmV3IFNpbmdsZVN0YXRlKG9wdGlvbnMsIHRocmVlQWN0aW9uKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIFRIUkVFLkFuaW1hdGlvbk1peGVyIGZvciB0aGUgaG9zdC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtleHRlcm5hbDpcIlRIUkVFLkFuaW1hdGlvbk1peGVyXCJ9XHJcbiAgICovXHJcbiAgZ2V0IG1peGVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX21peGVyO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGRlbHRhVGltZSkge1xyXG4gICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgdGhpcy5fbWl4ZXIudXBkYXRlKGRlbHRhVGltZSAvIDEwMDApOyAvLyBUSFJFRS5BbmltYXRpb25NaXhlciByZXF1aXJlcyBkZWx0YSB0aW1lIGluIHNlY29uZHNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICAvLyBSZWxlYXNlIFRIUkVFIGFuaW1hdGlvbiByZXNvdXJjZXNcclxuICAgIHRoaXMuX21peGVyLnVuY2FjaGVSb290KHRoaXMuX2hvc3Qub3duZXIpO1xyXG5cclxuICAgIHN1cGVyLmRpc2NhcmQoKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFuaW1hdGlvbkZlYXR1cmU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuXHJcbi8qKlxyXG4gKiBAbW9kdWxlIHRocmVlL2FuaW1wYWNrXHJcbiAqL1xyXG5cclxuaW1wb3J0IHtcclxuICBMaW5lYXIsXHJcbiAgUXVhZHJhdGljLFxyXG4gIEN1YmljLFxyXG4gIFF1YXJ0aWMsXHJcbiAgUXVpbnRpYyxcclxuICBTaW51c29pZGFsLFxyXG4gIEV4cG9uZW50aWFsLFxyXG4gIENpcmN1bGFyLFxyXG4gIEVsYXN0aWMsXHJcbiAgQmFjayxcclxuICBCb3VuY2UsXHJcbn0gZnJvbSAnY29yZS9hbmltcGFjay9FYXNpbmcnO1xyXG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnY29yZS9hbmltcGFjay9BbmltYXRpb25VdGlscyc7XHJcbmltcG9ydCBUcmFuc2l0aW9uU3RhdGUgZnJvbSAnY29yZS9hbmltcGFjay9zdGF0ZS9UcmFuc2l0aW9uU3RhdGUnO1xyXG5pbXBvcnQgUmFuZG9tQW5pbWF0aW9uU3RhdGUgZnJvbSAnY29yZS9hbmltcGFjay9zdGF0ZS9SYW5kb21BbmltYXRpb25TdGF0ZSc7XHJcbmltcG9ydCBBbmltYXRpb25MYXllciwge1xyXG4gIExheWVyQmxlbmRNb2RlcyxcclxuICBEZWZhdWx0TGF5ZXJCbGVuZE1vZGUsXHJcbn0gZnJvbSAnY29yZS9hbmltcGFjay9BbmltYXRpb25MYXllcic7XHJcbmltcG9ydCBGcmVlQmxlbmRTdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL0ZyZWVCbGVuZFN0YXRlJztcclxuaW1wb3J0IFF1ZXVlU3RhdGUgZnJvbSAnY29yZS9hbmltcGFjay9zdGF0ZS9RdWV1ZVN0YXRlJztcclxuaW1wb3J0IEJsZW5kMWRTdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL0JsZW5kMWRTdGF0ZSc7XHJcbmltcG9ydCBCbGVuZDJkU3RhdGUgZnJvbSAnY29yZS9hbmltcGFjay9zdGF0ZS9CbGVuZDJkU3RhdGUnO1xyXG5pbXBvcnQgQW5pbWF0aW9uRmVhdHVyZSwge0FuaW1hdGlvblR5cGVzfSBmcm9tICcuL0FuaW1hdGlvbkZlYXR1cmUnO1xyXG5pbXBvcnQgU2luZ2xlU3RhdGUgZnJvbSAnLi9zdGF0ZS9TaW5nbGVTdGF0ZSc7XHJcblxyXG4vKipcclxuICogQG5hbWVzcGFjZVxyXG4gKi9cclxuY29uc3QgRWFzaW5nID0ge1xyXG4gIC8qKlxyXG4gICAqIEBzZWUgTGluZWFyXHJcbiAgICovXHJcbiAgTGluZWFyLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgUXVhZHJhdGljXHJcbiAgICovXHJcbiAgUXVhZHJhdGljLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQ3ViaWNcclxuICAgKi9cclxuICBDdWJpYyxcclxuICAvKipcclxuICAgKiBAc2VlIFF1YXJ0aWNcclxuICAgKi9cclxuICBRdWFydGljLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgUXVpbnRpY1xyXG4gICAqL1xyXG4gIFF1aW50aWMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBTaW51c29pZGFsXHJcbiAgICovXHJcbiAgU2ludXNvaWRhbCxcclxuICAvKipcclxuICAgKiBAc2VlIEV4cG9uZW50aWFsXHJcbiAgICovXHJcbiAgRXhwb25lbnRpYWwsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBDaXJjdWxhclxyXG4gICAqL1xyXG4gIENpcmN1bGFyLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRWxhc3RpY1xyXG4gICAqL1xyXG4gIEVsYXN0aWMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBCYWNrXHJcbiAgICovXHJcbiAgQmFjayxcclxuICAvKipcclxuICAgKiBAc2VlIEJvdW5jZVxyXG4gICAqL1xyXG4gIEJvdW5jZSxcclxufTtcclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIC8qKlxyXG4gICAqIEBzZWUgdGhyZWUuanMvQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAqL1xyXG4gIEFuaW1hdGlvbkZlYXR1cmUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBbmltYXRpb25MYXllclxyXG4gICAqL1xyXG4gIEFuaW1hdGlvbkxheWVyLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgdGhyZWUuanMvU2luZ2xlU3RhdGVcclxuICAgKi9cclxuICBTaW5nbGVTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIFRyYW5zaXRpb25TdGF0ZVxyXG4gICAqL1xyXG4gIFRyYW5zaXRpb25TdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIEZyZWVCbGVuZFN0YXRlXHJcbiAgICovXHJcbiAgRnJlZUJsZW5kU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWV1ZVN0YXRlXHJcbiAgICovXHJcbiAgUXVldWVTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIFJhbmRvbUFuaW1hdGlvblN0YXRlXHJcbiAgICovXHJcbiAgUmFuZG9tQW5pbWF0aW9uU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBCbGVuZDFkU3RhdGVcclxuICAgKi9cclxuICBCbGVuZDFkU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBCbGVuZDJkU3RhdGVcclxuICAgKi9cclxuICBCbGVuZDJkU3RhdGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBbmltYXRpb25VdGlsc1xyXG4gICAqL1xyXG4gIEFuaW1hdGlvblV0aWxzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRWFzaW5nXHJcbiAgICovXHJcbiAgRWFzaW5nLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgTGF5ZXJCbGVuZE1vZGVzXHJcbiAgICovXHJcbiAgTGF5ZXJCbGVuZE1vZGVzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRGVmYXVsdExheWVyQmxlbmRNb2RlXHJcbiAgICovXHJcbiAgRGVmYXVsdExheWVyQmxlbmRNb2RlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQW5pbWF0aW9uVHlwZXNcclxuICAgKi9cclxuICBBbmltYXRpb25UeXBlcyxcclxufTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyoqXHJcbiAqIEBtb2R1bGUgdGhyZWUvSE9TVFxyXG4gKi9cclxuXHJcbmltcG9ydCBVdGlscyBmcm9tICdjb3JlL1V0aWxzJztcclxuaW1wb3J0IE1hdGhVdGlscyBmcm9tICdjb3JlL01hdGhVdGlscyc7XHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IExpcHN5bmNGZWF0dXJlLCB7RGVmYXVsdFZpc2VtZU1hcH0gZnJvbSAnY29yZS9MaXBzeW5jRmVhdHVyZSc7XHJcbmltcG9ydCBHZXN0dXJlRmVhdHVyZSwge0RlZmF1bHRHZXN0dXJlV29yZHN9IGZyb20gJ2NvcmUvR2VzdHVyZUZlYXR1cmUnO1xyXG5pbXBvcnQgUG9pbnRPZkludGVyZXN0RmVhdHVyZSwge0F4aXNNYXB9IGZyb20gJy4vUG9pbnRPZkludGVyZXN0RmVhdHVyZSc7XHJcbmltcG9ydCB7ZW52fSBmcm9tICcuL0hvc3RFbnZpcm9ubWVudCc7XHJcbmltcG9ydCBNZXNzZW5nZXIgZnJvbSAnLi9NZXNzZW5nZXInO1xyXG5pbXBvcnQgSG9zdE9iamVjdCBmcm9tICcuL0hvc3RPYmplY3QnO1xyXG5cclxuaW1wb3J0IGF3cyBmcm9tICcuL2F3c3BhY2snO1xyXG5pbXBvcnQgYW5pbSBmcm9tICcuL2FuaW1wYWNrJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAvKipcclxuICAgKiBAc2VlIGVudlxyXG4gICAqL1xyXG4gIGVudixcclxuICAvKipcclxuICAgKiBAc2VlIFV0aWxzXHJcbiAgICovXHJcbiAgVXRpbHMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBNYXRoVXRpbHNcclxuICAgKi9cclxuICBNYXRoVXRpbHMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBEZWZlcnJlZFxyXG4gICAqL1xyXG4gIERlZmVycmVkLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgdGhyZWUuanMvTWVzc2VuZ2VyXHJcbiAgICovXHJcbiAgTWVzc2VuZ2VyLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgdGhyZWUuanMvSG9zdE9iamVjdFxyXG4gICAqL1xyXG4gIEhvc3RPYmplY3QsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBjb3JlL0xpcHN5bmNGZWF0dXJlXHJcbiAgICovXHJcbiAgTGlwc3luY0ZlYXR1cmUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBHZXN0dXJlRmVhdHVyZVxyXG4gICAqL1xyXG4gIEdlc3R1cmVGZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgdGhyZWUuanMvUG9pbnRPZkludGVyZXN0RmVhdHVyZVxyXG4gICAqL1xyXG4gIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBEZWZhdWx0VmlzZW1lTWFwXHJcbiAgICovXHJcbiAgRGVmYXVsdFZpc2VtZU1hcCxcclxuICAvKipcclxuICAgKiBAc2VlIERlZmF1bHRHZXN0dXJlV29yZHNcclxuICAgKi9cclxuICBEZWZhdWx0R2VzdHVyZVdvcmRzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQXhpc01hcFxyXG4gICAqL1xyXG4gIEF4aXNNYXAsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBtb2R1bGU6dGhyZWUvYXdzcGFja1xyXG4gICAqL1xyXG4gIGF3cyxcclxuICAvKipcclxuICAgKiBAc2VlIG1vZHVsZTp0aHJlZS9hbmltcGFja1xyXG4gICAqL1xyXG4gIGFuaW0sXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///333\n')}]).default})); \ No newline at end of file +!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define("HOST",[],n):"object"==typeof exports?exports.HOST=n():e.HOST=n()}("undefined"!=typeof self?self:"undefined"!=typeof global?global:this,(function(){return function(e){var n={};function t(c){if(n[c])return n[c].exports;var a=n[c]={i:c,l:!1,exports:{}};return e[c].call(a.exports,a,a.exports,t),a.l=!0,a.exports}return t.m=e,t.c=n,t.d=function(e,n,c){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:c})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var c=Object.create(null);if(t.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var a in e)t.d(c,a,function(n){return e[n]}.bind(null,a));return c},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=130)}([function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar hide = __webpack_require__(11);\nvar redefine = __webpack_require__(12);\nvar ctx = __webpack_require__(19);\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzPzVjYTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0ZBQWtGLHVCQUF1QjtBQUN6RyxpRUFBaUU7QUFDakUsK0RBQStEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxlQUFlO0FBQ2YsZUFBZTtBQUNmLGVBQWU7QUFDZixnQkFBZ0I7QUFDaEIiLCJmaWxlIjoiMC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///0\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzP2NiN2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n")},function(module,exports){eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzPzc3MjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyIsImZpbGUiOiIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanM/NzllNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwiZmlsZSI6IjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3\n")},function(module,exports){eval("module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzP2QzZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwiZmlsZSI6IjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4\n")},function(module,exports,__webpack_require__){eval("var store = __webpack_require__(47)('wks');\nvar uid = __webpack_require__(33);\nvar Symbol = __webpack_require__(2).Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzPzJiNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///5\n")},function(module,exports,__webpack_require__){eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(21);\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzPzlkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0QiLCJmaWxlIjoiNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6\n")},function(module,exports,__webpack_require__){eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(3)(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanM/OWUxZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQVU7QUFDcEMsaUNBQWlDLFFBQVEsbUJBQW1CLFVBQVUsRUFBRSxFQUFFO0FBQzFFLENBQUMiLCJmaWxlIjoiNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar toPrimitive = __webpack_require__(23);\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(7) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzPzg2Y2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBbUI7QUFDaEQsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0M7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLENBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFlBQVk7QUFDZjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8\n")},function(module,exports,__webpack_require__){eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzPzRiZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0EiLCJmaWxlIjoiOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n")},function(module,exports){eval("module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcz9kOGU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///10\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\nmodule.exports = __webpack_require__(7) ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcz8zMmU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLENBQWdCO0FBQ3pDO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSIsImZpbGUiOiIxMS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///11\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar has = __webpack_require__(14);\nvar SRC = __webpack_require__(33)('src');\nvar $toString = __webpack_require__(134);\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(18).inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanM/MmFiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxHQUF1QjtBQUMvQztBQUNBOztBQUVBLG1CQUFPLENBQUMsRUFBUztBQUNqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///12\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanM/Mzg2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEZBQTBGO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///13\n")},function(module,exports){eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzPzY5YTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSIsImZpbGUiOiIxNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///14\n")},function(module,exports,__webpack_require__){eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(48);\nvar defined = __webpack_require__(24);\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcz82ODIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEM7QUFDQTtBQUNBIiwiZmlsZSI6IjE1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///15\n")},function(module,exports,__webpack_require__){eval("var pIE = __webpack_require__(49);\nvar createDesc = __webpack_require__(32);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar has = __webpack_require__(14);\nvar IE8_DOM_DEFINE = __webpack_require__(94);\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(7) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanM/MTFlOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBZTtBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHFCQUFxQixtQkFBTyxDQUFDLEVBQW1CO0FBQ2hEOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxDQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///16\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(14);\nvar toObject = __webpack_require__(9);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcz8zOGZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///17\n")},function(module,exports){eval("var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcz84Mzc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QjtBQUM3Qix1Q0FBdUMiLCJmaWxlIjoiMTguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjEyJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///18\n")},function(module,exports,__webpack_require__){eval("// optional / simple context binding\nvar aFunction = __webpack_require__(10);\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzPzliNDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///19\n")},function(module,exports){eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzPzJkOTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0EiLCJmaWxlIjoiMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///20\n")},function(module,exports){eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcz80NTg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar fails = __webpack_require__(3);\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcz8yZjIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsWUFBWSxtQkFBTyxDQUFDLENBQVU7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxjQUFjO0FBQ3ZELEdBQUc7QUFDSCIsImZpbGUiOiIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///22\n")},function(module,exports,__webpack_require__){eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(4);\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzPzZhOTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIyMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///23\n")},function(module,exports){eval('// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError("Can\'t call method on " + it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcz9iZTEzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///24\n')},function(module,exports,__webpack_require__){eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar fails = __webpack_require__(3);\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcz81ZWRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLHFEQUFxRCxPQUFPLEVBQUU7QUFDOUQiLCJmaWxlIjoiMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///25\n")},function(module,exports,__webpack_require__){eval("// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(19);\nvar IObject = __webpack_require__(48);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar asc = __webpack_require__(84);\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcz8wYTQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQXlCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxlQUFlO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBLDhCQUE4QjtBQUM5Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxTQUFTLGlDQUFpQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///26\n")},function(module,exports,__webpack_require__){"use strict";eval("\nif (__webpack_require__(7)) {\n var LIBRARY = __webpack_require__(29);\n var global = __webpack_require__(2);\n var fails = __webpack_require__(3);\n var $export = __webpack_require__(0);\n var $typed = __webpack_require__(62);\n var $buffer = __webpack_require__(92);\n var ctx = __webpack_require__(19);\n var anInstance = __webpack_require__(39);\n var propertyDesc = __webpack_require__(32);\n var hide = __webpack_require__(11);\n var redefineAll = __webpack_require__(41);\n var toInteger = __webpack_require__(21);\n var toLength = __webpack_require__(6);\n var toIndex = __webpack_require__(122);\n var toAbsoluteIndex = __webpack_require__(35);\n var toPrimitive = __webpack_require__(23);\n var has = __webpack_require__(14);\n var classof = __webpack_require__(44);\n var isObject = __webpack_require__(4);\n var toObject = __webpack_require__(9);\n var isArrayIter = __webpack_require__(81);\n var create = __webpack_require__(36);\n var getPrototypeOf = __webpack_require__(17);\n var gOPN = __webpack_require__(37).f;\n var getIterFn = __webpack_require__(83);\n var uid = __webpack_require__(33);\n var wks = __webpack_require__(5);\n var createArrayMethod = __webpack_require__(26);\n var createArrayIncludes = __webpack_require__(52);\n var speciesConstructor = __webpack_require__(51);\n var ArrayIterators = __webpack_require__(86);\n var Iterators = __webpack_require__(46);\n var $iterDetect = __webpack_require__(57);\n var setSpecies = __webpack_require__(38);\n var arrayFill = __webpack_require__(85);\n var arrayCopyWithin = __webpack_require__(111);\n var $DP = __webpack_require__(8);\n var $GOPD = __webpack_require__(16);\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanM/ZWMzMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLElBQUksbUJBQU8sQ0FBQyxDQUFnQjtBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFZO0FBQ3BDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFVO0FBQ2hDLGdCQUFnQixtQkFBTyxDQUFDLENBQVc7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLEVBQVU7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBaUI7QUFDekMsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsbUJBQW1CLG1CQUFPLENBQUMsRUFBZ0I7QUFDM0MscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0MsYUFBYSxtQkFBTyxDQUFDLEVBQVM7QUFDOUIsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0Msa0JBQWtCLG1CQUFPLENBQUMsRUFBZTtBQUN6QyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWE7QUFDckMsd0JBQXdCLG1CQUFPLENBQUMsRUFBc0I7QUFDdEQsb0JBQW9CLG1CQUFPLENBQUMsRUFBaUI7QUFDN0MsWUFBWSxtQkFBTyxDQUFDLEVBQVE7QUFDNUIsZ0JBQWdCLG1CQUFPLENBQUMsRUFBWTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjO0FBQ3ZDLGlCQUFpQixtQkFBTyxDQUFDLENBQWM7QUFDdkMsb0JBQW9CLG1CQUFPLENBQUMsRUFBa0I7QUFDOUMsZUFBZSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3pDLHVCQUF1QixtQkFBTyxDQUFDLEVBQWU7QUFDOUMsYUFBYSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQTRCO0FBQ3RELFlBQVksbUJBQU8sQ0FBQyxFQUFRO0FBQzVC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O0FBQ3ZDLE9BQU87QUFDUDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCx1REFBdUQsNkJBQTZCLEVBQUU7QUFDdEY7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUEsdURBQXVELFlBQVk7O0FBRW5FOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLLFVBQVUsZ0JBQWdCOztBQUUvQjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSyxXQUFXLGtDQUFrQzs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxvQ0FBb0MiLCJmaWxlIjoiMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///27\n")},function(module,exports,__webpack_require__){eval("var Map = __webpack_require__(117);\nvar $export = __webpack_require__(0);\nvar shared = __webpack_require__(47)('metadata');\nvar store = shared.store || (shared.store = new (__webpack_require__(120))());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return undefined;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return undefined;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });\n return keys;\n};\nvar toMetaKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function (O) {\n $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n store: store,\n map: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n key: toMetaKey,\n exp: exp\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YWRhdGEuanM/MzdhNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsR0FBVztBQUM3QixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVztBQUNoQyxpREFBaUQsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELGdCQUFnQixFQUFFO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTWFwID0gcmVxdWlyZSgnLi9lczYubWFwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdtZXRhZGF0YScpO1xudmFyIHN0b3JlID0gc2hhcmVkLnN0b3JlIHx8IChzaGFyZWQuc3RvcmUgPSBuZXcgKHJlcXVpcmUoJy4vZXM2LndlYWstbWFwJykpKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3RvcmUuc2V0KHRhcmdldCwgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9XG4gIHZhciBrZXlNZXRhZGF0YSA9IHRhcmdldE1ldGFkYXRhLmdldCh0YXJnZXRLZXkpO1xuICBpZiAoIWtleU1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdGFyZ2V0TWV0YWRhdGEuc2V0KHRhcmdldEtleSwga2V5TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9IHJldHVybiBrZXlNZXRhZGF0YTtcbn07XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbWV0YWRhdGFNYXAuZ2V0KE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUCkge1xuICBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIHRydWUpLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG59O1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsga2V5cy5wdXNoKGtleSk7IH0pO1xuICByZXR1cm4ga2V5cztcbn07XG52YXIgdG9NZXRhS2V5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG52YXIgZXhwID0gZnVuY3Rpb24gKE8pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgTyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RvcmU6IHN0b3JlLFxuICBtYXA6IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAsXG4gIGhhczogb3JkaW5hcnlIYXNPd25NZXRhZGF0YSxcbiAgZ2V0OiBvcmRpbmFyeUdldE93bk1ldGFkYXRhLFxuICBzZXQ6IG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEsXG4gIGtleXM6IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICBrZXk6IHRvTWV0YUtleSxcbiAgZXhwOiBleHBcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///28\n")},function(module,exports){eval("module.exports = false;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcz8yZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjI5LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///29\n")},function(module,exports,__webpack_require__){eval("var META = __webpack_require__(33)('meta');\nvar isObject = __webpack_require__(4);\nvar has = __webpack_require__(14);\nvar setDesc = __webpack_require__(8).f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !__webpack_require__(3)(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YS5qcz82N2FiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdBQVcsbUJBQU8sQ0FBQyxFQUFRO0FBQzNCLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFjO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVU7QUFDaEMsaURBQWlEO0FBQ2pELENBQUM7QUFDRDtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLFNBQVM7QUFDVCxHQUFHLEVBQUU7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///30\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(5)('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(11)(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzPzljNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFRO0FBQ2xDO0FBQ0EsMENBQTBDLG1CQUFPLENBQUMsRUFBUyw2QkFBNkI7QUFDeEY7QUFDQTtBQUNBIiwiZmlsZSI6IjMxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31\n")},function(module,exports){eval("module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcz80NjMwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///32\n")},function(module,exports){eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzP2NhNWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///33\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(96);\nvar enumBugKeys = __webpack_require__(69);\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanM/MGQ1OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFNUM7QUFDQTtBQUNBIiwiZmlsZSI6IjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///34\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanM/NzdmMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzNS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///35\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(1);\nvar dPs = __webpack_require__(97);\nvar enumBugKeys = __webpack_require__(69);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(66)('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(70).appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcz8yYWViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLEVBQWU7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLEVBQWU7QUFDdEMseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxFQUFlO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBUztBQUNuQiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///36\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(96);\nvar hiddenKeys = __webpack_require__(69).concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanM/OTA5MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxFQUF5QjtBQUM3QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFM0M7QUFDQTtBQUNBIiwiZmlsZSI6IjM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///37\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar dP = __webpack_require__(8);\nvar DESCRIPTORS = __webpack_require__(7);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanM/N2E1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixhQUFhO0FBQ25DLEdBQUc7QUFDSCIsImZpbGUiOiIzOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///38\n")},function(module,exports){eval("module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanM/ZjYwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///39\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar getIterFn = __webpack_require__(83);\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzPzRhNTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQixFQUFFO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUUsZ0JBQWdCO0FBQ25GO0FBQ0E7QUFDQSxHQUFHLDRDQUE0QyxnQ0FBZ0M7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///40\n")},function(module,exports,__webpack_require__){eval("var redefine = __webpack_require__(12);\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzP2RjYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///41\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcz9iMzlhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///42\n")},function(module,exports,__webpack_require__){eval("var def = __webpack_require__(8).f;\nvar has = __webpack_require__(14);\nvar TAG = __webpack_require__(5)('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanM/N2YyMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsQ0FBYztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsQ0FBUTs7QUFFMUI7QUFDQSxvRUFBb0UsaUNBQWlDO0FBQ3JHIiwiZmlsZSI6IjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///43\n")},function(module,exports,__webpack_require__){eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(20);\nvar TAG = __webpack_require__(5)('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcz8yM2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQSwyQkFBMkIsa0JBQWtCLEVBQUU7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxZQUFZO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///44\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar fails = __webpack_require__(3);\nvar spaces = __webpack_require__(72);\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanM/YWE3NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsRUFBYztBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///45\n")},function(module,exports){eval("module.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzPzg0ZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///46\n")},function(module,exports,__webpack_require__){eval("var core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: __webpack_require__(29) ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzPzU1MzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEM7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0EscUVBQXFFO0FBQ3JFLENBQUM7QUFDRDtBQUNBLFFBQVEsbUJBQU8sQ0FBQyxFQUFZO0FBQzVCO0FBQ0EsQ0FBQyIsImZpbGUiOiI0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///47\n")},function(module,exports,__webpack_require__){eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(20);\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcz82MjZhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUI7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///48\n")},function(module,exports){eval("exports.f = {}.propertyIsEnumerable;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcz81MmE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMiLCJmaWxlIjoiNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///49\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(1);\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanM/MGJmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///50\n")},function(module,exports,__webpack_require__){eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar SPECIES = __webpack_require__(5)('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lYmQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsQ0FBUTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///51\n")},function(module,exports,__webpack_require__){eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\nvar toAbsoluteIndex = __webpack_require__(35);\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanM/YzM2NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssWUFBWSxlQUFlO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiNTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///52\n")},function(module,exports){eval("exports.f = Object.getOwnPropertySymbols;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanM/MjYyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///53\n")},function(module,exports,__webpack_require__){eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(20);\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanM/MTE2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI1NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///54\n")},function(module,exports,__webpack_require__){eval("var toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzPzAyZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///55\n")},function(module,exports,__webpack_require__){eval("// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(4);\nvar cof = __webpack_require__(20);\nvar MATCH = __webpack_require__(5)('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzP2FhZTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixZQUFZLG1CQUFPLENBQUMsQ0FBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///56\n")},function(module,exports,__webpack_require__){eval("var ITERATOR = __webpack_require__(5)('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanM/NWNjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDLHFCQUFxQjtBQUN0RDtBQUNBLGlDQUFpQyxTQUFTLEVBQUU7QUFDNUMsQ0FBQyxZQUFZOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixTQUFTLHFCQUFxQjtBQUMzRCxpQ0FBaUMsYUFBYTtBQUM5QztBQUNBLEdBQUcsWUFBWTtBQUNmO0FBQ0EiLCJmaWxlIjoiNTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///57\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar classof = __webpack_require__(44);\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanM/NWYxYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgYnVpbHRpbkV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG5cbiAvLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG4gIHJldHVybiBidWlsdGluRXhlYy5jYWxsKFIsIFMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///58\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(113);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar fails = __webpack_require__(3);\nvar defined = __webpack_require__(24);\nvar wks = __webpack_require__(5);\nvar regexpExec = __webpack_require__(87);\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcz8yMTRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFtQjtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxVQUFVLG1CQUFPLENBQUMsQ0FBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw0Q0FBNEM7QUFDckU7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsVUFBVTtBQUN2QztBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsbUJBQW1CLGFBQWE7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsV0FBVztBQUN4RDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MscUNBQXFDO0FBQ3JFO0FBQ0E7QUFDQSwyQkFBMkIsZ0NBQWdDO0FBQzNEO0FBQ0E7QUFDQSIsImZpbGUiOiI1OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///59\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcz9hMjVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDOztBQUVBIiwiZmlsZSI6IjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///60\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar redefineAll = __webpack_require__(41);\nvar meta = __webpack_require__(30);\nvar forOf = __webpack_require__(40);\nvar anInstance = __webpack_require__(39);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar $iterDetect = __webpack_require__(57);\nvar setToStringTag = __webpack_require__(43);\nvar inheritIfRequired = __webpack_require__(73);\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcz9lMGI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBaUI7QUFDM0MsV0FBVyxtQkFBTyxDQUFDLEVBQVM7QUFDNUIsWUFBWSxtQkFBTyxDQUFDLEVBQVc7QUFDL0IsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUIsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLG1DQUFtQyxnQ0FBZ0MsYUFBYTtBQUN2Riw4QkFBOEIsbUNBQW1DLGFBQWE7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBLGtEQUFrRCxpQkFBaUIsRUFBRTtBQUNyRTtBQUNBLHdEQUF3RCxhQUFhLEVBQUUsRUFBRTtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSIsImZpbGUiOiI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///61\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar uid = __webpack_require__(33);\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanM/MGY4OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjYyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///62\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// Forced replacement prototype accessors methods\nmodule.exports = __webpack_require__(29) || !__webpack_require__(3)(function () {\n var K = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call\n __defineSetter__.call(null, K, function () { /* empty */ });\n delete __webpack_require__(2)[K];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWZvcmNlZC1wYW0uanM/YzViNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBWSxNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUM3RDtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsY0FBYztBQUM1RCxTQUFTLG1CQUFPLENBQUMsQ0FBVztBQUM1QixDQUFDIiwiZmlsZSI6IjYzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanM/YzZhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wiLCJmaWxlIjoiNjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///64\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar ctx = __webpack_require__(19);\nvar forOf = __webpack_require__(40);\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcz8yOGU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMIiwiZmlsZSI6IjY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBmcm9tOiBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcEZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcEZuID0gYXJndW1lbnRzWzFdO1xuICAgIHZhciBtYXBwaW5nLCBBLCBuLCBjYjtcbiAgICBhRnVuY3Rpb24odGhpcyk7XG4gICAgbWFwcGluZyA9IG1hcEZuICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG1hcHBpbmcpIGFGdW5jdGlvbihtYXBGbik7XG4gICAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICAgIEEgPSBbXTtcbiAgICBpZiAobWFwcGluZykge1xuICAgICAgbiA9IDA7XG4gICAgICBjYiA9IGN0eChtYXBGbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgICBBLnB1c2goY2IobmV4dEl0ZW0sIG4rKykpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIEEucHVzaCwgQSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///65\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar document = __webpack_require__(2).document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcz8yMzBlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///66\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar LIBRARY = __webpack_require__(29);\nvar wksExt = __webpack_require__(95);\nvar defineProperty = __webpack_require__(8).f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcz8zYTcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLENBQWM7QUFDM0M7QUFDQSwwREFBMEQsc0JBQXNCO0FBQ2hGLGtGQUFrRix3QkFBd0I7QUFDMUciLCJmaWxlIjoiNjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///67\n")},function(module,exports,__webpack_require__){eval("var shared = __webpack_require__(47)('keys');\nvar uid = __webpack_require__(33);\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcz82MTNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCO0FBQ0E7QUFDQSIsImZpbGUiOiI2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///68\n")},function(module,exports){eval("// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcz9lMTFlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///69\n")},function(module,exports,__webpack_require__){eval("var document = __webpack_require__(2).document;\nmodule.exports = document && document.documentElement;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcz9mYWIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFXO0FBQ2xDIiwiZmlsZSI6IjcwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///70\n")},function(module,exports,__webpack_require__){eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = __webpack_require__(19)(Function.call, __webpack_require__(16).f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzPzhiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFRLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3ZFO0FBQ0E7QUFDQSxPQUFPLFlBQVksY0FBYztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7QUFDUjtBQUNBIiwiZmlsZSI6IjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///71\n")},function(module,exports){eval("module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzP2ZkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSIsImZpbGUiOiI3Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///72\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar setPrototypeOf = __webpack_require__(71).set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcz81ZGJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiI3My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///73\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar toInteger = __webpack_require__(21);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXJlcGVhdC5qcz85NzQ0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxjQUFjLG1CQUFPLENBQUMsRUFBWTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0EiLCJmaWxlIjoiNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgcmV0dXJuIHJlcztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///74\n")},function(module,exports){eval("// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzPzk2ZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI3NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSA9PSAwIHx8IHggIT0geCA/IHggOiB4IDwgMCA/IC0xIDogMTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///75\n")},function(module,exports){eval("// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcz8yZDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiNzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBtMSA9IE1hdGguZXhwbTE7XG5tb2R1bGUuZXhwb3J0cyA9ICghJGV4cG0xXG4gIC8vIE9sZCBGRiBidWdcbiAgfHwgJGV4cG0xKDEwKSA+IDIyMDI1LjQ2NTc5NDgwNjcxOSB8fCAkZXhwbTEoMTApIDwgMjIwMjUuNDY1Nzk0ODA2NzE2NTE2OFxuICAvLyBUb3IgQnJvd3NlciBidWdcbiAgfHwgJGV4cG0xKC0yZS0xNykgIT0gLTJlLTE3XG4pID8gZnVuY3Rpb24gZXhwbTEoeCkge1xuICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiB4ID4gLTFlLTYgJiYgeCA8IDFlLTYgPyB4ICsgeCAqIHggLyAyIDogTWF0aC5leHAoeCkgLSAxO1xufSA6ICRleHBtMTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///76\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar $iterCreate = __webpack_require__(78);\nvar setToStringTag = __webpack_require__(43);\nvar getPrototypeOf = __webpack_require__(17);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanM/MDFmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsa0JBQWtCLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsRUFBc0I7QUFDbkQscUJBQXFCLG1CQUFPLENBQUMsRUFBZTtBQUM1QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQiw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBOztBQUVBLDhCQUE4QixhQUFhOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLG9DQUFvQztBQUM3RSw2Q0FBNkMsb0NBQW9DO0FBQ2pGLEtBQUssNEJBQTRCLG9DQUFvQztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0Esa0NBQWtDLDJCQUEyQjtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EiLCJmaWxlIjoiNzcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///77\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar create = __webpack_require__(36);\nvar descriptor = __webpack_require__(32);\nvar setToStringTag = __webpack_require__(43);\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(11)(IteratorPrototype, __webpack_require__(5)('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanM/NDFhMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUNuRDs7QUFFQTtBQUNBLG1CQUFPLENBQUMsRUFBUyxxQkFBcUIsbUJBQU8sQ0FBQyxDQUFRLDRCQUE0QixhQUFhLEVBQUU7O0FBRWpHO0FBQ0EscURBQXFELDRCQUE0QjtBQUNqRjtBQUNBIiwiZmlsZSI6Ijc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///78\n")},function(module,exports,__webpack_require__){eval("// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(56);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanM/ZDJjOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7QUFDdEIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQVk7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///79\n")},function(module,exports,__webpack_require__){eval("var MATCH = __webpack_require__(5)('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzPzUxNDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLENBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSyxZQUFZO0FBQ2pCLEdBQUc7QUFDSCIsImZpbGUiOiI4MC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///80\n")},function(module,exports,__webpack_require__){eval("// check on default Array iterator\nvar Iterators = __webpack_require__(46);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcz8zM2E0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///81\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $defineProperty = __webpack_require__(8);\nvar createDesc = __webpack_require__(32);\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzP2YxYWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFjO0FBQzVDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCOztBQUUzQztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///82\n")},function(module,exports,__webpack_require__){eval("var classof = __webpack_require__(44);\nvar ITERATOR = __webpack_require__(5)('iterator');\nvar Iterators = __webpack_require__(46);\nmodule.exports = __webpack_require__(18).getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanM/MjdlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBUTtBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLEVBQVM7QUFDbEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///83\n")},function(module,exports,__webpack_require__){eval("// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(223);\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jcmVhdGUuanM/Y2QxYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLHlCQUF5QixtQkFBTyxDQUFDLEdBQThCOztBQUUvRDtBQUNBO0FBQ0EiLCJmaWxlIjoiODQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///84\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZmlsbC5qcz8zNmJkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUFzQjtBQUNwRCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///85\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar addToUnscopables = __webpack_require__(31);\nvar step = __webpack_require__(112);\nvar Iterators = __webpack_require__(46);\nvar toIObject = __webpack_require__(15);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(77)(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanM/Y2FkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLHVCQUF1QixtQkFBTyxDQUFDLEVBQXVCO0FBQ3RELFdBQVcsbUJBQU8sQ0FBQyxHQUFjO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQ0FBZ0M7QUFDaEMsY0FBYztBQUNkLGlCQUFpQjtBQUNqQjtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///86\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar regexpFlags = __webpack_require__(50);\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanM/NTIwYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFVOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvLFxuICAgICAgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTFbTEFTVF9JTkRFWF0gIT09IDAgfHwgcmUyW0xBU1RfSU5ERVhdICE9PSAwO1xufSkoKTtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQ7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgcmUuc291cmNlICsgJyQoPyFcXFxccyknLCByZWdleHBGbGFncy5jYWxsKHJlKSk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlW0xBU1RfSU5ERVhdO1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwocmUsIHN0cik7XG5cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZVtMQVNUX0lOREVYXSA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///87\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar at = __webpack_require__(55)(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanM/MDM5MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxFQUFjOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///88\n")},function(module,exports,__webpack_require__){eval("var ctx = __webpack_require__(19);\nvar invoke = __webpack_require__(102);\nvar html = __webpack_require__(70);\nvar cel = __webpack_require__(66);\nvar global = __webpack_require__(2);\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (__webpack_require__(20)(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcz8xOTkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxHQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLG1CQUFPLENBQUMsRUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///89\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar macrotask = __webpack_require__(89).set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzPzgwNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBUztBQUNqQztBQUNBO0FBQ0E7QUFDQSxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx1Q0FBdUMsc0JBQXNCLEVBQUU7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///90\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__(10);\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcz9hNWI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///91\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar DESCRIPTORS = __webpack_require__(7);\nvar LIBRARY = __webpack_require__(29);\nvar $typed = __webpack_require__(62);\nvar hide = __webpack_require__(11);\nvar redefineAll = __webpack_require__(41);\nvar fails = __webpack_require__(3);\nvar anInstance = __webpack_require__(39);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar toIndex = __webpack_require__(122);\nvar gOPN = __webpack_require__(37).f;\nvar dP = __webpack_require__(8).f;\nvar arrayFill = __webpack_require__(85);\nvar setToStringTag = __webpack_require__(43);\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYnVmZmVyLmpzP2VkMGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxTQUFTLG1CQUFPLENBQUMsQ0FBYztBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLFFBQVEsVUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsR0FBRztBQUNILHlCQUF5QjtBQUN6QixHQUFHO0FBQ0gsdUJBQXVCO0FBQ3ZCLDBCQUEwQjtBQUMxQiwwQkFBMEI7QUFDMUI7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxpQkFBaUI7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCEnO1xudmFyICRBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIE1hdGggPSBnbG9iYWwuTWF0aDtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcbnZhciBJbmZpbml0eSA9IGdsb2JhbC5JbmZpbml0eTtcbnZhciBCYXNlQnVmZmVyID0gJEFycmF5QnVmZmVyO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcbnZhciBCVUZGRVIgPSAnYnVmZmVyJztcbnZhciBCWVRFX0xFTkdUSCA9ICdieXRlTGVuZ3RoJztcbnZhciBCWVRFX09GRlNFVCA9ICdieXRlT2Zmc2V0JztcbnZhciAkQlVGRkVSID0gREVTQ1JJUFRPUlMgPyAnX2InIDogQlVGRkVSO1xudmFyICRMRU5HVEggPSBERVNDUklQVE9SUyA/ICdfbCcgOiBCWVRFX0xFTkdUSDtcbnZhciAkT0ZGU0VUID0gREVTQ1JJUFRPUlMgPyAnX28nIDogQllURV9PRkZTRVQ7XG5cbi8vIElFRUU3NTQgY29udmVyc2lvbnMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9pZWVlNzU0XG5mdW5jdGlvbiBwYWNrSUVFRTc1NCh2YWx1ZSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobkJ5dGVzKTtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1MZW4gPT09IDIzID8gcG93KDIsIC0yNCkgLSBwb3coMiwgLTc3KSA6IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwO1xuICB2YXIgZSwgbSwgYztcbiAgdmFsdWUgPSBhYnModmFsdWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmICh2YWx1ZSAhPSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgbSA9IHZhbHVlICE9IHZhbHVlID8gMSA6IDA7XG4gICAgZSA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZSA9IGZsb29yKGxvZyh2YWx1ZSkgLyBMTjIpO1xuICAgIGlmICh2YWx1ZSAqIChjID0gcG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrKztcbiAgICAgIGMgLz0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gZSArIGVCaWFzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSAwO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbaSsrXSA9IG0gJiAyNTUsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuICBlID0gZSA8PCBtTGVuIHwgbTtcbiAgZUxlbiArPSBtTGVuO1xuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltpKytdID0gZSAmIDI1NSwgZSAvPSAyNTYsIGVMZW4gLT0gOCk7XG4gIGJ1ZmZlclstLWldIHw9IHMgKiAxMjg7XG4gIHJldHVybiBidWZmZXI7XG59XG5mdW5jdGlvbiB1bnBhY2tJRUVFNzU0KGJ1ZmZlciwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBlTGVuIC0gNztcbiAgdmFyIGkgPSBuQnl0ZXMgLSAxO1xuICB2YXIgcyA9IGJ1ZmZlcltpLS1dO1xuICB2YXIgZSA9IHMgJiAxMjc7XG4gIHZhciBtO1xuICBzID4+PSA3O1xuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZSA+Pj0gLW5CaXRzO1xuICBuQml0cyArPSBtTGVuO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6IHMgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIHBvdygyLCBtTGVuKTtcbiAgICBlID0gZSAtIGVCaWFzO1xuICB9IHJldHVybiAocyA/IC0xIDogMSkgKiBtICogcG93KDIsIGUgLSBtTGVuKTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrSTMyKGJ5dGVzKSB7XG4gIHJldHVybiBieXRlc1szXSA8PCAyNCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xufVxuZnVuY3Rpb24gcGFja0k4KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMTYoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMzIoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmLCBpdCA+PiAxNiAmIDB4ZmYsIGl0ID4+IDI0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrRjY0KGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgNTIsIDgpO1xufVxuZnVuY3Rpb24gcGFja0YzMihpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDIzLCA0KTtcbn1cblxuZnVuY3Rpb24gYWRkR2V0dGVyKEMsIGtleSwgaW50ZXJuYWwpIHtcbiAgZFAoQ1tQUk9UT1RZUEVdLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW2ludGVybmFsXTsgfSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IHN0b3JlLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKTtcbiAgcmV0dXJuIGlzTGl0dGxlRW5kaWFuID8gcGFjayA6IHBhY2sucmV2ZXJzZSgpO1xufVxuZnVuY3Rpb24gc2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgc3RvcmVbc3RhcnQgKyBpXSA9IHBhY2tbaXNMaXR0bGVFbmRpYW4gPyBpIDogYnl0ZXMgLSBpIC0gMV07XG59XG5cbmlmICghJHR5cGVkLkFCVikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICB0aGlzLl9iID0gYXJyYXlGaWxsLmNhbGwobmV3IEFycmF5KGJ5dGVMZW5ndGgpLCAwKTtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICREYXRhVmlldywgREFUQV9WSUVXKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgJEFycmF5QnVmZmVyLCBEQVRBX1ZJRVcpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBidWZmZXJbJExFTkdUSF07XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihieXRlT2Zmc2V0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB0aGlzWyRCVUZGRVJdID0gYnVmZmVyO1xuICAgIHRoaXNbJE9GRlNFVF0gPSBvZmZzZXQ7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJVRkZFUiwgJ19iJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfT0ZGU0VULCAnX28nKTtcbiAgfVxuXG4gIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgZ2V0SW50ODogZnVuY3Rpb24gZ2V0SW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF07XG4gICAgfSxcbiAgICBnZXRJbnQxNjogZnVuY3Rpb24gZ2V0SW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDIzLCA0KTtcbiAgICB9LFxuICAgIGdldEZsb2F0NjQ6IGZ1bmN0aW9uIGdldEZsb2F0NjQoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDUyLCA4KTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGNjQsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAkQXJyYXlCdWZmZXIoMSk7XG4gIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoTmFOKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gJEFycmF5QnVmZmVyLm5hbWUgIT0gQVJSQVlfQlVGRkVSO1xuICB9KSkge1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIpO1xuICAgICAgcmV0dXJuIG5ldyBCYXNlQnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90byA9ICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQmFzZUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2VCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSBoaWRlKCRBcnJheUJ1ZmZlciwga2V5LCBCYXNlQnVmZmVyW2tleV0pO1xuICAgIH1cbiAgICBpZiAoIUxJQlJBUlkpIEFycmF5QnVmZmVyUHJvdG8uY29uc3RydWN0b3IgPSAkQXJyYXlCdWZmZXI7XG4gIH1cbiAgLy8gaU9TIFNhZmFyaSA3LnggYnVnXG4gIHZhciB2aWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gJERhdGFWaWV3W1BST1RPVFlQRV0uc2V0SW50ODtcbiAgdmlldy5zZXRJbnQ4KDAsIDIxNDc0ODM2NDgpO1xuICB2aWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh2aWV3LmdldEludDgoMCkgfHwgIXZpZXcuZ2V0SW50OCgxKSkgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcbmhpZGUoJERhdGFWaWV3W1BST1RPVFlQRV0sICR0eXBlZC5WSUVXLCB0cnVlKTtcbmV4cG9ydHNbQVJSQVlfQlVGRkVSXSA9ICRBcnJheUJ1ZmZlcjtcbmV4cG9ydHNbREFUQV9WSUVXXSA9ICREYXRhVmlldztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///92\n")},function(module,exports){eval('var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function("return this")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === "object") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it\'s\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcz9jZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QyIsImZpbGUiOiI5My5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///93\n')},function(module,exports,__webpack_require__){eval("module.exports = !__webpack_require__(7) && !__webpack_require__(3)(function () {\n return Object.defineProperty(__webpack_require__(66)('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanM/YzY5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQixNQUFNLG1CQUFPLENBQUMsQ0FBVTtBQUNsRSwrQkFBK0IsbUJBQU8sQ0FBQyxFQUFlLGdCQUFnQixtQkFBbUIsVUFBVSxFQUFFLEVBQUU7QUFDdkcsQ0FBQyIsImZpbGUiOiI5NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///94\n")},function(module,exports,__webpack_require__){eval("exports.f = __webpack_require__(5);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcz8zN2M4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxDQUFRIiwiZmlsZSI6Ijk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///95\n")},function(module,exports,__webpack_require__){eval("var has = __webpack_require__(14);\nvar toIObject = __webpack_require__(15);\nvar arrayIndexOf = __webpack_require__(52)(false);\nvar IE_PROTO = __webpack_require__(68)('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanM/Y2UxMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEVBQW1CO0FBQzlDLGVBQWUsbUJBQU8sQ0FBQyxFQUFlOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///96\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8);\nvar anObject = __webpack_require__(1);\nvar getKeys = __webpack_require__(34);\n\nmodule.exports = __webpack_require__(7) ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcz8xNDk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFdEMsaUJBQWlCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI5Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///97\n")},function(module,exports,__webpack_require__){eval("// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(15);\nvar gOPN = __webpack_require__(37).f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzPzdiYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxpQkFBaUI7O0FBRWpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///98\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(3)(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcz83MzMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZO0FBQ2xDOztBQUVBO0FBQ0EsNkJBQTZCLG1CQUFPLENBQUMsQ0FBVTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsVUFBVSxFQUFFO0FBQ2hELG1CQUFtQixzQ0FBc0M7QUFDekQsQ0FBQyxxQ0FBcUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMiLCJmaWxlIjoiOTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///99\n")},function(module,exports){eval("// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2FtZS12YWx1ZS5qcz84M2ExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///100\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar aFunction = __webpack_require__(10);\nvar isObject = __webpack_require__(4);\nvar invoke = __webpack_require__(102);\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcz9mMGMxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsR0FBVztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsU0FBUztBQUNwQztBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///101\n")},function(module,exports){eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzPzMxZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///102\n")},function(module,exports,__webpack_require__){eval("var $parseInt = __webpack_require__(2).parseInt;\nvar $trim = __webpack_require__(45).trim;\nvar ws = __webpack_require__(72);\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzPzNjYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVztBQUNuQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsU0FBUyxtQkFBTyxDQUFDLEVBQWM7QUFDL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxMDMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///103\n")},function(module,exports,__webpack_require__){eval("var $parseFloat = __webpack_require__(2).parseFloat;\nvar $trim = __webpack_require__(45).trim;\n\nmodule.exports = 1 / $parseFloat(__webpack_require__(72) + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanM/ZDc1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFXO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsaUNBQWlDLG1CQUFPLENBQUMsRUFBYztBQUN2RDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjEwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///104\n")},function(module,exports,__webpack_require__){eval("var cof = __webpack_require__(20);\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanM/YmVmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///105\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar isObject = __webpack_require__(4);\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcz85YzEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///106\n")},function(module,exports){eval("// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcz9kNmM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///107\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar sign = __webpack_require__(75);\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanM/OTFjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFjO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///108\n")},function(module,exports,__webpack_require__){eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(1);\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzPzFmYTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///109\n")},function(module,exports,__webpack_require__){eval("var aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar IObject = __webpack_require__(48);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzPzdiMjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHNDQUFzQztBQUM5QztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///110\n")},function(module,exports,__webpack_require__){"use strict";eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n\nvar toObject = __webpack_require__(9);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktY29weS13aXRoaW4uanM/YmE5MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNhO0FBQ2IsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///111\n")},function(module,exports){eval("module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzP2Q1M2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxVQUFVO0FBQ1YiLCJmaWxlIjoiMTEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///112\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar regexpExec = __webpack_require__(87);\n__webpack_require__(0)({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanM/YjBjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGlCQUFpQixtQkFBTyxDQUFDLEVBQWdCO0FBQ3pDLG1CQUFPLENBQUMsQ0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDIiwiZmlsZSI6IjExMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///113\n")},function(module,exports,__webpack_require__){eval("// 21.2.5.3 get RegExp.prototype.flags()\nif (__webpack_require__(7) && /./g.flags != 'g') __webpack_require__(8).f(RegExp.prototype, 'flags', {\n configurable: true,\n get: __webpack_require__(50)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzPzM4NDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBZ0Isd0JBQXdCLG1CQUFPLENBQUMsQ0FBYztBQUMxRTtBQUNBLE9BQU8sbUJBQU8sQ0FBQyxFQUFVO0FBQ3pCLENBQUMiLCJmaWxlIjoiMTE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///114\n")},function(module,exports){eval("module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcz85YzgwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osR0FBRztBQUNILFlBQVk7QUFDWjtBQUNBIiwiZmlsZSI6IjExNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///115\n")},function(module,exports,__webpack_require__){eval("var anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar newPromiseCapability = __webpack_require__(91);\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzP2JjYWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTE2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///116\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = __webpack_require__(61)(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzP2Y0MDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///117\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar dP = __webpack_require__(8).f;\nvar create = __webpack_require__(36);\nvar redefineAll = __webpack_require__(41);\nvar ctx = __webpack_require__(19);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar $iterDefine = __webpack_require__(77);\nvar step = __webpack_require__(112);\nvar setSpecies = __webpack_require__(38);\nvar DESCRIPTORS = __webpack_require__(7);\nvar fastKey = __webpack_require__(30).fastKey;\nvar validate = __webpack_require__(42);\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanM/YzI2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFnQjtBQUMxQyxXQUFXLG1CQUFPLENBQUMsR0FBYztBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLE9BQU87QUFDOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLDZCQUE2QjtBQUM3QiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLHFCQUFxQjtBQUNyQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RSxPQUFPO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QyxxQkFBcUI7QUFDckIsMEJBQTBCO0FBQzFCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjExOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///118\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar strong = __webpack_require__(118);\nvar validate = __webpack_require__(42);\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = __webpack_require__(61)(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc2V0LmpzPzRmN2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsR0FBc0I7QUFDM0MsZUFBZSxtQkFBTyxDQUFDLEVBQXdCO0FBQy9DOztBQUVBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsRUFBZTtBQUN4Qyx5QkFBeUIsbUVBQW1FO0FBQzVGLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTE5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///119\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar each = __webpack_require__(26)(0);\nvar redefine = __webpack_require__(12);\nvar meta = __webpack_require__(30);\nvar assign = __webpack_require__(99);\nvar weak = __webpack_require__(121);\nvar isObject = __webpack_require__(4);\nvar validate = __webpack_require__(42);\nvar NATIVE_WEAK_MAP = __webpack_require__(42);\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = __webpack_require__(61)(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanM/MTBhZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFrQjtBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixhQUFhLG1CQUFPLENBQUMsRUFBa0I7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEdBQW9CO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxFQUF3QjtBQUMvQyxzQkFBc0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFlOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSCIsImZpbGUiOiIxMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///120\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar redefineAll = __webpack_require__(41);\nvar getWeak = __webpack_require__(30).getWeak;\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar createArrayMethod = __webpack_require__(26);\nvar $has = __webpack_require__(14);\nvar validate = __webpack_require__(42);\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi13ZWFrLmpzPzY0M2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBUztBQUMvQixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUNsRCxXQUFXLG1CQUFPLENBQUMsRUFBUTtBQUMzQixlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIscUJBQXFCO0FBQ3JCLDBCQUEwQjtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBIiwiZmlsZSI6IjEyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///121\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanM/MDlmYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///122\n")},function(module,exports,__webpack_require__){eval("// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(37);\nvar gOPS = __webpack_require__(53);\nvar anObject = __webpack_require__(1);\nvar Reflect = __webpack_require__(2).Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanM/OTkwYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///123\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = __webpack_require__(54);\nvar isObject = __webpack_require__(4);\nvar toLength = __webpack_require__(6);\nvar ctx = __webpack_require__(19);\nvar IS_CONCAT_SPREADABLE = __webpack_require__(5)('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzP2M0NWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLDJCQUEyQixtQkFBTyxDQUFDLENBQVE7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6IjEyNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///124\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = __webpack_require__(6);\nvar repeat = __webpack_require__(74);\nvar defined = __webpack_require__(24);\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcz8yZTA4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsYUFBYSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyxFQUFZOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///125\n")},function(module,exports,__webpack_require__){eval("var DESCRIPTORS = __webpack_require__(7);\nvar getKeys = __webpack_require__(34);\nvar toIObject = __webpack_require__(15);\nvar isEnum = __webpack_require__(49).f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzPzUwNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCLG1CQUFPLENBQUMsQ0FBZ0I7QUFDMUMsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKE8sIGtleSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///126\n")},function(module,exports,__webpack_require__){eval('// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = __webpack_require__(44);\nvar from = __webpack_require__(128);\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn\'t generic");\n return from(this);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzPzQ0YjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxXQUFXLG1CQUFPLENBQUMsR0FBd0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///127\n')},function(module,exports,__webpack_require__){eval("var forOf = __webpack_require__(40);\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcz80Mzc5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyxFQUFXOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEyOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyLCBJVEVSQVRPUikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvck9mKGl0ZXIsIGZhbHNlLCByZXN1bHQucHVzaCwgcmVzdWx0LCBJVEVSQVRPUik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///128\n")},function(module,exports){eval("// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n if (\n arguments.length === 0\n // eslint-disable-next-line no-self-compare\n || x != x\n // eslint-disable-next-line no-self-compare\n || inLow != inLow\n // eslint-disable-next-line no-self-compare\n || inHigh != inHigh\n // eslint-disable-next-line no-self-compare\n || outLow != outLow\n // eslint-disable-next-line no-self-compare\n || outHigh != outHigh\n ) return NaN;\n if (x === Infinity || x === -Infinity) return x;\n return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcz9lOWQyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///129\n")},function(e,n,t){t(131),e.exports=t(333)},function(module,exports,__webpack_require__){"use strict";eval('/* WEBPACK VAR INJECTION */(function(global) {\n\n__webpack_require__(132);\n\n__webpack_require__(329);\n\n__webpack_require__(330);\n\nif (global._babelPolyfill) {\n throw new Error("only one instance of babel-polyfill is allowed");\n}\nglobal._babelPolyfill = true;\n\nvar DEFINE_PROPERTY = "defineProperty";\nfunction define(O, key, value) {\n O[key] || Object[DEFINE_PROPERTY](O, key, {\n writable: true,\n configurable: true,\n value: value\n });\n}\n\ndefine(String.prototype, "padLeft", "".padStart);\ndefine(String.prototype, "padRight", "".padEnd);\n\n"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) {\n [][key] && define(Array, key, Function.call.bind([][key]));\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcz9kYjRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhDQUFhOztBQUViLG1CQUFPLENBQUMsR0FBYzs7QUFFdEIsbUJBQU8sQ0FBQyxHQUE2Qjs7QUFFckMsbUJBQU8sQ0FBQyxHQUEwQjs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUMsRSIsImZpbGUiOiIxMzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///131\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(133);\n__webpack_require__(136);\n__webpack_require__(137);\n__webpack_require__(138);\n__webpack_require__(139);\n__webpack_require__(140);\n__webpack_require__(141);\n__webpack_require__(142);\n__webpack_require__(143);\n__webpack_require__(144);\n__webpack_require__(145);\n__webpack_require__(146);\n__webpack_require__(147);\n__webpack_require__(148);\n__webpack_require__(149);\n__webpack_require__(150);\n__webpack_require__(151);\n__webpack_require__(152);\n__webpack_require__(153);\n__webpack_require__(154);\n__webpack_require__(155);\n__webpack_require__(156);\n__webpack_require__(157);\n__webpack_require__(158);\n__webpack_require__(159);\n__webpack_require__(160);\n__webpack_require__(161);\n__webpack_require__(162);\n__webpack_require__(163);\n__webpack_require__(164);\n__webpack_require__(165);\n__webpack_require__(166);\n__webpack_require__(167);\n__webpack_require__(168);\n__webpack_require__(169);\n__webpack_require__(170);\n__webpack_require__(171);\n__webpack_require__(172);\n__webpack_require__(173);\n__webpack_require__(174);\n__webpack_require__(175);\n__webpack_require__(176);\n__webpack_require__(177);\n__webpack_require__(178);\n__webpack_require__(179);\n__webpack_require__(180);\n__webpack_require__(181);\n__webpack_require__(182);\n__webpack_require__(183);\n__webpack_require__(184);\n__webpack_require__(185);\n__webpack_require__(186);\n__webpack_require__(187);\n__webpack_require__(188);\n__webpack_require__(189);\n__webpack_require__(190);\n__webpack_require__(191);\n__webpack_require__(192);\n__webpack_require__(193);\n__webpack_require__(194);\n__webpack_require__(195);\n__webpack_require__(196);\n__webpack_require__(197);\n__webpack_require__(198);\n__webpack_require__(199);\n__webpack_require__(200);\n__webpack_require__(201);\n__webpack_require__(202);\n__webpack_require__(203);\n__webpack_require__(204);\n__webpack_require__(205);\n__webpack_require__(206);\n__webpack_require__(207);\n__webpack_require__(208);\n__webpack_require__(209);\n__webpack_require__(210);\n__webpack_require__(211);\n__webpack_require__(213);\n__webpack_require__(214);\n__webpack_require__(216);\n__webpack_require__(217);\n__webpack_require__(218);\n__webpack_require__(219);\n__webpack_require__(220);\n__webpack_require__(221);\n__webpack_require__(222);\n__webpack_require__(224);\n__webpack_require__(225);\n__webpack_require__(226);\n__webpack_require__(227);\n__webpack_require__(228);\n__webpack_require__(229);\n__webpack_require__(230);\n__webpack_require__(231);\n__webpack_require__(232);\n__webpack_require__(233);\n__webpack_require__(234);\n__webpack_require__(235);\n__webpack_require__(236);\n__webpack_require__(86);\n__webpack_require__(237);\n__webpack_require__(113);\n__webpack_require__(238);\n__webpack_require__(114);\n__webpack_require__(239);\n__webpack_require__(240);\n__webpack_require__(241);\n__webpack_require__(242);\n__webpack_require__(243);\n__webpack_require__(117);\n__webpack_require__(119);\n__webpack_require__(120);\n__webpack_require__(244);\n__webpack_require__(245);\n__webpack_require__(246);\n__webpack_require__(247);\n__webpack_require__(248);\n__webpack_require__(249);\n__webpack_require__(250);\n__webpack_require__(251);\n__webpack_require__(252);\n__webpack_require__(253);\n__webpack_require__(254);\n__webpack_require__(255);\n__webpack_require__(256);\n__webpack_require__(257);\n__webpack_require__(258);\n__webpack_require__(259);\n__webpack_require__(260);\n__webpack_require__(261);\n__webpack_require__(262);\n__webpack_require__(263);\n__webpack_require__(264);\n__webpack_require__(265);\n__webpack_require__(266);\n__webpack_require__(267);\n__webpack_require__(268);\n__webpack_require__(269);\n__webpack_require__(270);\n__webpack_require__(271);\n__webpack_require__(272);\n__webpack_require__(273);\n__webpack_require__(274);\n__webpack_require__(275);\n__webpack_require__(276);\n__webpack_require__(277);\n__webpack_require__(278);\n__webpack_require__(279);\n__webpack_require__(280);\n__webpack_require__(281);\n__webpack_require__(282);\n__webpack_require__(283);\n__webpack_require__(284);\n__webpack_require__(285);\n__webpack_require__(286);\n__webpack_require__(287);\n__webpack_require__(288);\n__webpack_require__(289);\n__webpack_require__(290);\n__webpack_require__(291);\n__webpack_require__(292);\n__webpack_require__(293);\n__webpack_require__(294);\n__webpack_require__(295);\n__webpack_require__(296);\n__webpack_require__(297);\n__webpack_require__(298);\n__webpack_require__(299);\n__webpack_require__(300);\n__webpack_require__(301);\n__webpack_require__(302);\n__webpack_require__(303);\n__webpack_require__(304);\n__webpack_require__(305);\n__webpack_require__(306);\n__webpack_require__(307);\n__webpack_require__(308);\n__webpack_require__(309);\n__webpack_require__(310);\n__webpack_require__(311);\n__webpack_require__(312);\n__webpack_require__(313);\n__webpack_require__(314);\n__webpack_require__(315);\n__webpack_require__(316);\n__webpack_require__(317);\n__webpack_require__(318);\n__webpack_require__(319);\n__webpack_require__(320);\n__webpack_require__(321);\n__webpack_require__(322);\n__webpack_require__(323);\n__webpack_require__(324);\n__webpack_require__(325);\n__webpack_require__(326);\n__webpack_require__(327);\n__webpack_require__(328);\nmodule.exports = __webpack_require__(18);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcz82NmY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBc0I7QUFDOUIsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsR0FBd0M7QUFDaEQsbUJBQU8sQ0FBQyxHQUFrRDtBQUMxRCxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUE2QztBQUNyRCxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBMkI7QUFDbkMsbUJBQU8sQ0FBQyxHQUF5QztBQUNqRCxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFvQztBQUM1QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBNkI7QUFDckMsbUJBQU8sQ0FBQyxHQUE2QjtBQUNyQyxtQkFBTyxDQUFDLEdBQXFDO0FBQzdDLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUEyQjtBQUNuQyxtQkFBTyxDQUFDLEdBQWtDO0FBQzFDLG1CQUFPLENBQUMsR0FBK0I7QUFDdkMsbUJBQU8sQ0FBQyxHQUFtQztBQUMzQyxtQkFBTyxDQUFDLEdBQThCO0FBQ3RDLG1CQUFPLENBQUMsR0FBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxHQUFpQztBQUN6QyxtQkFBTyxDQUFDLEdBQTZCO0FBQ3JDLG1CQUFPLENBQUMsR0FBc0M7QUFDOUMsbUJBQU8sQ0FBQyxHQUF1QztBQUMvQyxtQkFBTyxDQUFDLEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxH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QkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBb0I7QUFDNUIsbUJBQU8sQ0FBQyxHQUEwQjtBQUNsQyxtQkFBTyxDQUFDLEdBQXNCO0FBQzlCLG1CQUFPLENBQUMsR0FBeUI7QUFDakMsbUJBQU8sQ0FBQyxHQUE0QjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFpQiIsImZpbGUiOiIxMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///132\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar DESCRIPTORS = __webpack_require__(7);\nvar $export = __webpack_require__(0);\nvar redefine = __webpack_require__(12);\nvar META = __webpack_require__(30).KEY;\nvar $fails = __webpack_require__(3);\nvar shared = __webpack_require__(47);\nvar setToStringTag = __webpack_require__(43);\nvar uid = __webpack_require__(33);\nvar wks = __webpack_require__(5);\nvar wksExt = __webpack_require__(95);\nvar wksDefine = __webpack_require__(67);\nvar enumKeys = __webpack_require__(135);\nvar isArray = __webpack_require__(54);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar toObject = __webpack_require__(9);\nvar toIObject = __webpack_require__(15);\nvar toPrimitive = __webpack_require__(23);\nvar createDesc = __webpack_require__(32);\nvar _create = __webpack_require__(36);\nvar gOPNExt = __webpack_require__(98);\nvar $GOPD = __webpack_require__(16);\nvar $GOPS = __webpack_require__(53);\nvar $DP = __webpack_require__(8);\nvar $keys = __webpack_require__(34);\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n __webpack_require__(37).f = gOPNExt.f = $getOwnPropertyNames;\n __webpack_require__(49).f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !__webpack_require__(29)) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(11)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzPzhhODEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFVO0FBQy9CLGFBQWEsbUJBQU8sQ0FBQyxFQUFXO0FBQ2hDLHFCQUFxQixtQkFBTyxDQUFDLEVBQXNCO0FBQ25ELFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLFVBQVUsbUJBQU8sQ0FBQyxDQUFRO0FBQzFCLGFBQWEsbUJBQU8sQ0FBQyxFQUFZO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLEdBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLEVBQWE7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7QUFDeEMsY0FBYyxtQkFBTyxDQUFDLEVBQW9CO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQyxZQUFZLG1CQUFPLENBQUMsRUFBZ0I7QUFDcEMsVUFBVSxtQkFBTyxDQUFDLENBQWM7QUFDaEMsWUFBWSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEIsc0JBQXNCLHVCQUF1QixXQUFXLElBQUk7QUFDNUQsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxzQkFBc0IsbUNBQW1DO0FBQ3pELEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRSxnQ0FBZ0M7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBZ0I7QUFDMUIsRUFBRSxtQkFBTyxDQUFDLEVBQWU7QUFDekI7O0FBRUEsc0JBQXNCLG1CQUFPLENBQUMsRUFBWTtBQUMxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxrQkFBa0I7O0FBRTVFO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1QkFBdUI7O0FBRTNDLG9EQUFvRCw2QkFBNkI7O0FBRWpGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCwwQkFBMEIsZUFBZSxFQUFFO0FBQzNDLDBCQUEwQixnQkFBZ0I7QUFDMUMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLDhDQUE4QyxZQUFZLEVBQUU7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsT0FBTyxRQUFRLGlDQUFpQztBQUNwRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLG9DQUFvQyxtQkFBTyxDQUFDLEVBQVM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///133\n")},function(module,exports,__webpack_require__){eval("module.exports = __webpack_require__(47)('native-function-to-string', Function.toString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzP2ZhNWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBVyIsImZpbGUiOiIxMzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///134\n")},function(module,exports,__webpack_require__){eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(34);\nvar gOPS = __webpack_require__(53);\nvar pIE = __webpack_require__(49);\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzP2Q0YzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBZ0I7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFVBQVUsbUJBQU8sQ0FBQyxFQUFlO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIxMzUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///135\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: __webpack_require__(36) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qcz84NDc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsOEJBQThCLFNBQVMsbUJBQU8sQ0FBQyxFQUFrQixHQUFHIiwiZmlsZSI6IjEzNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///136\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperty: __webpack_require__(8).f });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcz8xYzAxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsQ0FBZ0IsY0FBYyxpQkFBaUIsbUJBQU8sQ0FBQyxDQUFjLEtBQUsiLCJmaWxlIjoiMTM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///137\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !__webpack_require__(7), 'Object', { defineProperties: __webpack_require__(97) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzPzU4YjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFnQixjQUFjLG1CQUFtQixtQkFBTyxDQUFDLEVBQWUsR0FBRyIsImZpbGUiOiIxMzguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjMgLyAxNS4yLjMuNyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydGllczogcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///138\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = __webpack_require__(15);\nvar $getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n__webpack_require__(25)('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcz85OTg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFnQjs7QUFFeEQsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTM5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///139\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = __webpack_require__(9);\nvar $getPrototypeOf = __webpack_require__(17);\n\n__webpack_require__(25)('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanM/ZTRmNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLHNCQUFzQixtQkFBTyxDQUFDLEVBQWU7O0FBRTdDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///140\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(9);\nvar $keys = __webpack_require__(34);\n\n__webpack_require__(25)('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanM/NDU2ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjs7QUFFcEMsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTQxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///141\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.7 Object.getOwnPropertyNames(O)\n__webpack_require__(25)('getOwnPropertyNames', function () {\n return __webpack_require__(98).f;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanM/MjVkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QixTQUFTLG1CQUFPLENBQUMsRUFBb0I7QUFDckMsQ0FBQyIsImZpbGUiOiIxNDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///142\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.5 Object.freeze(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcz8wZDZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///143\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.17 Object.seal(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanM/Y2Y2YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTOztBQUU1QixtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///144\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = __webpack_require__(4);\nvar meta = __webpack_require__(30).onFreeze;\n\n__webpack_require__(25)('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcz85YWVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEVBQVM7O0FBRTVCLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///145\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.12 Object.isFrozen(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbi5qcz82NmM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMiBPYmplY3QuaXNGcm96ZW4oTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRnJvemVuJywgZnVuY3Rpb24gKCRpc0Zyb3plbikge1xuICByZXR1cm4gZnVuY3Rpb24gaXNGcm96ZW4oaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRnJvemVuID8gJGlzRnJvemVuKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///146\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.13 Object.isSealed(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcz81N2YwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///147\n")},function(module,exports,__webpack_require__){eval("// 19.1.2.11 Object.isExtensible(O)\nvar isObject = __webpack_require__(4);\n\n__webpack_require__(25)('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanM/MTY1YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQyxtQkFBTyxDQUFDLEVBQWU7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNDguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuMTEgT2JqZWN0LmlzRXh0ZW5zaWJsZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNFeHRlbnNpYmxlJywgZnVuY3Rpb24gKCRpc0V4dGVuc2libGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlIDogZmFsc2U7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///148\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(0);\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(99) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcz9mNzUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDBDQUEwQyxTQUFTLG1CQUFPLENBQUMsRUFBa0IsR0FBRyIsImZpbGUiOiIxNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///149\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.10 Object.is(value1, value2)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { is: __webpack_require__(100) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzP2RiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyw4QkFBOEIsS0FBSyxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjMuMTAgT2JqZWN0LmlzKHZhbHVlMSwgdmFsdWUyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBpczogcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///150\n")},function(module,exports,__webpack_require__){eval("// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = __webpack_require__(0);\n$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(71).set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanM/ZmQyNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLDhCQUE4QixpQkFBaUIsbUJBQU8sQ0FBQyxFQUFjLE9BQU8iLCJmaWxlIjoiMTUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///151\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 19.1.3.6 Object.prototype.toString()\nvar classof = __webpack_require__(44);\nvar test = {};\ntest[__webpack_require__(5)('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n __webpack_require__(12)(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcz8wNmRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQztBQUNBLEtBQUssbUJBQU8sQ0FBQyxDQUFRO0FBQ3JCO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMTUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///152\n")},function(module,exports,__webpack_require__){eval("// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Function', { bind: __webpack_require__(101) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcz9kOTJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLGdDQUFnQyxPQUFPLG1CQUFPLENBQUMsR0FBUyxHQUFHIiwiZmlsZSI6IjE1My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///153\n")},function(module,exports,__webpack_require__){eval("var dP = __webpack_require__(8).f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || __webpack_require__(7) && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcz83ZjdmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLENBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTU0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///154\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar isObject = __webpack_require__(4);\nvar getPrototypeOf = __webpack_require__(17);\nvar HAS_INSTANCE = __webpack_require__(5)('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(8).f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzPzIxN2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLENBQVE7QUFDbkM7QUFDQTtBQUNBLHNDQUFzQyxtQkFBTyxDQUFDLENBQWMsa0NBQWtDO0FBQzlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMTU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///155\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtaW50LmpzPzE4ZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBYztBQUN0QztBQUNBLDBEQUEwRCxzQkFBc0IiLCJmaWxlIjoiMTU2LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///156\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanM/YjcyYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUFnQjtBQUMxQztBQUNBLDhEQUE4RCwwQkFBMEIiLCJmaWxlIjoiMTU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///157\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar global = __webpack_require__(2);\nvar has = __webpack_require__(14);\nvar cof = __webpack_require__(20);\nvar inheritIfRequired = __webpack_require__(73);\nvar toPrimitive = __webpack_require__(23);\nvar fails = __webpack_require__(3);\nvar gOPN = __webpack_require__(37).f;\nvar gOPD = __webpack_require__(16).f;\nvar dP = __webpack_require__(8).f;\nvar $trim = __webpack_require__(45).trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(__webpack_require__(36)(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = __webpack_require__(7) ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n __webpack_require__(12)(global, NUMBER, $Number);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzP2M1ZjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsRUFBUTtBQUMxQix3QkFBd0IsbUJBQU8sQ0FBQyxFQUF3QjtBQUN4RCxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QixXQUFXLG1CQUFPLENBQUMsRUFBZ0I7QUFDbkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFlBQVksbUJBQU8sQ0FBQyxFQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsRUFBa0I7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BELEtBQUs7QUFDTDtBQUNBLG9DQUFvQyxjQUFjLE9BQU87QUFDekQscUNBQXFDLGNBQWMsT0FBTztBQUMxRDtBQUNBO0FBQ0Esb0VBQW9FLE9BQU87QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLDBCQUEwQixFQUFFO0FBQ3RFO0FBQ0E7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGlCQUFpQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QiIsImZpbGUiOiIxNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///158\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toInteger = __webpack_require__(21);\nvar aNumberValue = __webpack_require__(105);\nvar repeat = __webpack_require__(74);\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !__webpack_require__(3)(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzPzAzNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLG1CQUFtQixtQkFBTyxDQUFDLEdBQW1CO0FBQzlDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtQkFBTyxDQUFDLENBQVU7QUFDeEI7QUFDQSxrQkFBa0I7QUFDbEIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciAkdG9GaXhlZCA9IDEuMC50b0ZpeGVkO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBkYXRhID0gWzAsIDAsIDAsIDAsIDAsIDBdO1xudmFyIEVSUk9SID0gJ051bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnO1xudmFyIFpFUk8gPSAnMCc7XG5cbnZhciBtdWx0aXBseSA9IGZ1bmN0aW9uIChuLCBjKSB7XG4gIHZhciBpID0gLTE7XG4gIHZhciBjMiA9IGM7XG4gIHdoaWxlICgrK2kgPCA2KSB7XG4gICAgYzIgKz0gbiAqIGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGMyICUgMWU3O1xuICAgIGMyID0gZmxvb3IoYzIgLyAxZTcpO1xuICB9XG59O1xudmFyIGRpdmlkZSA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIGMgPSAwO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBjICs9IGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGZsb29yKGMgLyBuKTtcbiAgICBjID0gKGMgJSBuKSAqIDFlNztcbiAgfVxufTtcbnZhciBudW1Ub1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgcyA9ICcnO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBpZiAocyAhPT0gJycgfHwgaSA9PT0gMCB8fCBkYXRhW2ldICE9PSAwKSB7XG4gICAgICB2YXIgdCA9IFN0cmluZyhkYXRhW2ldKTtcbiAgICAgIHMgPSBzID09PSAnJyA/IHQgOiBzICsgcmVwZWF0LmNhbGwoWkVSTywgNyAtIHQubGVuZ3RoKSArIHQ7XG4gICAgfVxuICB9IHJldHVybiBzO1xufTtcbnZhciBwb3cgPSBmdW5jdGlvbiAoeCwgbiwgYWNjKSB7XG4gIHJldHVybiBuID09PSAwID8gYWNjIDogbiAlIDIgPT09IDEgPyBwb3coeCwgbiAtIDEsIGFjYyAqIHgpIDogcG93KHggKiB4LCBuIC8gMiwgYWNjKTtcbn07XG52YXIgbG9nID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG4gPSAwO1xuICB2YXIgeDIgPSB4O1xuICB3aGlsZSAoeDIgPj0gNDA5Nikge1xuICAgIG4gKz0gMTI7XG4gICAgeDIgLz0gNDA5NjtcbiAgfVxuICB3aGlsZSAoeDIgPj0gMikge1xuICAgIG4gKz0gMTtcbiAgICB4MiAvPSAyO1xuICB9IHJldHVybiBuO1xufTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoISEkdG9GaXhlZCAmJiAoXG4gIDAuMDAwMDgudG9GaXhlZCgzKSAhPT0gJzAuMDAwJyB8fFxuICAwLjkudG9GaXhlZCgwKSAhPT0gJzEnIHx8XG4gIDEuMjU1LnRvRml4ZWQoMikgIT09ICcxLjI1JyB8fFxuICAxMDAwMDAwMDAwMDAwMDAwMTI4LjAudG9GaXhlZCgwKSAhPT0gJzEwMDAwMDAwMDAwMDAwMDAxMjgnXG4pIHx8ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvRml4ZWQuY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvRml4ZWQ6IGZ1bmN0aW9uIHRvRml4ZWQoZnJhY3Rpb25EaWdpdHMpIHtcbiAgICB2YXIgeCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCBFUlJPUik7XG4gICAgdmFyIGYgPSB0b0ludGVnZXIoZnJhY3Rpb25EaWdpdHMpO1xuICAgIHZhciBzID0gJyc7XG4gICAgdmFyIG0gPSBaRVJPO1xuICAgIHZhciBlLCB6LCBqLCBrO1xuICAgIGlmIChmIDwgMCB8fCBmID4gMjApIHRocm93IFJhbmdlRXJyb3IoRVJST1IpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoeCAhPSB4KSByZXR1cm4gJ05hTic7XG4gICAgaWYgKHggPD0gLTFlMjEgfHwgeCA+PSAxZTIxKSByZXR1cm4gU3RyaW5nKHgpO1xuICAgIGlmICh4IDwgMCkge1xuICAgICAgcyA9ICctJztcbiAgICAgIHggPSAteDtcbiAgICB9XG4gICAgaWYgKHggPiAxZS0yMSkge1xuICAgICAgZSA9IGxvZyh4ICogcG93KDIsIDY5LCAxKSkgLSA2OTtcbiAgICAgIHogPSBlIDwgMCA/IHggKiBwb3coMiwgLWUsIDEpIDogeCAvIHBvdygyLCBlLCAxKTtcbiAgICAgIHogKj0gMHgxMDAwMDAwMDAwMDAwMDtcbiAgICAgIGUgPSA1MiAtIGU7XG4gICAgICBpZiAoZSA+IDApIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIGogPSBmO1xuICAgICAgICB3aGlsZSAoaiA+PSA3KSB7XG4gICAgICAgICAgbXVsdGlwbHkoMWU3LCAwKTtcbiAgICAgICAgICBqIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgbXVsdGlwbHkocG93KDEwLCBqLCAxKSwgMCk7XG4gICAgICAgIGogPSBlIC0gMTtcbiAgICAgICAgd2hpbGUgKGogPj0gMjMpIHtcbiAgICAgICAgICBkaXZpZGUoMSA8PCAyMyk7XG4gICAgICAgICAgaiAtPSAyMztcbiAgICAgICAgfVxuICAgICAgICBkaXZpZGUoMSA8PCBqKTtcbiAgICAgICAgbXVsdGlwbHkoMSwgMSk7XG4gICAgICAgIGRpdmlkZSgyKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgbXVsdGlwbHkoMSA8PCAtZSwgMCk7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpICsgcmVwZWF0LmNhbGwoWkVSTywgZik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmID4gMCkge1xuICAgICAgayA9IG0ubGVuZ3RoO1xuICAgICAgbSA9IHMgKyAoayA8PSBmID8gJzAuJyArIHJlcGVhdC5jYWxsKFpFUk8sIGYgLSBrKSArIG0gOiBtLnNsaWNlKDAsIGsgLSBmKSArICcuJyArIG0uc2xpY2UoayAtIGYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHMgKyBtO1xuICAgIH0gcmV0dXJuIG07XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///159\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $fails = __webpack_require__(3);\nvar aNumberValue = __webpack_require__(105);\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbi5qcz81NGE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLENBQVU7QUFDL0IsbUJBQW1CLG1CQUFPLENBQUMsR0FBbUI7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0Esc0JBQXNCO0FBQ3RCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgJHRvUHJlY2lzaW9uID0gMS4wLnRvUHJlY2lzaW9uO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICgkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTctXG4gIHJldHVybiAkdG9QcmVjaXNpb24uY2FsbCgxLCB1bmRlZmluZWQpICE9PSAnMSc7XG59KSB8fCAhJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvUHJlY2lzaW9uLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b1ByZWNpc2lvbjogZnVuY3Rpb24gdG9QcmVjaXNpb24ocHJlY2lzaW9uKSB7XG4gICAgdmFyIHRoYXQgPSBhTnVtYmVyVmFsdWUodGhpcywgJ051bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gICAgcmV0dXJuIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gJHRvUHJlY2lzaW9uLmNhbGwodGhhdCkgOiAkdG9QcmVjaXNpb24uY2FsbCh0aGF0LCBwcmVjaXNpb24pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///160\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.1 Number.EPSILON\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanM/MmUzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsNEJBQTRCIiwiZmlsZSI6IjE2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xIE51bWJlci5FUFNJTE9OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgRVBTSUxPTjogTWF0aC5wb3coMiwgLTUyKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///161\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.2 Number.isFinite(number)\nvar $export = __webpack_require__(0);\nvar _isFinite = __webpack_require__(2).isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcz9mY2EwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsQ0FBVzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4yIE51bWJlci5pc0Zpbml0ZShudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIF9pc0Zpbml0ZSA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmlzRmluaXRlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNGaW5pdGU6IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBfaXNGaW5pdGUoaXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///162\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.3 Number.isInteger(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { isInteger: __webpack_require__(106) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXIuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsWUFBWSxtQkFBTyxDQUFDLEdBQWUsR0FBRyIsImZpbGUiOiIxNjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///163\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.4 Number.isNaN(number)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbi5qcz9lZTFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE2NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///164\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = __webpack_require__(0);\nvar isInteger = __webpack_require__(106);\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcz9iMWIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsR0FBZTtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTY1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///165\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanM/ODdmMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIscUNBQXFDIiwiZmlsZSI6IjE2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///166\n")},function(module,exports,__webpack_require__){eval("// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanM/OTI3OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw4QkFBOEIsc0NBQXNDIiwiZmlsZSI6IjE2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///167\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseFloat = __webpack_require__(104);\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzPzVkZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsR0FBZ0I7QUFDMUM7QUFDQSwrRUFBK0UsMEJBQTBCIiwiZmlsZSI6IjE2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMjAuMS4yLjEyIE51bWJlci5wYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgJ051bWJlcicsIHsgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///168\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $parseInt = __webpack_require__(103);\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcz8wNGZmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWM7QUFDdEM7QUFDQSwyRUFBMkUsc0JBQXNCIiwiZmlsZSI6IjE2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///169\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.3 Math.acosh(x)\nvar $export = __webpack_require__(0);\nvar log1p = __webpack_require__(107);\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcz83ZjI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEdBQWU7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMyBNYXRoLmFjb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGxvZzFwID0gcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpO1xudmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG52YXIgJGFjb3NoID0gTWF0aC5hY29zaDtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhY29zaFxuICAvLyBWOCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNTA5XG4gICYmIE1hdGguZmxvb3IoJGFjb3NoKE51bWJlci5NQVhfVkFMVUUpKSA9PSA3MTBcbiAgLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFjb3NoKEluZmluaXR5KSAtPiBOYU5cbiAgJiYgJGFjb3NoKEluZmluaXR5KSA9PSBJbmZpbml0eVxuKSwgJ01hdGgnLCB7XG4gIGFjb3NoOiBmdW5jdGlvbiBhY29zaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpIDwgMSA/IE5hTiA6IHggPiA5NDkwNjI2NS42MjQyNTE1NlxuICAgICAgPyBNYXRoLmxvZyh4KSArIE1hdGguTE4yXG4gICAgICA6IGxvZzFwKHggLSAxICsgc3FydCh4IC0gMSkgKiBzcXJ0KHggKyAxKSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///170\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.5 Math.asinh(x)\nvar $export = __webpack_require__(0);\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcz81MzZiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUVBQXlFLGVBQWUiLCJmaWxlIjoiMTcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjUgTWF0aC5hc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXNpbmggPSBNYXRoLmFzaW5oO1xuXG5mdW5jdGlvbiBhc2luaCh4KSB7XG4gIHJldHVybiAhaXNGaW5pdGUoeCA9ICt4KSB8fCB4ID09IDAgPyB4IDogeCA8IDAgPyAtYXNpbmgoLXgpIDogTWF0aC5sb2coeCArIE1hdGguc3FydCh4ICogeCArIDEpKTtcbn1cblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFzaW5oKDApIC0+IC0wXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFzaW5oICYmIDEgLyAkYXNpbmgoMCkgPiAwKSwgJ01hdGgnLCB7IGFzaW5oOiBhc2luaCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///171\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.7 Math.atanh(x)\nvar $export = __webpack_require__(0);\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hdGFuaC5qcz9kOWFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///172\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.9 Math.cbrt(x)\nvar $export = __webpack_require__(0);\nvar sign = __webpack_require__(75);\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzP2Y5YWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBYzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE3My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///173\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.11 Math.clz32(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcz8zMmQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTEgTWF0aC5jbHozMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbHozMjogZnVuY3Rpb24gY2x6MzIoeCkge1xuICAgIHJldHVybiAoeCA+Pj49IDApID8gMzEgLSBNYXRoLmZsb29yKE1hdGgubG9nKHggKyAwLjUpICogTWF0aC5MT0cyRSkgOiAzMjtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///174\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.12 Math.cosh(x)\nvar $export = __webpack_require__(0);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzPzI1YzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///175\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.14 Math.expm1(x)\nvar $export = __webpack_require__(0);\nvar $expm1 = __webpack_require__(76);\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5leHBtMS5qcz85ZjNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsYUFBYSxtQkFBTyxDQUFDLEVBQWU7O0FBRXBDLGlFQUFpRSxnQkFBZ0IiLCJmaWxlIjoiMTc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICgkZXhwbTEgIT0gTWF0aC5leHBtMSksICdNYXRoJywgeyBleHBtMTogJGV4cG0xIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///176\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.16 Math.fround(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { fround: __webpack_require__(108) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanM/MDQyZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsU0FBUyxtQkFBTyxDQUFDLEdBQWdCLEdBQUciLCJmaWxlIjoiMTc3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGZyb3VuZDogcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///177\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = __webpack_require__(0);\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcz9jN2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakM7O0FBRUE7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///178\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.18 Math.imul(x, y)\nvar $export = __webpack_require__(0);\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzP2Y0ZmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTc5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE4IE1hdGguaW11bCh4LCB5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW11bCA9IE1hdGguaW11bDtcblxuLy8gc29tZSBXZWJLaXQgdmVyc2lvbnMgZmFpbHMgd2l0aCBiaWcgbnVtYmVycywgc29tZSBoYXMgd3JvbmcgYXJpdHlcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkaW11bCgweGZmZmZmZmZmLCA1KSAhPSAtNSB8fCAkaW11bC5sZW5ndGggIT0gMjtcbn0pLCAnTWF0aCcsIHtcbiAgaW11bDogZnVuY3Rpb24gaW11bCh4LCB5KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgeG4gPSAreDtcbiAgICB2YXIgeW4gPSAreTtcbiAgICB2YXIgeGwgPSBVSU5UMTYgJiB4bjtcbiAgICB2YXIgeWwgPSBVSU5UMTYgJiB5bjtcbiAgICByZXR1cm4gMCB8IHhsICogeWwgKyAoKFVJTlQxNiAmIHhuID4+PiAxNikgKiB5bCArIHhsICogKFVJTlQxNiAmIHluID4+PiAxNikgPDwgMTYgPj4+IDApO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///179\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.21 Math.log10(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcz83ODcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///180\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.20 Math.log1p(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { log1p: __webpack_require__(107) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcz8wNDlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjE4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///181\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.22 Math.log2(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cyLmpzP2E2OWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMiBNYXRoLmxvZzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMjogZnVuY3Rpb24gbG9nMih4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///182\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.28 Math.sign(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { sign: __webpack_require__(75) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzPzBiMjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCLE9BQU8sbUJBQU8sQ0FBQyxFQUFjLEdBQUciLCJmaWxlIjoiMTgzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduOiByZXF1aXJlKCcuL19tYXRoLXNpZ24nKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///183\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.30 Math.sinh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzPzZjMWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///184\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.33 Math.tanh(x)\nvar $export = __webpack_require__(0);\nvar expm1 = __webpack_require__(76);\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50YW5oLmpzP2M3YzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBZTtBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///185\n")},function(module,exports,__webpack_require__){eval("// 20.2.2.34 Math.trunc(x)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcz84NGI0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxODYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///186\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludC5qcz81Njk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///187\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toLength = __webpack_require__(6);\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qcz83ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLENBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuNCBTdHJpbmcucmF3KGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKVxuICByYXc6IGZ1bmN0aW9uIHJhdyhjYWxsU2l0ZSkge1xuICAgIHZhciB0cGwgPSB0b0lPYmplY3QoY2FsbFNpdGUucmF3KTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodHBsLmxlbmd0aCk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGxlbiA+IGkpIHtcbiAgICAgIHJlcy5wdXNoKFN0cmluZyh0cGxbaSsrXSkpO1xuICAgICAgaWYgKGkgPCBhTGVuKSByZXMucHVzaChTdHJpbmcoYXJndW1lbnRzW2ldKSk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///188\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 21.1.3.25 String.prototype.trim()\n__webpack_require__(45)('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanM/NGYzNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE4OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///189\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $at = __webpack_require__(55)(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(77)(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzPzVkZjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixVQUFVLG1CQUFPLENBQUMsRUFBYzs7QUFFaEM7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLDZCQUE2QjtBQUM3QixjQUFjO0FBQ2Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsQ0FBQyIsImZpbGUiOiIxOTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///190\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanM/YTAzMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykoZmFsc2UpO1xuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///191\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aC5qcz9hZWY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsRUFBbUI7QUFDekM7QUFDQTs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///192\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\nvar $export = __webpack_require__(0);\nvar context = __webpack_require__(79);\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(80)(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzPzJmZGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6Qzs7QUFFQSxnQ0FBZ0MsbUJBQU8sQ0FBQyxFQUFvQjtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjEuMS4zLjcgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcsIHBvc2l0aW9uID0gMClcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5jb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgSU5DTFVERVMpXG4gICAgICAuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///193\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: __webpack_require__(74)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdC5qcz8xNGI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLEVBQWtCO0FBQ3BDLENBQUMiLCJmaWxlIjoiMTk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///194\n")},function(module,exports,__webpack_require__){"use strict";eval("// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\nvar $export = __webpack_require__(0);\nvar toLength = __webpack_require__(6);\nvar context = __webpack_require__(79);\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(80)(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoLmpzP2Y1NTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFtQjtBQUN6QztBQUNBOztBQUVBLGdDQUFnQyxtQkFBTyxDQUFDLEVBQW9CO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///195\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.2 String.prototype.anchor(name)\n__webpack_require__(13)('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcz84NDQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///196\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.3 String.prototype.big()\n__webpack_require__(13)('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcz85Yzg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMTk3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///197\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.4 String.prototype.blink()\n__webpack_require__(13)('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzP2ZhODMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIxOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///198\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.5 String.prototype.bold()\n__webpack_require__(13)('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQuanM/NDhjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjE5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JvbGQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm9sZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///199\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.6 String.prototype.fixed()\n__webpack_require__(13)('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzP2QyNjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///200\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.7 String.prototype.fontcolor(color)\n__webpack_require__(13)('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcz82YzM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjAxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///201\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.8 String.prototype.fontsize(size)\n__webpack_require__(13)('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzPzllYzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///202\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.9 String.prototype.italics()\n__webpack_require__(13)('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MuanM/ZDBiMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///203\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.10 String.prototype.link(url)\n__webpack_require__(13)('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanM/YjU0YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///204\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.11 String.prototype.small()\n__webpack_require__(13)('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzP2YzODYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///205\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.12 String.prototype.strike()\n__webpack_require__(13)('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcz8xNDQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3RyaWtlJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3RyaWtlJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///206\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.13 String.prototype.sub()\n__webpack_require__(13)('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcz82NzNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3ViJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///207\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// B.2.3.14 String.prototype.sup()\n__webpack_require__(13)('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcz8yNDJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3VwJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///208\n")},function(module,exports,__webpack_require__){eval("// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS5ub3cuanM/NzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw0QkFBNEIsbUJBQW1CLDZCQUE2QixFQUFFLEVBQUUiLCJmaWxlIjoiMjA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///209\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\n\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzPzAyOTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjs7QUFFM0MsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLG1DQUFtQywyQkFBMkIsVUFBVSxFQUFFLEVBQUU7QUFDNUUsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///210\n")},function(module,exports,__webpack_require__){eval("// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = __webpack_require__(0);\nvar toISOString = __webpack_require__(212);\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzPzhlYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUF1Qjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///211\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = __webpack_require__(3);\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1pc28tc3RyaW5nLmpzPzhlZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///212\n")},function(module,exports,__webpack_require__){eval("var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n __webpack_require__(12)(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanM/ODdiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjEzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///213\n")},function(module,exports,__webpack_require__){eval("var TO_PRIMITIVE = __webpack_require__(5)('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) __webpack_require__(11)(proto, TO_PRIMITIVE, __webpack_require__(215));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanM/YzhjZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsbUJBQU8sQ0FBQyxDQUFRO0FBQ25DOztBQUVBLDhCQUE4QixtQkFBTyxDQUFDLEVBQVMsdUJBQXVCLG1CQUFPLENBQUMsR0FBc0IiLCJmaWxlIjoiMjE0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///214\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanM/ODM4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjIxNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///215\n")},function(module,exports,__webpack_require__){eval("// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Array', { isArray: __webpack_require__(54) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanM/MmNhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsVUFBVSxtQkFBTyxDQUFDLEVBQWEsR0FBRyIsImZpbGUiOiIyMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///216\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar ctx = __webpack_require__(19);\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar call = __webpack_require__(109);\nvar isArrayIter = __webpack_require__(81);\nvar toLength = __webpack_require__(6);\nvar createProperty = __webpack_require__(82);\nvar getIterFn = __webpack_require__(83);\n\n$export($export.S + $export.F * !__webpack_require__(57)(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcz8xYzRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsV0FBVyxtQkFBTyxDQUFDLEdBQWM7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBb0I7QUFDakQsZ0JBQWdCLG1CQUFPLENBQUMsRUFBNEI7O0FBRXBELGlDQUFpQyxtQkFBTyxDQUFDLEVBQWdCLG1CQUFtQixrQkFBa0IsRUFBRTtBQUNoRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxnQ0FBZ0M7QUFDdkY7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLGtDQUFrQyxnQkFBZ0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2VcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///217\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar createProperty = __webpack_require__(82);\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanM/ZTgwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQsZ0JBQWdCO0FBQ2hCO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///218\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (__webpack_require__(48) != Object || !__webpack_require__(22)(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcz8zNzNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDOztBQUVBO0FBQ0EsaUNBQWlDLG1CQUFPLENBQUMsRUFBWSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFrQjtBQUMvRjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///219\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar html = __webpack_require__(70);\nvar cof = __webpack_require__(20);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * __webpack_require__(3)(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UuanM/MjNiZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLHNCQUFzQixtQkFBTyxDQUFDLEVBQXNCO0FBQ3BELGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0EsZ0NBQWdDLG1CQUFPLENBQUMsQ0FBVTtBQUNsRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsVUFBVTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGlmIChodG1sKSBhcnJheVNsaWNlLmNhbGwoaHRtbCk7XG59KSwgJ0FycmF5Jywge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2UoYmVnaW4sIGVuZCkge1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGlzLmxlbmd0aCk7XG4gICAgdmFyIGtsYXNzID0gY29mKHRoaXMpO1xuICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kO1xuICAgIGlmIChrbGFzcyA9PSAnQXJyYXknKSByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xuICAgIHZhciBzdGFydCA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuKTtcbiAgICB2YXIgdXBUbyA9IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbik7XG4gICAgdmFyIHNpemUgPSB0b0xlbmd0aCh1cFRvIC0gc3RhcnQpO1xuICAgIHZhciBjbG9uZWQgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSBjbG9uZWRbaV0gPSBrbGFzcyA9PSAnU3RyaW5nJ1xuICAgICAgPyB0aGlzLmNoYXJBdChzdGFydCArIGkpXG4gICAgICA6IHRoaXNbc3RhcnQgKyBpXTtcbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///220\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar toObject = __webpack_require__(9);\nvar fails = __webpack_require__(3);\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !__webpack_require__(22)($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcz81NWRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxZQUFZLG1CQUFPLENBQUMsQ0FBVTtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDLE1BQU0sbUJBQU8sQ0FBQyxFQUFrQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRzb3J0ID0gW10uc29ydDtcbnZhciB0ZXN0ID0gWzEsIDIsIDNdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFOC1cbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCBidWdcbiAgdGVzdC5zb3J0KG51bGwpO1xuICAvLyBPbGQgV2ViS2l0XG59KSB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRzb3J0KSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjI1IEFycmF5LnByb3RvdHlwZS5zb3J0KGNvbXBhcmVmbilcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWRcbiAgICAgID8gJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSwgYUZ1bmN0aW9uKGNvbXBhcmVmbikpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///221\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $forEach = __webpack_require__(26)(0);\nvar STRICT = __webpack_require__(22)([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2guanM/ZjNlMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFrQjtBQUN6QyxhQUFhLG1CQUFPLENBQUMsRUFBa0I7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgU1RSSUNUID0gcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZvckVhY2gsIHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFTVFJJQ1QsICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjEwIC8gMTUuNC40LjE4IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///222\n")},function(module,exports,__webpack_require__){eval("var isObject = __webpack_require__(4);\nvar isArray = __webpack_require__(54);\nvar SPECIES = __webpack_require__(5)('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lODUzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyxFQUFhO0FBQ25DLGNBQWMsbUJBQU8sQ0FBQyxDQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIyMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///223\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $map = __webpack_require__(26)(1);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzPzZkNjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsRUFBa0I7O0FBRXJDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5tYXAsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNSAvIDE1LjQuNC4xOSBBcnJheS5wcm90b3R5cGUubWFwKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///224\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $filter = __webpack_require__(26)(2);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzP2QyNWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBa0I7O0FBRXhDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///225\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $some = __webpack_require__(26)(3);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29tZS5qcz83NTlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQWtCOztBQUV0QyxpQ0FBaUMsbUJBQU8sQ0FBQyxFQUFrQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///226\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $every = __webpack_require__(26)(4);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanM/NjA5NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFdkMsaUNBQWlDLG1CQUFPLENBQUMsRUFBa0I7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///227\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzPzBjZDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE4IC8gMTUuNC40LjIxIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCBmYWxzZSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///228\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $reduce = __webpack_require__(110);\n\n$export($export.P + $export.F * !__webpack_require__(22)([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzPzQ4ZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsR0FBaUI7O0FBRXZDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQWtCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///229\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $indexOf = __webpack_require__(52)(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanM/NTdlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxFQUFtQjtBQUMxQztBQUNBOztBQUVBLG1EQUFtRCxtQkFBTyxDQUFDLEVBQWtCO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///230\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toIObject = __webpack_require__(15);\nvar toInteger = __webpack_require__(21);\nvar toLength = __webpack_require__(6);\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(22)($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcz85ODY1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDO0FBQ0E7O0FBRUEsbURBQW1ELG1CQUFPLENBQUMsRUFBa0I7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxXQUFXO0FBQ3JCO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjIzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///231\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { copyWithin: __webpack_require__(111) });\n\n__webpack_require__(31)('copyWithin');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanM/NzQ0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyw2QkFBNkIsYUFBYSxtQkFBTyxDQUFDLEdBQXNCLEdBQUc7O0FBRTNFLG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnY29weVdpdGhpbicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///232\n")},function(module,exports,__webpack_require__){eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = __webpack_require__(0);\n\n$export($export.P, 'Array', { fill: __webpack_require__(85) });\n\n__webpack_require__(31)('fill');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcz82YzdiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDZCQUE2QixPQUFPLG1CQUFPLENBQUMsRUFBZSxHQUFHOztBQUU5RCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///233\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcz83NTE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjggQXJyYXkucHJvdG90eXBlLmZpbmQocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg1KTtcbnZhciBLRVkgPSAnZmluZCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///234\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = __webpack_require__(0);\nvar $find = __webpack_require__(26)(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(31)(KEY);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcz8yMGQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxZQUFZLG1CQUFPLENBQUMsRUFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLGdCQUFnQixFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjM1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjkgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///235\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(38)('Array');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcz9kMDRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///236\n")},function(module,exports,__webpack_require__){eval("var global = __webpack_require__(2);\nvar inheritIfRequired = __webpack_require__(73);\nvar dP = __webpack_require__(8).f;\nvar gOPN = __webpack_require__(37).f;\nvar isRegExp = __webpack_require__(56);\nvar $flags = __webpack_require__(50);\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (__webpack_require__(7) && (!CORRECT_NEW || __webpack_require__(3)(function () {\n re2[__webpack_require__(5)('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n __webpack_require__(12)(global, 'RegExp', $RegExp);\n}\n\n__webpack_require__(38)('RegExp');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzPzNiMmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsd0JBQXdCLG1CQUFPLENBQUMsRUFBd0I7QUFDeEQsU0FBUyxtQkFBTyxDQUFDLENBQWM7QUFDL0IsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyxFQUFjO0FBQ3JDLGFBQWEsbUJBQU8sQ0FBQyxFQUFVO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksbUJBQU8sQ0FBQyxDQUFnQixzQkFBc0IsbUJBQU8sQ0FBQyxDQUFVO0FBQ3BFLE1BQU0sbUJBQU8sQ0FBQyxDQUFRO0FBQ3RCO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCLEVBQUU7QUFDNUMsMEJBQTBCLGdCQUFnQjtBQUMxQyxLQUFLO0FBQ0w7QUFDQSxvQ0FBb0MsaUJBQWlCO0FBQ3JEO0FBQ0E7QUFDQSxFQUFFLG1CQUFPLENBQUMsRUFBYTtBQUN2Qjs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCIiwiZmlsZSI6IjIzNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///237\n")},function(module,exports,__webpack_require__){"use strict";eval("\n__webpack_require__(114);\nvar anObject = __webpack_require__(1);\nvar $flags = __webpack_require__(50);\nvar DESCRIPTORS = __webpack_require__(7);\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n __webpack_require__(12)(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (__webpack_require__(3)(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcz82YjU0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsbUJBQU8sQ0FBQyxHQUFvQjtBQUM1QixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixrQkFBa0IsbUJBQU8sQ0FBQyxDQUFnQjtBQUMxQztBQUNBOztBQUVBO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLEVBQWE7QUFDdkI7O0FBRUE7QUFDQSxJQUFJLG1CQUFPLENBQUMsQ0FBVSxlQUFlLHdCQUF3QiwwQkFBMEIsWUFBWSxFQUFFO0FBQ3JHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjM4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmZsYWdzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IC8uL1tUT19TVFJJTkddO1xuXG52YXIgZGVmaW5lID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmbiwgdHJ1ZSk7XG59O1xuXG4vLyAyMS4yLjUuMTQgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZygpXG5pZiAocmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7IHJldHVybiAkdG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSkpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgcmV0dXJuICcvJy5jb25jYXQoUi5zb3VyY2UsICcvJyxcbiAgICAgICdmbGFncycgaW4gUiA/IFIuZmxhZ3MgOiAhREVTQ1JJUFRPUlMgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCA/ICRmbGFncy5jYWxsKFIpIDogdW5kZWZpbmVkKTtcbiAgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxufSBlbHNlIGlmICgkdG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkcpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///238\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toLength = __webpack_require__(6);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\n\n// @@match logic\n__webpack_require__(59)('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoLmpzPzQ5MTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyMzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///239\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar advanceStringIndex = __webpack_require__(88);\nvar regExpExec = __webpack_require__(58);\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\n__webpack_require__(59)('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanM/YTQ4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCO0FBQzFELGlCQUFpQixtQkFBTyxDQUFDLEVBQXlCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUMiLCJmaWxlIjoiMjQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///240\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar anObject = __webpack_require__(1);\nvar sameValue = __webpack_require__(100);\nvar regExpExec = __webpack_require__(58);\n\n// @@search logic\n__webpack_require__(59)('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcz8zODZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEdBQWU7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsRUFBeUI7O0FBRWxEO0FBQ0EsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///241\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar isRegExp = __webpack_require__(56);\nvar anObject = __webpack_require__(1);\nvar speciesConstructor = __webpack_require__(51);\nvar advanceStringIndex = __webpack_require__(88);\nvar toLength = __webpack_require__(6);\nvar callRegExpExec = __webpack_require__(58);\nvar regexpExec = __webpack_require__(87);\nvar fails = __webpack_require__(3);\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\n__webpack_require__(59)('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzPzI4YTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSxtQkFBTyxDQUFDLEVBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMseUJBQXlCLG1CQUFPLENBQUMsRUFBd0I7QUFDekQseUJBQXlCLG1CQUFPLENBQUMsRUFBeUI7QUFDMUQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMscUJBQXFCLG1CQUFPLENBQUMsRUFBeUI7QUFDdEQsaUJBQWlCLG1CQUFPLENBQUMsRUFBZ0I7QUFDekMsWUFBWSxtQkFBTyxDQUFDLENBQVU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLHlCQUF5QixFQUFFOztBQUVoRTtBQUNBLG1CQUFPLENBQUMsRUFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1GQUFtRjtBQUNuRjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EseUJBQXlCLG1CQUFtQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///242\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar LIBRARY = __webpack_require__(29);\nvar global = __webpack_require__(2);\nvar ctx = __webpack_require__(19);\nvar classof = __webpack_require__(44);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar aFunction = __webpack_require__(10);\nvar anInstance = __webpack_require__(39);\nvar forOf = __webpack_require__(40);\nvar speciesConstructor = __webpack_require__(51);\nvar task = __webpack_require__(89).set;\nvar microtask = __webpack_require__(90)();\nvar newPromiseCapabilityModule = __webpack_require__(91);\nvar perform = __webpack_require__(115);\nvar userAgent = __webpack_require__(60);\nvar promiseResolve = __webpack_require__(116);\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[__webpack_require__(5)('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = __webpack_require__(41)($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__webpack_require__(43)($Promise, PROMISE);\n__webpack_require__(38)(PROMISE);\nWrapper = __webpack_require__(18)[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(57)(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcz81NTFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLENBQVc7QUFDaEMsVUFBVSxtQkFBTyxDQUFDLEVBQVE7QUFDMUIsY0FBYyxtQkFBTyxDQUFDLEVBQVk7QUFDbEMsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RCxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlDQUFpQyxtQkFBTyxDQUFDLEVBQTJCO0FBQ3BFLGNBQWMsbUJBQU8sQ0FBQyxHQUFZO0FBQ2xDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMscUJBQXFCLG1CQUFPLENBQUMsR0FBb0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxFQUFFLG1CQUFPLENBQUMsQ0FBUTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsWUFBWTtBQUNmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsbUJBQW1CLGtDQUFrQztBQUNyRCxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxlQUFlLHVDQUF1QztBQUN0RDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDBCQUEwQjtBQUNqRDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGtCQUFrQix5QkFBeUIsS0FBSztBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCLHdCQUF3QjtBQUN4QixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCO0FBQ0EsdUJBQXVCLG1CQUFPLENBQUMsRUFBaUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRCxvQkFBb0I7QUFDOUUsbUJBQU8sQ0FBQyxFQUFzQjtBQUM5QixtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCLFVBQVUsbUJBQU8sQ0FBQyxFQUFTOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxnREFBZ0QsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4RTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///243\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar weak = __webpack_require__(121);\nvar validate = __webpack_require__(42);\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\n__webpack_require__(61)(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanM/YzAyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLFdBQVcsbUJBQU8sQ0FBQyxHQUFvQjtBQUN2QyxlQUFlLG1CQUFPLENBQUMsRUFBd0I7QUFDL0M7O0FBRUE7QUFDQSxtQkFBTyxDQUFDLEVBQWU7QUFDdkIsNkJBQTZCLG1FQUFtRTtBQUNoRyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI0NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbi8vIDIzLjQgV2Vha1NldCBPYmplY3RzXG5yZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy40LjMuMSBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfU0VUKSwgdmFsdWUsIHRydWUpO1xuICB9XG59LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///244\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar $typed = __webpack_require__(62);\nvar buffer = __webpack_require__(92);\nvar anObject = __webpack_require__(1);\nvar toAbsoluteIndex = __webpack_require__(35);\nvar toLength = __webpack_require__(6);\nvar isObject = __webpack_require__(4);\nvar ArrayBuffer = __webpack_require__(2).ArrayBuffer;\nvar speciesConstructor = __webpack_require__(51);\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * __webpack_require__(3)(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\n__webpack_require__(38)(ARRAY_BUFFER);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzP2M2NmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBVTtBQUMvQixhQUFhLG1CQUFPLENBQUMsRUFBaUI7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsRUFBc0I7QUFDcEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsQ0FBVztBQUNyQyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF3QjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkVBQTZFLDRCQUE0Qjs7QUFFekc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQsNENBQTRDLG1CQUFPLENBQUMsQ0FBVTtBQUM5RDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsNkZBQTZGO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQsbUJBQU8sQ0FBQyxFQUFnQiIsImZpbGUiOiIyNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciAkQXJyYXlCdWZmZXIgPSBidWZmZXIuQXJyYXlCdWZmZXI7XG52YXIgJERhdGFWaWV3ID0gYnVmZmVyLkRhdGFWaWV3O1xudmFyICRpc1ZpZXcgPSAkdHlwZWQuQUJWICYmIEFycmF5QnVmZmVyLmlzVmlldztcbnZhciAkc2xpY2UgPSAkQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlO1xudmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChBcnJheUJ1ZmZlciAhPT0gJEFycmF5QnVmZmVyKSwgeyBBcnJheUJ1ZmZlcjogJEFycmF5QnVmZmVyIH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEkdHlwZWQuQ09OU1RSLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS4zLjEgQXJyYXlCdWZmZXIuaXNWaWV3KGFyZylcbiAgaXNWaWV3OiBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgICByZXR1cm4gJGlzVmlldyAmJiAkaXNWaWV3KGl0KSB8fCBpc09iamVjdChpdCkgJiYgVklFVyBpbiBpdDtcbiAgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5VICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3ICRBcnJheUJ1ZmZlcigyKS5zbGljZSgxLCB1bmRlZmluZWQpLmJ5dGVMZW5ndGg7XG59KSwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuNC4zIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZShzdGFydCwgZW5kKVxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIGlmICgkc2xpY2UgIT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCkgcmV0dXJuICRzbGljZS5jYWxsKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIHZhciBsZW4gPSBhbk9iamVjdCh0aGlzKS5ieXRlTGVuZ3RoO1xuICAgIHZhciBmaXJzdCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kLCBsZW4pO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluKSB7XG4gICAgICB2aWV3VC5zZXRVaW50OChpbmRleCsrLCB2aWV3Uy5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShBUlJBWV9CVUZGRVIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///245\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\n$export($export.G + $export.W + $export.F * !__webpack_require__(62).ABV, {\n DataView: __webpack_require__(92).DataView\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3LmpzPzI2MmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsNkNBQTZDLG1CQUFPLENBQUMsRUFBVTtBQUMvRCxZQUFZLG1CQUFPLENBQUMsRUFBaUI7QUFDckMsQ0FBQyIsImZpbGUiOiIyNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///246\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcz9iMDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///247\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXkuanM/MzRlZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjQ4LmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///248\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheS5qcz82YWEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///249\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanM/MTVhYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///250\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzP2FmNTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1MS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///251\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXkuanM/YjZlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///252\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzPzljMjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI1My5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///253\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcz82M2Q5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///254\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(27)('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheS5qcz80ZGRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsRUFBZ0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///255\n")},function(module,exports,__webpack_require__){eval("// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = __webpack_require__(0);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar rApply = (__webpack_require__(2).Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !__webpack_require__(3)(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcz9kZjFiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsQ0FBVyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQSxpQ0FBaUMsbUJBQU8sQ0FBQyxDQUFVO0FBQ25ELHNCQUFzQixjQUFjO0FBQ3BDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///256\n")},function(module,exports,__webpack_require__){eval("// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = __webpack_require__(0);\nvar create = __webpack_require__(36);\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\nvar fails = __webpack_require__(3);\nvar bind = __webpack_require__(101);\nvar rConstruct = (__webpack_require__(2).Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanM/MjM5NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjtBQUN2QyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLFlBQVksbUJBQU8sQ0FBQyxDQUFVO0FBQzlCLFdBQVcsbUJBQU8sQ0FBQyxHQUFTO0FBQzVCLGtCQUFrQixtQkFBTyxDQUFDLENBQVcsZUFBZTs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLG1DQUFtQyxjQUFjO0FBQ2pELENBQUM7QUFDRDtBQUNBLDBCQUEwQixjQUFjO0FBQ3hDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4yIFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJndW1lbnRzTGlzdCBbLCBuZXdUYXJnZXRdKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vX2JpbmQnKTtcbnZhciByQ29uc3RydWN0ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmNvbnN0cnVjdDtcblxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEockNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUcpLCAnUmVmbGVjdCcsIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUZ1bmN0aW9uKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUZ1bmN0aW9uKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIHJDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBGdW5jdGlvbi5hcHBseS5jYWxsKFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///257\n")},function(module,exports,__webpack_require__){eval("// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = __webpack_require__(8);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar toPrimitive = __webpack_require__(23);\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * __webpack_require__(3)(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanM/ODhjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCOztBQUUzQztBQUNBLGdDQUFnQyxtQkFBTyxDQUFDLENBQVU7QUFDbEQ7QUFDQSxnQ0FBZ0MsTUFBTSxXQUFXLE9BQU8sV0FBVztBQUNuRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///258\n")},function(module,exports,__webpack_require__){eval("// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = __webpack_require__(0);\nvar gOPD = __webpack_require__(16).f;\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanM/YmExNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjU5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS40IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgdmFyIGRlc2MgPSBnT1BEKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgICByZXR1cm4gZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUgPyBmYWxzZSA6IGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlLZXldO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///259\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// 26.1.5 Reflect.enumerate(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\n__webpack_require__(78)(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanM/N2ZmNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQSwrQkFBK0I7QUFDL0IsY0FBYztBQUNkLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDLEdBQUc7QUFDSCxVQUFVO0FBQ1YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjYwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///260\n")},function(module,exports,__webpack_require__){eval("// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar isObject = __webpack_require__(4);\nvar anObject = __webpack_require__(1);\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQuanM/ZDE4NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQixXQUFXIiwiZmlsZSI6IjI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///261\n")},function(module,exports,__webpack_require__){eval("// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = __webpack_require__(16);\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanM/ZWJkZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///262\n")},function(module,exports,__webpack_require__){eval("// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = __webpack_require__(0);\nvar getProto = __webpack_require__(17);\nvar anObject = __webpack_require__(1);\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzPzJkMzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBZTtBQUN0QyxlQUFlLG1CQUFPLENBQUMsQ0FBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///263\n")},function(module,exports,__webpack_require__){eval("// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5oYXMuanM/ZjZiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///264\n")},function(module,exports,__webpack_require__){eval("// 26.1.10 Reflect.isExtensible(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzPzIyNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEwIFJlZmxlY3QuaXNFeHRlbnNpYmxlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///265\n")},function(module,exports,__webpack_require__){eval("// 26.1.11 Reflect.ownKeys(target)\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Reflect', { ownKeys: __webpack_require__(123) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcz9jNjk4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLCtCQUErQixVQUFVLG1CQUFPLENBQUMsR0FBYSxHQUFHIiwiZmlsZSI6IjI2Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///266\n")},function(module,exports,__webpack_require__){eval("// 26.1.12 Reflect.preventExtensions(target)\nvar $export = __webpack_require__(0);\nvar anObject = __webpack_require__(1);\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanM/YTE5ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI2Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///267\n")},function(module,exports,__webpack_require__){eval("// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = __webpack_require__(8);\nvar gOPD = __webpack_require__(16);\nvar getPrototypeOf = __webpack_require__(17);\nvar has = __webpack_require__(14);\nvar $export = __webpack_require__(0);\nvar createDesc = __webpack_require__(32);\nvar anObject = __webpack_require__(1);\nvar isObject = __webpack_require__(4);\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQuanM/OTI1MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFNBQVMsbUJBQU8sQ0FBQyxDQUFjO0FBQy9CLFdBQVcsbUJBQU8sQ0FBQyxFQUFnQjtBQUNuQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDLFVBQVUsbUJBQU8sQ0FBQyxFQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGlCQUFpQixtQkFBTyxDQUFDLEVBQWtCO0FBQzNDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsV0FBVyIsImZpbGUiOiIyNjguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyNi4xLjEzIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgWywgcmVjZWl2ZXJdKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzYyA9IGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvO1xuICBpZiAoIW93bkRlc2MpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYgKGhhcyhvd25EZXNjLCAndmFsdWUnKSkge1xuICAgIGlmIChvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvciA9IGdPUEQuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZURlc2MoMCwgVikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvd25EZXNjLnNldCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3duRGVzYy5zZXQuY2FsbChyZWNlaXZlciwgViksIHRydWUpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IHNldDogc2V0IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///268\n")},function(module,exports,__webpack_require__){eval("// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = __webpack_require__(0);\nvar setProto = __webpack_require__(71);\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzPzkyNzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxlQUFlLG1CQUFPLENBQUMsRUFBYzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///269\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/Array.prototype.includes\nvar $export = __webpack_require__(0);\nvar $includes = __webpack_require__(52)(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n__webpack_require__(31)('includes');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanM/Njc2MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBbUI7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxtQkFBTyxDQUFDLEVBQXVCIiwiZmlsZSI6IjI3MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///270\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar aFunction = __webpack_require__(10);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\n__webpack_require__(31)('flatMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanM/ZTk1NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsdUJBQXVCLG1CQUFPLENBQUMsR0FBdUI7QUFDdEQsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2Qyx5QkFBeUIsbUJBQU8sQ0FBQyxFQUF5Qjs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///271\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten\nvar $export = __webpack_require__(0);\nvar flattenIntoArray = __webpack_require__(124);\nvar toObject = __webpack_require__(9);\nvar toLength = __webpack_require__(6);\nvar toInteger = __webpack_require__(21);\nvar arraySpeciesCreate = __webpack_require__(84);\n\n$export($export.P, 'Array', {\n flatten: function flatten(/* depthArg = 1 */) {\n var depthArg = arguments[0];\n var O = toObject(this);\n var sourceLen = toLength(O.length);\n var A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));\n return A;\n }\n});\n\n__webpack_require__(31)('flatten');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbi5qcz83MWYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyx1QkFBdUIsbUJBQU8sQ0FBQyxHQUF1QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXlCOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1CQUFPLENBQUMsRUFBdUIiLCJmaWxlIjoiMjcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///272\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = __webpack_require__(0);\nvar $at = __webpack_require__(55)(true);\nvar $fails = __webpack_require__(3);\n\nvar FORCED = $fails(function () {\n return '𠮷'.at(0) !== '𠮷';\n});\n\n$export($export.P + $export.F * FORCED, 'String', {\n at: function at(pos) {\n return $at(this, pos);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzPzM1MzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFjO0FBQ2hDLGFBQWEsbUJBQU8sQ0FBQyxDQUFVOztBQUUvQjtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjczLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG52YXIgRk9SQ0VEID0gJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICfwoK63Jy5hdCgwKSAhPT0gJ/CgrrcnO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VELCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///273\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcz9mNTc2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxXQUFXLG1CQUFPLENBQUMsR0FBZTtBQUNsQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlOztBQUV2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///274\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(0);\nvar $pad = __webpack_require__(125);\nvar userAgent = __webpack_require__(60);\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQuanM/ZWQ1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsV0FBVyxtQkFBTyxDQUFDLEdBQWU7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZhbHNlKTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///275\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcz8yM2JlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbUxlZnQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1MZWZ0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAxKTtcbiAgfTtcbn0sICd0cmltU3RhcnQnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///276\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\n__webpack_require__(45)('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanM/N2MwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsbUJBQU8sQ0FBQyxFQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1SaWdodCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbVJpZ2h0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAyKTtcbiAgfTtcbn0sICd0cmltRW5kJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///277\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://tc39.github.io/String.prototype.matchAll/\nvar $export = __webpack_require__(0);\nvar defined = __webpack_require__(24);\nvar toLength = __webpack_require__(6);\nvar isRegExp = __webpack_require__(56);\nvar getFlags = __webpack_require__(50);\nvar RegExpProto = RegExp.prototype;\n\nvar $RegExpStringIterator = function (regexp, string) {\n this._r = regexp;\n this._s = string;\n};\n\n__webpack_require__(78)($RegExpStringIterator, 'RegExp String', function next() {\n var match = this._r.exec(this._s);\n return { value: match, done: match === null };\n});\n\n$export($export.P, 'String', {\n matchAll: function matchAll(regexp) {\n defined(this);\n if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');\n var S = String(this);\n var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);\n var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\n rx.lastIndex = toLength(regexp.lastIndex);\n return new $RegExpStringIterator(rx, S);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbC5qcz85ODhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxjQUFjLG1CQUFPLENBQUMsRUFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsRUFBVTtBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBTyxDQUFDLEVBQWdCO0FBQ3hCO0FBQ0EsVUFBVTtBQUNWLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI3OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZ2V0RmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIFJlZ0V4cFByb3RvID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIChyZWdleHAsIHN0cmluZykge1xuICB0aGlzLl9yID0gcmVnZXhwO1xuICB0aGlzLl9zID0gc3RyaW5nO1xufTtcblxucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKSgkUmVnRXhwU3RyaW5nSXRlcmF0b3IsICdSZWdFeHAgU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy5fci5leGVjKHRoaXMuX3MpO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IG1hdGNoID09PSBudWxsIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICBkZWZpbmVkKHRoaXMpO1xuICAgIGlmICghaXNSZWdFeHAocmVnZXhwKSkgdGhyb3cgVHlwZUVycm9yKHJlZ2V4cCArICcgaXMgbm90IGEgcmVnZXhwIScpO1xuICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgIHZhciBmbGFncyA9ICdmbGFncycgaW4gUmVnRXhwUHJvdG8gPyBTdHJpbmcocmVnZXhwLmZsYWdzKSA6IGdldEZsYWdzLmNhbGwocmVnZXhwKTtcbiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cC5zb3VyY2UsIH5mbGFncy5pbmRleE9mKCdnJykgPyBmbGFncyA6ICdnJyArIGZsYWdzKTtcbiAgICByeC5sYXN0SW5kZXggPSB0b0xlbmd0aChyZWdleHAubGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3ICRSZWdFeHBTdHJpbmdJdGVyYXRvcihyeCwgUyk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///278\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('asyncIterator');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzP2FjNGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyxFQUFlIiwiZmlsZSI6IjI3OS5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///279\n")},function(module,exports,__webpack_require__){eval("__webpack_require__(67)('observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanM/YzdjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBTyxDQUFDLEVBQWUiLCJmaWxlIjoiMjgwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///280\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = __webpack_require__(0);\nvar ownKeys = __webpack_require__(123);\nvar toIObject = __webpack_require__(15);\nvar gOPD = __webpack_require__(16);\nvar createProperty = __webpack_require__(82);\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMuanM/OGU2ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGNBQWMsbUJBQU8sQ0FBQyxHQUFhO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsV0FBVyxtQkFBTyxDQUFDLEVBQWdCO0FBQ25DLHFCQUFxQixtQkFBTyxDQUFDLEVBQW9COztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///281\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $values = __webpack_require__(126)(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcy5qcz84NjE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsY0FBYyxtQkFBTyxDQUFDLEdBQW9COztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMjgyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///282\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(0);\nvar $entries = __webpack_require__(126)(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMuanM/ZmZjMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxHQUFvQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjI4My5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///283\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineGetter__: function __defineGetter__(P, getter) {\n $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXIuanM/NDUwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///284\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(10);\nvar $defineProperty = __webpack_require__(8);\n\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __defineSetter__: function __defineSetter__(P, setter) {\n $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanM/ZmVlNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLEVBQWU7QUFDdkMsc0JBQXNCLG1CQUFPLENBQUMsQ0FBYzs7QUFFNUM7QUFDQSxtQkFBTyxDQUFDLENBQWdCLHlCQUF5QixtQkFBTyxDQUFDLEVBQXNCO0FBQy9FO0FBQ0EsMENBQTBDLCtEQUErRDtBQUN6RztBQUNBLENBQUMiLCJmaWxlIjoiMjg1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///285\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.get;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanM/YjlhMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///286\n")},function(module,exports,__webpack_require__){"use strict";eval("\nvar $export = __webpack_require__(0);\nvar toObject = __webpack_require__(9);\nvar toPrimitive = __webpack_require__(23);\nvar getPrototypeOf = __webpack_require__(17);\nvar getOwnPropertyDescriptor = __webpack_require__(16).f;\n\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\n__webpack_require__(7) && $export($export.P + __webpack_require__(63), 'Object', {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var K = toPrimitive(P, true);\n var D;\n do {\n if (D = getOwnPropertyDescriptor(O, K)) return D.set;\n } while (O = getPrototypeOf(O));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanM/NjRkNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLGVBQWUsbUJBQU8sQ0FBQyxDQUFjO0FBQ3JDLGtCQUFrQixtQkFBTyxDQUFDLEVBQWlCO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLEVBQWU7QUFDNUMsK0JBQStCLG1CQUFPLENBQUMsRUFBZ0I7O0FBRXZEO0FBQ0EsbUJBQU8sQ0FBQyxDQUFnQix5QkFBeUIsbUJBQU8sQ0FBQyxFQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDIiwiZmlsZSI6IjI4Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///287\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Map', { toJSON: __webpack_require__(127)('Map') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanM/NDcwNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdNYXAnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///288\n")},function(module,exports,__webpack_require__){eval("// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = __webpack_require__(0);\n\n$export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(127)('Set') });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LnRvLWpzb24uanM/ZGI5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXOztBQUVqQyx1Q0FBdUMsU0FBUyxtQkFBTyxDQUFDLEdBQXVCLFVBQVUiLCJmaWxlIjoiMjg5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ1NldCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///289\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\n__webpack_require__(64)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzPzcyOWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///290\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\n__webpack_require__(64)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzPzk5YzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxtQkFBTyxDQUFDLEVBQXNCIiwiZmlsZSI6IjI5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///291\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\n__webpack_require__(64)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAub2YuanM/NzY0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///292\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\n__webpack_require__(64)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanM/YmRkMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBc0IiLCJmaWxlIjoiMjkzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///293\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\n__webpack_require__(65)('Map');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanM/NDE2YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///294\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\n__webpack_require__(65)('Set');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LmZyb20uanM/ZGQ4YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLG1CQUFPLENBQUMsRUFBd0IiLCJmaWxlIjoiMjk1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnU2V0Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///295\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\n__webpack_require__(65)('WeakMap');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcz81ZDQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///296\n")},function(module,exports,__webpack_require__){eval("// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\n__webpack_require__(65)('WeakSet');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbS5qcz81ZDkwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsbUJBQU8sQ0FBQyxFQUF3QiIsImZpbGUiOiIyOTcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha1NldCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///297\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.G, { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZ2xvYmFsLmpzPzBjMzYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsb0JBQW9CLFNBQVMsbUJBQU8sQ0FBQyxDQUFXLEdBQUciLCJmaWxlIjoiMjk4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///298\n")},function(module,exports,__webpack_require__){eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'System', { global: __webpack_require__(2) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcz9hMjM0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDhCQUE4QixTQUFTLG1CQUFPLENBQUMsQ0FBVyxHQUFHIiwiZmlsZSI6IjI5OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///299\n")},function(module,exports,__webpack_require__){eval("// https://github.com/ljharb/proposal-is-error\nvar $export = __webpack_require__(0);\nvar cof = __webpack_require__(20);\n\n$export($export.S, 'Error', {\n isError: function isError(it) {\n return cof(it) === 'Error';\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanM/NDI3NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxFQUFROztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///300\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n clamp: function clamp(x, lower, upper) {\n return Math.min(upper, Math.max(lower, x));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcz8wOWUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///301\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcz8wYzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzAyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///302\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar RAD_PER_DEG = 180 / Math.PI;\n\n$export($export.S, 'Math', {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzLmpzPzI3NDgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzAzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///303\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar scale = __webpack_require__(129);\nvar fround = __webpack_require__(108);\n\n$export($export.S, 'Math', {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanM/MWY5MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFlBQVksbUJBQU8sQ0FBQyxHQUFlO0FBQ25DLGFBQWEsbUJBQU8sQ0FBQyxHQUFnQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMwNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2NhbGUgPSByZXF1aXJlKCcuL19tYXRoLXNjYWxlJyk7XG52YXIgZnJvdW5kID0gcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBmc2NhbGU6IGZ1bmN0aW9uIGZzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgICByZXR1cm4gZnJvdW5kKHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///304\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcz85YzAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///305\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcz8yZjc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///306\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n imulh: function imulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pbXVsaC5qcz9iNGMyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///307\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcz8xZjE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0Qiw2QkFBNkIiLCJmaWxlIjoiMzA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///308\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\nvar DEG_PER_RAD = Math.PI / 180;\n\n$export($export.S, 'Math', {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zLmpzPzY5MmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzA5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBERUdfUEVSX1JBRCA9IE1hdGguUEkgLyAxODA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///309\n")},function(module,exports,__webpack_require__){eval("// https://rwaldron.github.io/proposal-math-extensions/\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { scale: __webpack_require__(129) });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcz9jNzc1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDLDRCQUE0QixRQUFRLG1CQUFPLENBQUMsR0FBZSxHQUFHIiwiZmlsZSI6IjMxMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///310\n")},function(module,exports,__webpack_require__){eval("// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', {\n umulh: function umulh(u, v) {\n var UINT16 = 0xffff;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC51bXVsaC5qcz84YTVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzExLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///311\n")},function(module,exports,__webpack_require__){eval("// http://jfbastien.github.io/papers/Math.signbit.html\nvar $export = __webpack_require__(0);\n\n$export($export.S, 'Math', { signbit: function signbit(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzP2VkN2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVzs7QUFFakMsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQSxDQUFDLEVBQUUiLCJmaWxlIjoiMzEyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///312\n")},function(module,exports,__webpack_require__){"use strict";eval("// https://github.com/tc39/proposal-promise-finally\n\nvar $export = __webpack_require__(0);\nvar core = __webpack_require__(18);\nvar global = __webpack_require__(2);\nvar speciesConstructor = __webpack_require__(51);\nvar promiseResolve = __webpack_require__(116);\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzPzA5N2QiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDYTtBQUNiLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLHlCQUF5QixtQkFBTyxDQUFDLEVBQXdCO0FBQ3pELHFCQUFxQixtQkFBTyxDQUFDLEdBQW9COztBQUVqRCwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQsVUFBVSxFQUFFO0FBQzFFLEtBQUs7QUFDTDtBQUNBLDhEQUE4RCxTQUFTLEVBQUU7QUFDekUsS0FBSztBQUNMO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///313\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/tc39/proposal-promise-try\nvar $export = __webpack_require__(0);\nvar newPromiseCapability = __webpack_require__(91);\nvar perform = __webpack_require__(115);\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanM/YTljYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsMkJBQTJCLG1CQUFPLENBQUMsRUFBMkI7QUFDOUQsY0FBYyxtQkFBTyxDQUFDLEdBQVk7O0FBRWxDLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///314\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanM/ZTNkMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///315\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar toMetaKey = metadata.key;\nvar getOrCreateMetadataMap = metadata.map;\nvar store = metadata.store;\n\nmetadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanM/Y2VhZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IG1ldGFkYXRhLm1hcDtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlO1xuXG5tZXRhZGF0YS5leHAoeyBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgaWYgKG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgfHwgIW1ldGFkYXRhTWFwWydkZWxldGUnXShtZXRhZGF0YUtleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgdGFyZ2V0TWV0YWRhdGFbJ2RlbGV0ZSddKHRhcmdldEtleSk7XG4gIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG59IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///316\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanM/ZTM5NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///317\n")},function(module,exports,__webpack_require__){eval("var Set = __webpack_require__(119);\nvar from = __webpack_require__(128);\nvar metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcz9iODBiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxHQUFXO0FBQzdCLFdBQVcsbUJBQU8sQ0FBQyxHQUF3QjtBQUMzQyxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYztBQUNkO0FBQ0EsQ0FBQyxFQUFFIiwiZmlsZSI6IjMxOC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBTZXQgPSByZXF1aXJlKCcuL2VzNi5zZXQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xudmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeU1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIHZhciBvS2V5cyA9IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHJldHVybiBvS2V5cztcbiAgdmFyIHBLZXlzID0gb3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgcmV0dXJuIHBLZXlzLmxlbmd0aCA/IG9LZXlzLmxlbmd0aCA/IGZyb20obmV3IFNldChvS2V5cy5jb25jYXQocEtleXMpKSkgOiBwS2V5cyA6IG9LZXlzO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///318\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryGetOwnMetadata = metadata.get;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzPzA2YTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///319\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryOwnMetadataKeys = metadata.keys;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanM/N2NkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQztBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///320\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar getPrototypeOf = __webpack_require__(17);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanM/ODk2ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsRUFBYTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxxQkFBcUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///321\n")},function(module,exports,__webpack_require__){eval("var metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar ordinaryHasOwnMetadata = metadata.has;\nvar toMetaKey = metadata.key;\n\nmetadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzP2VjMzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLEVBQWE7QUFDcEMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckM7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///322\n")},function(module,exports,__webpack_require__){eval("var $metadata = __webpack_require__(28);\nvar anObject = __webpack_require__(1);\nvar aFunction = __webpack_require__(10);\nvar toMetaKey = $metadata.key;\nvar ordinaryDefineOwnMetadata = $metadata.set;\n\n$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, targetKey) {\n ordinaryDefineOwnMetadata(\n metadataKey, metadataValue,\n (targetKey !== undefined ? anObject : aFunction)(target),\n toMetaKey(targetKey)\n );\n };\n} });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YS5qcz8zYTljIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQixtQkFBTyxDQUFDLEVBQWE7QUFDckMsZUFBZSxtQkFBTyxDQUFDLENBQWM7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QztBQUNBOztBQUVBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIzMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///323\n")},function(module,exports,__webpack_require__){eval("// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\nvar $export = __webpack_require__(0);\nvar microtask = __webpack_require__(90)();\nvar process = __webpack_require__(2).process;\nvar isNode = __webpack_require__(20)(process) == 'process';\n\n$export($export.G, {\n asap: function asap(fn) {\n var domain = isNode && process.domain;\n microtask(domain ? domain.bind(fn) : fn);\n }\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcz8wZDI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBYztBQUN0QyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsRUFBUTs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiMzI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///324\n")},function(module,exports,__webpack_require__){"use strict";eval("\n// https://github.com/zenparsing/es-observable\nvar $export = __webpack_require__(0);\nvar global = __webpack_require__(2);\nvar core = __webpack_require__(18);\nvar microtask = __webpack_require__(90)();\nvar OBSERVABLE = __webpack_require__(5)('observable');\nvar aFunction = __webpack_require__(10);\nvar anObject = __webpack_require__(1);\nvar anInstance = __webpack_require__(39);\nvar redefineAll = __webpack_require__(41);\nvar hide = __webpack_require__(11);\nvar forOf = __webpack_require__(40);\nvar RETURN = forOf.RETURN;\n\nvar getMethod = function (fn) {\n return fn == null ? undefined : aFunction(fn);\n};\n\nvar cleanupSubscription = function (subscription) {\n var cleanup = subscription._c;\n if (cleanup) {\n subscription._c = undefined;\n cleanup();\n }\n};\n\nvar subscriptionClosed = function (subscription) {\n return subscription._o === undefined;\n};\n\nvar closeSubscription = function (subscription) {\n if (!subscriptionClosed(subscription)) {\n subscription._o = undefined;\n cleanupSubscription(subscription);\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n anObject(observer);\n this._c = undefined;\n this._o = observer;\n observer = new SubscriptionObserver(this);\n try {\n var cleanup = subscriber(observer);\n var subscription = cleanup;\n if (cleanup != null) {\n if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };\n else aFunction(cleanup);\n this._c = cleanup;\n }\n } catch (e) {\n observer.error(e);\n return;\n } if (subscriptionClosed(this)) cleanupSubscription(this);\n};\n\nSubscription.prototype = redefineAll({}, {\n unsubscribe: function unsubscribe() { closeSubscription(this); }\n});\n\nvar SubscriptionObserver = function (subscription) {\n this._s = subscription;\n};\n\nSubscriptionObserver.prototype = redefineAll({}, {\n next: function next(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n try {\n var m = getMethod(observer.next);\n if (m) return m.call(observer, value);\n } catch (e) {\n try {\n closeSubscription(subscription);\n } finally {\n throw e;\n }\n }\n }\n },\n error: function error(value) {\n var subscription = this._s;\n if (subscriptionClosed(subscription)) throw value;\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.error);\n if (!m) throw value;\n value = m.call(observer, value);\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n },\n complete: function complete(value) {\n var subscription = this._s;\n if (!subscriptionClosed(subscription)) {\n var observer = subscription._o;\n subscription._o = undefined;\n try {\n var m = getMethod(observer.complete);\n value = m ? m.call(observer, value) : undefined;\n } catch (e) {\n try {\n cleanupSubscription(subscription);\n } finally {\n throw e;\n }\n } cleanupSubscription(subscription);\n return value;\n }\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\n};\n\nredefineAll($Observable.prototype, {\n subscribe: function subscribe(observer) {\n return new Subscription(observer, this._f);\n },\n forEach: function forEach(fn) {\n var that = this;\n return new (core.Promise || global.Promise)(function (resolve, reject) {\n aFunction(fn);\n var subscription = that.subscribe({\n next: function (value) {\n try {\n return fn(value);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n }\n});\n\nredefineAll($Observable, {\n from: function from(x) {\n var C = typeof this === 'function' ? this : $Observable;\n var method = getMethod(anObject(x)[OBSERVABLE]);\n if (method) {\n var observable = anObject(method.call(x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n return new C(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n try {\n if (forOf(x, false, function (it) {\n observer.next(it);\n if (done) return RETURN;\n }) === RETURN) return;\n } catch (e) {\n if (done) throw e;\n observer.error(e);\n return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n },\n of: function of() {\n for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];\n return new (typeof this === 'function' ? this : $Observable)(function (observer) {\n var done = false;\n microtask(function () {\n if (!done) {\n for (var j = 0; j < items.length; ++j) {\n observer.next(items[j]);\n if (done) return;\n } observer.complete();\n }\n });\n return function () { done = true; };\n });\n }\n});\n\nhide($Observable.prototype, OBSERVABLE, function () { return this; });\n\n$export($export.G, { Observable: $Observable });\n\n__webpack_require__(38)('Observable');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JzZXJ2YWJsZS5qcz8zN2I1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFjO0FBQ3RDLGlCQUFpQixtQkFBTyxDQUFDLENBQVE7QUFDakMsZ0JBQWdCLG1CQUFPLENBQUMsRUFBZTtBQUN2QyxlQUFlLG1CQUFPLENBQUMsQ0FBYztBQUNyQyxpQkFBaUIsbUJBQU8sQ0FBQyxFQUFnQjtBQUN6QyxrQkFBa0IsbUJBQU8sQ0FBQyxFQUFpQjtBQUMzQyxXQUFXLG1CQUFPLENBQUMsRUFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsRUFBVztBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEUsNEJBQTRCO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBLHVDQUF1QztBQUN2Qyx1Q0FBdUMseUJBQXlCO0FBQ2hFLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQLDBCQUEwQixhQUFhO0FBQ3ZDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSwrREFBK0QsT0FBTztBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixrQkFBa0I7QUFDM0M7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUCwwQkFBMEIsYUFBYTtBQUN2QyxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVELHFEQUFxRCxhQUFhLEVBQUU7O0FBRXBFLG9CQUFvQiwwQkFBMEI7O0FBRTlDLG1CQUFPLENBQUMsRUFBZ0IiLCJmaWxlIjoiMzI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///325\n")},function(module,exports,__webpack_require__){eval("// ie9- setTimeout & setInterval additional parameters fix\nvar global = __webpack_require__(2);\nvar $export = __webpack_require__(0);\nvar userAgent = __webpack_require__(60);\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzPzQ3OTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxhQUFhLG1CQUFPLENBQUMsQ0FBVztBQUNoQyxjQUFjLG1CQUFPLENBQUMsQ0FBVztBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFlO0FBQ3ZDO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjMyNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///326\n")},function(module,exports,__webpack_require__){eval("var $export = __webpack_require__(0);\nvar $task = __webpack_require__(89);\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzPzEzMGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBTyxDQUFDLENBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLEVBQVM7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIzMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIsIHtcbiAgc2V0SW1tZWRpYXRlOiAkdGFzay5zZXQsXG4gIGNsZWFySW1tZWRpYXRlOiAkdGFzay5jbGVhclxufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///327\n")},function(module,exports,__webpack_require__){eval("var $iterators = __webpack_require__(86);\nvar getKeys = __webpack_require__(34);\nvar redefine = __webpack_require__(12);\nvar global = __webpack_require__(2);\nvar hide = __webpack_require__(11);\nvar Iterators = __webpack_require__(46);\nvar wks = __webpack_require__(5);\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzP2FjNmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsRUFBc0I7QUFDL0MsY0FBYyxtQkFBTyxDQUFDLEVBQWdCO0FBQ3RDLGVBQWUsbUJBQU8sQ0FBQyxFQUFhO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyxDQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyxFQUFTO0FBQzVCLGdCQUFnQixtQkFBTyxDQUFDLEVBQWM7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLENBQVE7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvREFBb0Qsd0JBQXdCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///328\n")},function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(global) {/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n "use strict";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === "function" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || "@@iterator";\n var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";\n var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";\n\n var inModule = typeof module === "object";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we\'re in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don\'t bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we\'re in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there\'s no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don\'t have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: "normal", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: "throw", arg: err };\n }\n }\n\n var GenStateSuspendedStart = "suspendedStart";\n var GenStateSuspendedYield = "suspendedYield";\n var GenStateExecuting = "executing";\n var GenStateCompleted = "completed";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don\'t natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = "GeneratorFunction";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n ["next", "throw", "return"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === "function" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === "GeneratorFunction"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = "GeneratorFunction";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, "__await")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === "throw") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === "object" &&\n hasOwn.call(value, "__await")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke("next", value, resolve, reject);\n }, function(err) {\n invoke("throw", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === "object" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error("Generator is already running");\n }\n\n if (state === GenStateCompleted) {\n if (method === "throw") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === "next") {\n // Setting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === "throw") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === "return") {\n context.abrupt("return", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === "normal") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === "throw") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = "throw";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === "throw") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = "return";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === "throw") {\n // If maybeInvokeDelegate(context) changed context.method from\n // "return" to "throw", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = "throw";\n context.arg = new TypeError(\n "The iterator does not provide a \'throw\' method");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === "throw") {\n context.method = "throw";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = "throw";\n context.arg = new TypeError("iterator result is not an object");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was "throw" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was "next", forget context.arg since it has been\n // "consumed" by the delegate iterator. If context.method was\n // "return", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== "return") {\n context.method = "next";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = "Generator";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers\' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn\'t happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return "[object Generator]";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = "normal";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: "root" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === "function") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel\'s\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = "next";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === "t" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === "throw") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = "throw";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = "next";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === "root") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle("end");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, "catchLoc");\n var hasFinally = hasOwn.call(entry, "finallyLoc");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error("try statement without catch or finally");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, "finallyLoc") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === "break" ||\n type === "continue") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = "next";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === "throw") {\n throw record.arg;\n }\n\n if (record.type === "break" ||\n record.type === "continue") {\n this.next = record.arg;\n } else if (record.type === "return") {\n this.rval = this.arg = record.arg;\n this.method = "return";\n this.next = "end";\n } else if (record.type === "normal" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n "catch": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === "throw") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error("illegal catch attempt");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === "next") {\n // Deliberately forget the last sent value so that we don\'t\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === "object" ? global :\n typeof window === "object" ? window :\n typeof self === "object" ? self : this\n);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(93)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanM/ZjNhMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzMjkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///329\n')},function(module,exports,__webpack_require__){eval("__webpack_require__(331);\nmodule.exports = __webpack_require__(18).RegExp.escape;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcz9mZDVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFPLENBQUMsR0FBa0M7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsRUFBcUIiLCJmaWxlIjoiMzMwLmpzIiwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///330\n")},function(module,exports,__webpack_require__){eval("// https://github.com/benjamingr/RexExp.escape\nvar $export = __webpack_require__(0);\nvar $re = __webpack_require__(332)(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanM/ZDBjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxDQUFXO0FBQ2pDLFVBQVUsbUJBQU8sQ0FBQyxHQUFhLG9CQUFvQjs7QUFFbkQsOEJBQThCLDhCQUE4QixnQkFBZ0IsRUFBRSxFQUFFIiwiZmlsZSI6IjMzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmdyL1JleEV4cC5lc2NhcGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlID0gcmVxdWlyZSgnLi9fcmVwbGFjZXInKSgvW1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWdFeHAnLCB7IGVzY2FwZTogZnVuY3Rpb24gZXNjYXBlKGl0KSB7IHJldHVybiAkcmUoaXQpOyB9IH0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///331\n")},function(module,exports){eval("module.exports = function (regExp, replace) {\n var replacer = replace === Object(replace) ? function (part) {\n return replace[part];\n } : replace;\n return function (it) {\n return String(it).replace(regExp, replacer);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVwbGFjZXIuanM/YWJkNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzMyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///332\n")},function(module,__webpack_exports__,__webpack_require__){"use strict";eval('// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./src/core/Deferred.js\nfunction _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _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; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Promise\r\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\r\n */\n\n/**\r\n * A Promise object that can be resolved, rejected or canceled at any time by the\r\n * user.\r\n *\r\n * @extends external:Promise\r\n */\nvar Deferred = /*#__PURE__*/function (_Promise) {\n _inherits(Deferred, _Promise);\n\n var _super = _createSuper(Deferred);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Function} [executable=() => {}] - The function to be executed by the\r\n * constructor, during the process of constructing the promise. The signature\r\n * of this is expected to be: executable( resolutionFunc, rejectionFunc, cancellationFunc ).\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'resolved\'.\r\n */\n function Deferred() {\n var _this;\n\n var executable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};\n var onResolve = arguments.length > 1 ? arguments[1] : undefined;\n var onReject = arguments.length > 2 ? arguments[2] : undefined;\n var onCancel = arguments.length > 3 ? arguments[3] : undefined;\n\n _classCallCheck(this, Deferred);\n\n if (typeof executable !== \'function\') {\n throw new Error("Cannot create new Deferred. Executable must be a function.");\n }\n\n if (typeof onResolve !== \'undefined\' && typeof onResolve !== \'function\') {\n throw new Error("Cannot create new Deferred. OnResolve must be a function.");\n }\n\n if (typeof onReject !== \'undefined\' && typeof onReject !== \'function\') {\n throw new Error("Cannot create new Deferred. OnReject must be a function.");\n }\n\n if (typeof onCancel !== \'undefined\' && typeof onCancel !== \'function\') {\n throw new Error("Cannot create new Deferred. OnCancel must be a function.");\n }\n\n var res;\n var rej;\n var cancel;\n var status = {\n resolved: false,\n rejected: false,\n canceled: false,\n pending: true\n };\n _this = _super.call(this, function (resolve, reject) {\n // Store the resolver\n res = function res(value) {\n if (status.pending) {\n status.resolved = true;\n status.pending = false;\n\n if (typeof onResolve === \'function\') {\n value = onResolve(value);\n }\n\n return resolve(value);\n }\n }; // Store the rejecter\n\n\n rej = function rej(value) {\n if (status.pending) {\n status.rejected = true;\n status.pending = false;\n\n if (typeof onReject === \'function\') {\n value = onReject(value);\n }\n\n return reject(value);\n }\n }; // Store the canceler\n\n\n cancel = function cancel(value) {\n if (status.pending) {\n status.canceled = true;\n status.pending = false;\n\n if (typeof onCancel === \'function\') {\n value = onCancel(value);\n }\n\n return resolve(value);\n }\n }; // Run the executable with custom resolver and rejecter\n\n\n executable(res, rej, cancel);\n });\n _this._status = status;\n _this._resolve = res;\n _this._reject = rej;\n _this._cancel = cancel;\n _this._executable = executable;\n return _this;\n }\n /**\r\n * Gets the resolved state of the promise.\r\n *\r\n * @readonly\r\n */\n\n\n _createClass(Deferred, [{\n key: "resolved",\n get: function get() {\n return this._status.resolved;\n }\n /**\r\n * Gets the rejected state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "rejected",\n get: function get() {\n return this._status.rejected;\n }\n /**\r\n * Gets the canceled state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "canceled",\n get: function get() {\n return this._status.canceled;\n }\n /**\r\n * Gets the pending state of the promise.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "pending",\n get: function get() {\n return this._status.pending;\n }\n /**\r\n * Force the promise to resolve.\r\n *\r\n * @param {any=} value - Value to pass to the resolver.\r\n *\r\n * @returns {any} - The return value of the resolver function.\r\n */\n\n }, {\n key: "resolve",\n value: function resolve(value) {\n return this._resolve(value);\n }\n /**\r\n * Force the promise to reject.\r\n *\r\n * @param {any=} value - Value to pass to the rejecter.\r\n *\r\n * @returns {any} - The return value of the rejecter function.\r\n */\n\n }, {\n key: "reject",\n value: function reject(value) {\n return this._reject(value);\n }\n /**\r\n * Force the promise to resolve and set the canceled state to true.\r\n *\r\n * @param {any=} value - Value to pass to the canceller.\r\n *\r\n * @returns {any} - The return value of the canceller function.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel(value) {\n return this._cancel(value);\n }\n /**\r\n * Run the promise function to try to resolve the promise. Promise must be\r\n * pending.\r\n *\r\n * @param {...any} args - Optional arguments to pass after resolve and reject.\r\n */\n\n }, {\n key: "execute",\n value: function execute() {\n if (this.pending) {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this._executable.apply(this, [this._resolve, this._reject, this._cancel].concat(args));\n }\n }\n /**\r\n * Return a canceled deferred promise.\r\n *\r\n * @param {any=} value - Value to cancel the promise with.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }], [{\n key: "cancel",\n value: function cancel(value) {\n return new Deferred(function (_resolve, _reject, cancel) {\n cancel(value);\n });\n }\n /**\r\n * Return a new Deferred promise that will resolve or reject once all promises\r\n * in the input array have been resolved or one promise is canceled or rejected.\r\n * Promises in the array that are Deferred promises will be manually resolved,\r\n * rejected or canceled when calling resolve, reject or cancel on the return promise.\r\n *\r\n * @param {Array.} iterable - An iterable such as an array.\r\n * @param {Function=} onResolve - Optional function to execute once the promise\r\n * is resolved.\r\n * @param {Function=} onReject - Optional function to execute once the promise\r\n * is rejected.\r\n * @param {Function=} onCancel - Optional function to execute if the user cancels\r\n * the promise. Canceling results in the promise having a status of \'canceled\'.\r\n *\r\n * @returns Deferred\r\n */\n\n }, {\n key: "all",\n value: function all(iterable, onResolve, onReject, onCancel) {\n if (iterable == null || typeof iterable[Symbol.iterator] !== \'function\') {\n var e = "Cannot execute Deferred.all. First argument must be iterable.";\n\n if (typeof onReject === \'function\') {\n e = onReject(e);\n }\n\n return Deferred.reject(e);\n }\n\n var array = _toConsumableArray(iterable);\n\n var deferred = array.filter(function (item) {\n return item instanceof Deferred;\n });\n var result = new Deferred(undefined, function (resolveValue) {\n deferred.forEach(function (item) {\n item.resolve(resolveValue);\n });\n deferred.length = 0;\n\n if (typeof onResolve === \'function\') {\n return onResolve(resolveValue);\n } else {\n return resolveValue;\n }\n }, function (error) {\n deferred.forEach(function (item) {\n item.reject(error);\n });\n deferred.length = 0;\n\n if (typeof onReject === \'function\') {\n return onReject(error);\n } else {\n return error;\n }\n }, function (cancelValue) {\n deferred.forEach(function (item) {\n item.cancel(cancelValue);\n });\n deferred.length = 0;\n\n if (typeof onCancel === \'function\') {\n return onCancel(cancelValue);\n } else {\n return cancelValue;\n }\n });\n var numItems = array.length;\n var itemTracker = {\n failed: false,\n numResolved: 0,\n resolutions: []\n };\n array.forEach(function (item, index) {\n if (itemTracker.failed) {\n return;\n } else if (!(item instanceof Promise)) {\n itemTracker.resolutions[index] = item;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n\n return;\n }\n\n item.then(function (value) {\n if (!itemTracker.failed && !item.canceled) {\n itemTracker.resolutions[index] = value;\n itemTracker.numResolved += 1;\n\n if (itemTracker.numResolved === numItems) {\n result.resolve(itemTracker.resolutions);\n }\n } else if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.cancel(value);\n }\n }, function (error) {\n if (!itemTracker.failed) {\n itemTracker.failed = true;\n result.reject(error);\n }\n });\n });\n return result;\n }\n }]);\n\n return Deferred;\n}( /*#__PURE__*/_wrapNativeSuper(Promise));\n\n/* harmony default export */ var core_Deferred = (Deferred);\n// CONCATENATED MODULE: ./src/core/Utils.js\nfunction Utils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Utils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Utils_createClass(Constructor, protoProps, staticProps) { if (protoProps) Utils_defineProperties(Constructor.prototype, protoProps); if (staticProps) Utils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * A collection of useful generic functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar Utils_Utils = /*#__PURE__*/function () {\n function Utils() {\n Utils_classCallCheck(this, Utils);\n }\n\n Utils_createClass(Utils, null, [{\n key: "createId",\n value:\n /**\r\n * @static\r\n *\r\n * Generate a unique id\r\n *\r\n * @returns {String}\r\n */\n function createId() {\n return \'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx\'.replace(/[xy]/g, function (c) {\n var randomNumber = Math.floor((Date.now() + Math.random() * 16) % 16);\n\n if (c === \'x\') {\n return randomNumber.toString(16);\n } // Set bit 6 and 7 to 0 and 1\n\n\n return (randomNumber & 0x3 | 0x8).toString(16);\n });\n }\n /**\r\n * @static\r\n *\r\n * Check a name string against an array of strings to determine if it is unique.\r\n * If it isn\'t, append incremented trailing integers to the end of the name\r\n * until it is unique.\r\n *\r\n * @param {string} name - String name to make unique.\r\n * @param {Array.=} nameArray - Array of string names to check agains.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getUniqueName",\n value: function getUniqueName(name) {\n var nameArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n // If the name isn\'t in the array return it right away\n if (!nameArray.includes(name)) {\n return name;\n }\n\n var nameSet = new Set(nameArray); // Separate the name into string and trailing numbers\n\n var matchGroup = name.match(/\\d*$/);\n var index = matchGroup.index;\n var baseName = name.slice(0, index);\n var increment = Number(matchGroup[0]); // Find the highest trailing number value for the base of the name\n\n nameSet.forEach(function (setName) {\n var setMatchGroup = setName.match(/\\d*$/);\n\n if (setName.slice(0, setMatchGroup.index) === baseName) {\n var setIncrement = Number(setMatchGroup[0]);\n\n if (setIncrement > increment) {\n increment = setIncrement;\n }\n }\n }); // Increment the highest trailing number and append to the name\n\n return "".concat(baseName).concat(increment + 1);\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. Pass delta time in milliseconds to the deferred promise\'s execute\r\n * method in an update loop to progress time.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait() {\n var seconds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref.onFinish,\n onProgress = _ref.onProgress,\n onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure seconds is numeric\n if (typeof seconds !== \'number\') {\n console.warn("Invalid seconds value ".concat(seconds, " for wait. Defaulting to 0."));\n seconds = 0;\n } // Resolve immediately if the wait time is not greater than 0\n\n\n if (seconds <= 0) {\n if (typeof onFinish === \'function\') {\n onFinish();\n }\n\n return core_Deferred.resolve();\n }\n\n var currentTime = 0;\n var totalTime = seconds * 1000; // convert to milliseconds\n // Executable to pass to Deferred, meant to be run in an update loop\n\n var onUpdate = function onUpdate(resolve, reject, _cancel) {\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n if (typeof deltaTime !== \'number\') {\n var e = new Error("Invalid property wait deltaTime. DeltaTime must be a number.");\n reject(e);\n return;\n } // Make sure time has passed\n\n\n if (deltaTime === 0) {\n return;\n } // Signal progress\n\n\n currentTime += deltaTime;\n\n if (currentTime < 0) {\n currentTime = 0;\n }\n\n if (typeof onProgress === \'function\') {\n onProgress(Math.min(currentTime / totalTime, 1));\n } // Signal completion once time is up\n\n\n if (currentTime >= totalTime) {\n resolve();\n }\n };\n\n return new core_Deferred(onUpdate, onFinish, onError, onCancel);\n }\n /**\r\n * Get a random float number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {float}\r\n */\n\n }, {\n key: "getRandomFloat",\n value: function getRandomFloat(min, max) {\n return Math.random() * (max - min) + min;\n }\n /**\r\n * Get a random integer number between a min (inclusive) and max (exclusive) value\r\n * @param {number} min minimum value\r\n * @param {number} max maximum value\r\n * @returns {integer}\r\n */\n\n }, {\n key: "getRandomInt",\n value: function getRandomInt(min, max) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min)) + min;\n }\n }]);\n\n return Utils;\n}();\n\n/* harmony default export */ var core_Utils = (Utils_Utils);\n// CONCATENATED MODULE: ./src/core/MathUtils.js\nfunction MathUtils_toConsumableArray(arr) { return MathUtils_arrayWithoutHoles(arr) || MathUtils_iterableToArray(arr) || MathUtils_unsupportedIterableToArray(arr) || MathUtils_nonIterableSpread(); }\n\nfunction MathUtils_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction MathUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return MathUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return MathUtils_arrayLikeToArray(o, minLen); }\n\nfunction MathUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction MathUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return MathUtils_arrayLikeToArray(arr); }\n\nfunction MathUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction MathUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction MathUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction MathUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) MathUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) MathUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\nvar RadianToDegree = 180 / Math.PI;\nvar DegreeToRadian = Math.PI / 180;\n/**\n * A collection of useful math functions.\n *\n * @hideconstructor\n */\n\nvar MathUtils = /*#__PURE__*/function () {\n function MathUtils() {\n MathUtils_classCallCheck(this, MathUtils);\n }\n\n MathUtils_createClass(MathUtils, null, [{\n key: "toDegrees",\n value:\n /**\n * Convert the given angle from radians to degrees.\n *\n * @param {number} radians - Angle in radians.\n *\n * @returns {number} - Angle in degrees.\n */\n function toDegrees(radians) {\n return radians * RadianToDegree;\n }\n /**\n * Convert the given angle from degrees to radians.\n *\n * @param {number} degrees - Angle in degrees.\n *\n * @returns {number} - Angle in radians.\n */\n\n }, {\n key: "toRadians",\n value: function toRadians(degrees) {\n return degrees * DegreeToRadian;\n }\n /**\n * Linearly interpolate between two values.\n *\n * @param {number} from - Start value.\n * @param {number} to - Target value.\n * @param {number} factor - 0-1 amount to interpolate between from and to.\n *\n * @returns {number}\n */\n\n }, {\n key: "lerp",\n value: function lerp(from, to, factor) {\n return from + (to - from) * factor;\n }\n /**\n * Clamp a number between 2 values.\n *\n * @param {number} value - Value to clamp.\n * @param {number} [min=0] - Minumum value.\n * @param {number} [max=1] - Maximum value.\n *\n * @returns {number}\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n return Math.max(min, Math.min(value, max));\n }\n /**\n * Calculates the closest point on a given 2D line segement\n * from a given 2D point.\n *\n * @param {Array.} a - First point on line segment.\n * @param {Array.} b - Second point on line segment.\n * @param {Array.} p - 2D point.\n *\n * @returns {Array.}\n */\n\n }, {\n key: "closestPointOnLine",\n value: function closestPointOnLine(a, b, p) {\n var distSqr = MathUtils.distanceSquared(a, b); // Line segment is a single point\n\n if (distSqr === 0) {\n return a;\n }\n\n var t = ((p[0] - a[0]) * (b[0] - a[0]) + (p[1] - a[1]) * (b[1] - a[1])) / distSqr;\n\n var point = MathUtils_toConsumableArray(a);\n\n if (t > 1) {\n point = MathUtils_toConsumableArray(b);\n } else if (t > 0) {\n point = [a[0] + t * (b[0] - a[0]), a[1] + t * (b[1] - a[1])];\n }\n\n return point;\n }\n /**\n * Gets the distance squared for two 2D points.\n * @param {Array.} a - 2D point.\n * @param {Array.} b - 2D point.\n *\n * @returns {number}\n */\n\n }, {\n key: "distanceSquared",\n value: function distanceSquared(a, b) {\n return (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]);\n }\n /**\n * Triangulates a set of 2D points using an implementation\n * of the Bowyer-Watson incremental Delaunay triangulation.\n *\n * @param {Array.>} vertices - Array of 2D points.\n *\n * @returns {Array.>} - Array of triangle indices.\n */\n\n }, {\n key: "getDelaunayTriangulation",\n value: function getDelaunayTriangulation(vertices) {\n if (!vertices || vertices.length < 3) {\n throw new Error("Cannot get delaunay triangulation for points ".concat(vertices, ". Input must contain at least three points."));\n }\n\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n var maxX = Number.NEGATIVE_INFINITY;\n var maxY = Number.NEGATIVE_INFINITY;\n vertices.forEach(function (v) {\n minX = v[0] < minX ? v[0] : minX;\n minY = v[1] < minY ? v[1] : minY;\n maxX = v[0] > maxX ? v[0] : maxX;\n maxY = v[1] > maxY ? v[1] : maxY;\n });\n var dX = maxX - minX;\n var dY = maxY - minY;\n var midX = (minX + maxX) / 2;\n var midY = (minY + maxY) / 2;\n var dMax = dX > dY ? dX : dY;\n var superIndices = [vertices.length, vertices.length + 1, vertices.length + 2];\n var vertsWithSuper = [].concat(MathUtils_toConsumableArray(vertices), [[midX - 20 * dMax, midY - dMax], [midX, midY + 20 * dMax], [midX + 20 * dMax, midY - dMax]]);\n var superSortedIndices = MathUtils.sortPointsCCW(superIndices, vertsWithSuper);\n var superTriangle = {\n indices: superSortedIndices,\n edges: [[superSortedIndices[0], superSortedIndices[1]], [superSortedIndices[1], superSortedIndices[2]], [superSortedIndices[2], superSortedIndices[0]]]\n };\n var triangles = [superTriangle];\n vertsWithSuper.forEach(function (newVert, newIndex) {\n var invalidTriangles = [];\n triangles.forEach(function (triangle) {\n if (MathUtils.isPointInCircumCircle(vertsWithSuper[triangle.indices[0]], vertsWithSuper[triangle.indices[1]], vertsWithSuper[triangle.indices[2]], newVert)) {\n invalidTriangles.push(triangle);\n }\n });\n var boundingPoly = [];\n invalidTriangles.forEach(function (triangle) {\n triangle.edges.forEach(function (edge) {\n var count = 0;\n invalidTriangles.forEach(function (otherTriangle) {\n if (triangle !== otherTriangle) {\n otherTriangle.edges.forEach(function (otherEdge) {\n if (edge[0] === otherEdge[0] && edge[1] === otherEdge[1] || edge[1] === otherEdge[0] && edge[0] === otherEdge[1]) {\n count += 1;\n }\n });\n }\n });\n if (count === 0) boundingPoly.push(edge);\n });\n });\n invalidTriangles.forEach(function (triangle) {\n triangles.splice(triangles.indexOf(triangle), 1);\n });\n boundingPoly.forEach(function (edge) {\n var sortedIndices = MathUtils.sortPointsCCW([edge[0], edge[1], newIndex], vertsWithSuper);\n triangles.push({\n indices: sortedIndices,\n edges: [[sortedIndices[0], sortedIndices[1]], [sortedIndices[1], sortedIndices[2]], [sortedIndices[2], sortedIndices[0]]]\n });\n });\n });\n var trianglesToRemove = [];\n triangles.forEach(function (triangle) {\n triangle.indices.forEach(function (index) {\n if (superIndices.includes(index)) {\n trianglesToRemove.push(triangle);\n }\n });\n });\n trianglesToRemove.forEach(function (triangle) {\n var index = triangles.indexOf(triangle);\n\n if (index !== -1) {\n triangles.splice(index, 1);\n }\n });\n return triangles.map(function (triangle) {\n return triangle.indices;\n });\n }\n /**\n * Determines if a given 2D point is within the cicrumcircle\n * defined by three 2D points. The triangle points must be in\n * counter-clockwise order a -> b -> c.\n *\n * @param {Array.} a - First triangle point.\n * @param {Array.} b - Second triangle point.\n * @param {Array.} c - Third triangle point.\n * @param {Array.} p - 2D point.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "isPointInCircumCircle",\n value: function isPointInCircumCircle(a, b, c, p) {\n var ax = a[0] - p[0];\n var ay = a[1] - p[1];\n var bx = b[0] - p[0];\n var by = b[1] - p[1];\n var cx = c[0] - p[0];\n var cy = c[1] - p[1];\n return (ax * ax + ay * ay) * (bx * cy - cx * by) - (bx * bx + by * by) * (ax * cy - cx * ay) + (cx * cx + cy * cy) * (ax * by - bx * ay) > 0;\n }\n /**\n * Determines if a given 2D point is within a given triangle.\n *\n * @param {Array.} a - First triangle point.\n * @param {Array.} b - Second triangle point.\n * @param {Array.} c - Third triangle point.\n * @param {Array.} p - 2D point.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "isPointInTriangle",\n value: function isPointInTriangle(a, b, c, p) {\n var denom = (b[1] - c[1]) * (a[0] - c[0]) + (c[0] - b[0]) * (a[1] - c[1]);\n var aVal = ((b[1] - c[1]) * (p[0] - c[0]) + (c[0] - b[0]) * (p[1] - c[1])) / denom;\n var bVal = ((c[1] - a[1]) * (p[0] - c[0]) + (a[0] - c[0]) * (p[1] - c[1])) / denom;\n var cVal = 1 - aVal - bVal;\n return aVal >= 0 && aVal <= 1 && bVal >= 0 && bVal <= 1 && cVal >= 0 && cVal <= 1;\n }\n /**\n * Gets the sorted indices of a given set of 2D points in\n * counter-clockwise order.\n *\n * @param {Array.} indices - List of indices.\n * @param {Array.>} vertices - List of 2D points.\n *\n * @returns {Array.>} - List of sorted indices.\n */\n\n }, {\n key: "sortPointsCCW",\n value: function sortPointsCCW(indices, vertices) {\n var centroid = [0, 0];\n indices.forEach(function (index) {\n centroid[0] += vertices[index][0];\n centroid[1] += vertices[index][1];\n });\n centroid[0] /= indices.length;\n centroid[1] /= indices.length;\n indices.sort(function (a, b) {\n var bVal = Math.atan2(vertices[b][1] - centroid[1], vertices[b][0] - centroid[0]);\n var aVal = Math.atan2(vertices[a][1] - centroid[1], vertices[a][0] - centroid[0]);\n return aVal - bVal;\n });\n return indices;\n }\n /**\n * Cacluates the area of a triangle\n * @param {Array.} a - First triangle point.\n * @param {Array.} b - Second triangle point.\n * @param {Array.} c - Third triangle point.\n *\n * @returns {number}\n */\n\n }, {\n key: "triangleArea",\n value: function triangleArea(a, b, c) {\n return Math.abs((a[0] * (b[1] - c[1]) + b[0] * (c[1] - a[1]) + c[0] * (a[1] - b[1])) * 0.5);\n }\n /**\n * Return the magnitude of a given vector array.\n *\n * @param {Array.} vector - Array consisting of numbers.\n *\n * @returns {number}\n */\n\n }, {\n key: "getVectorMagnitude",\n value: function getVectorMagnitude(vector) {\n if (!(vector instanceof Array)) {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". Input must be an Array numbers."));\n }\n\n var reducer = function reducer(accumulator, currentValue) {\n if (typeof currentValue !== \'number\') {\n throw new Error("Cannot get magnitude for vector ".concat(vector, ". All items in the input Array must be numbers."));\n }\n\n return accumulator + Math.pow(currentValue, 2);\n };\n\n return Math.sqrt(vector.reduce(reducer, 0));\n }\n /**\n * Return the dot product between two vectors.\n *\n * @param {Array.} vectorA - Array consisting of numbers.\n * @param {Array.} vectorB - Array consisting of numbers.\n *\n * @returns {number}\n */\n\n }, {\n key: "getDotProduct",\n value: function getDotProduct(vectorA, vectorB) {\n if (!(vectorA instanceof Array) || !(vectorB instanceof Array) || vectorA.length !== vectorB.length) {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Inputs must be vectors of the same length."));\n }\n\n var result = 0;\n vectorA.forEach(function (valueA, index) {\n var valueB = vectorB[index];\n\n if (typeof valueA !== \'number\' || typeof valueB !== \'number\') {\n throw new Error("Cannot get dot product between ".concat(vectorA, " and ").concat(vectorB, ". Vectors must only consist of numeric values."));\n }\n\n result += valueA * valueB;\n });\n return result;\n }\n /**\n * Return the angle in radians between vectorA and vectorB.\n *\n * @param {Array.} vectorA - Array consisting of numbers.\n * @param {Array.} vectorB - Array consisting of numbers.\n *\n * @returns {number}\n */\n\n }, {\n key: "getAngleBetween",\n value: function getAngleBetween(vectorA, vectorB) {\n var normalA = this.normalizeVector(MathUtils_toConsumableArray(vectorA));\n var normalB = this.normalizeVector(MathUtils_toConsumableArray(vectorB));\n var dot = this.getDotProduct(normalA, normalB);\n return Math.acos(this.clamp(dot, -1, 1));\n }\n /**\n * Multiply a 3x3 rotation matrix with a vector3.\n *\n * @param {Array.} vector3 - Array consisting of 3 numbers representing\n * a direction vector.\n * @param {Array.} matrix3 - An array of 9 numbers representing a row\n * major rotation matrix.\n *\n * @returns {Array.} - An array of 3 numbers representing the new direction\n * of the vector.\n */\n\n }, {\n key: "rotateVector",\n value: function rotateVector(vector3, matrix3) {\n if (!(vector3 instanceof Array) || vector3.length !== 3 || !vector3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input vector must be an array of 3 numbers."));\n }\n\n if (!(matrix3 instanceof Array) || matrix3.length !== 9 || !matrix3.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot rotate vector ".concat(vector3, " by rotation matrix ").concat(matrix3, ". Input matrix3 must be an array of 9 numbers."));\n }\n\n var x = matrix3[0] * vector3[0] + matrix3[3] * vector3[1] + matrix3[6] * vector3[2];\n var y = matrix3[1] * vector3[0] + matrix3[4] * vector3[1] + matrix3[7] * vector3[2];\n var z = matrix3[2] * vector3[0] + matrix3[5] * vector3[1] + matrix3[8] * vector3[2];\n return [x, y, z];\n }\n /**\n * Normalize a given vector array.\n *\n * @param {Array.} vector - Array consisting of numbers.\n *\n * @returns {Array.} The original vector with normalized values, for chaining.\n */\n\n }, {\n key: "normalizeVector",\n value: function normalizeVector(vector) {\n var magnitude = this.getVectorMagnitude(vector);\n\n if (magnitude === 0) {\n vector.fill(0);\n } else {\n vector.forEach(function (value, index) {\n vector[index] = value / magnitude;\n });\n }\n\n return vector;\n }\n /**\n * Extract the 3x3 rotation matrix from a given 4x4 transformation matrix.\n *\n * @param {Array.} matrix4 - An array of 16 numbers representing a row\n * major transformation matrix.\n *\n * @returns {Array.} - An array of 9 numbers representing a row major\n * rotation matrix.\n */\n\n }, {\n key: "getRotationMatrix",\n value: function getRotationMatrix(matrix4) {\n if (!(matrix4 instanceof Array) || matrix4.length !== 16 || !matrix4.every(function (v) {\n return typeof v === \'number\';\n })) {\n throw new Error("Cannot convert matrix ".concat(matrix4, " to a rotation matrix. Input matrix must be an array of 16 numbers."));\n } // Extract scale\n\n\n var scaleX = 1 / (this.getVectorMagnitude(matrix4.slice(0, 4)) || 1);\n var scaleY = 1 / (this.getVectorMagnitude(matrix4.slice(4, 8)) || 1);\n var scaleZ = 1 / (this.getVectorMagnitude(matrix4.slice(8, 12)) || 1);\n return [matrix4[0] * scaleX, matrix4[1] * scaleX, matrix4[2] * scaleX, matrix4[4] * scaleY, matrix4[5] * scaleY, matrix4[6] * scaleY, matrix4[8] * scaleZ, matrix4[9] * scaleZ, matrix4[10] * scaleZ];\n }\n /**\n * Return an array containing the spherical coordinates of the given cartesian\n * xyz coordinates.\n *\n * @private\n *\n * @param {number} x - Position along the x axis.\n * @param {number} y - Position along the y axis.\n * @param {number} z - Position along the z axis.\n *\n * @returns {Array.} - An array consisting of three numberes where index\n * 0 represents the radius, index 1 represents the vertical/polar angle in radians\n * and index 2 represents the horizontal/azimuthal angle in radians.\n */\n\n }, {\n key: "cartesianToSpherical",\n value: function cartesianToSpherical(x, y, z) {\n var r = this.getVectorMagnitude([x, y, z]); // Return identity if the vector has no length\n\n if (r === 0) {\n return [0, 0, 0];\n }\n\n return [r, Math.acos(this.clamp(y / r, -1, 1)), Math.atan2(x, z)];\n }\n /**\n * Gradually change a value of a numeric property towards a goal over time using\n * a critically damped spring function.\n *\n * @param {number} currentValue - The starting value.\n * @param {number} targetValue- The goal value.\n * @param {Array.} [valueStore = [0, 0]] - An Array consisting of two\n * numbers where the first number holds the result value and the second holds\n * the velocity that resulted in that value. The same array should be provided\n * with each call to this function.\n * @param {number} [deltaTime = 1e-7] - The time since the last call to this function\n * in seconds.\n * @param {number} [smoothTime = 0.3] - The approximate amount of time in seconds\n * it should take to reach the target value.\n * @param {number} [maxSpeed = 1e7] - A clamping value for the maximum speed the\n * value can change.\n *\n * @returns {Array.} - The valueStore array.\n */\n\n }, {\n key: "dampValue",\n value: function dampValue(currentValue, targetValue) {\n var valueStore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0, 0];\n var deltaTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1e-7;\n var smoothTime = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0.3;\n var maxSpeed = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1e7;\n smoothTime = Math.max(0.0001, smoothTime);\n deltaTime = Math.max(1e-7, deltaTime); // Find the delta between values and use it to estimate the previous value\n\n var clampTime = maxSpeed * smoothTime;\n var deltaValue = currentValue - targetValue;\n var clampDeltaValue = this.clamp(deltaValue, -clampTime, clampTime);\n var lastValue = currentValue - clampDeltaValue; // Calculate damping factors\n\n var d1 = 2 / smoothTime;\n var d2 = d1 * deltaTime;\n var d3 = 1 / (1 + d2 + 0.5 * Math.pow(d2, 2) + 0.25 * Math.pow(d2, 3));\n var d4 = (valueStore[1] + d1 * clampDeltaValue) * deltaTime; // Damp the target value and update the velocity\n\n valueStore[0] = lastValue + (clampDeltaValue + d4) * d3;\n valueStore[1] = (valueStore[1] - d1 * d4) * d3; // Prevent overshooting\n\n if (targetValue - currentValue > 0 === valueStore[0] > targetValue) {\n valueStore[0] = targetValue;\n valueStore[1] = (valueStore[0] - targetValue) / deltaTime;\n }\n\n return valueStore;\n }\n }]);\n\n return MathUtils;\n}();\n\n/* harmony default export */ var core_MathUtils = (MathUtils);\n// CONCATENATED MODULE: ./src/core/animpack/Easing.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * @typedef {Object} EasingObject Object containing easing functions\n * @property {Function} In - Easing \'In\' function. Should use the signature (k:number):number.\n * @property {Function} Out - Easing \'Out\' function. Should use the signature (k:number):number.\n * @property {Function} InOut - Easing \'InOut\' function. Should use the signature (k:number):number.\n */\n\n/**\n * Linear Easing\n * @type {EasingObject}\n */\nvar Linear = {\n None: function None(k) {\n return k;\n },\n In: function In(k) {\n return k;\n },\n Out: function Out(k) {\n return k;\n },\n InOut: function InOut(k) {\n return k;\n }\n};\n/**\n * Quadratic Easing\n * @type {EasingObject}\n */\n\nvar Quadratic = {\n In: function In(k) {\n return k * k;\n },\n Out: function Out(k) {\n return k * (2 - k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k;\n }\n\n return -0.5 * (--k * (k - 2) - 1);\n }\n};\n/**\n * Cubic Easing\n * @type {EasingObject}\n */\n\nvar Cubic = {\n In: function In(k) {\n return k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k + 2);\n }\n};\n/**\n * Quartic Easing\n * @type {EasingObject}\n */\n\nvar Quartic = {\n In: function In(k) {\n return k * k * k * k;\n },\n Out: function Out(k) {\n return 1 - --k * k * k * k;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k;\n }\n\n k -= 2;\n return -0.5 * (k * k * k * k - 2);\n }\n};\n/**\n * Quintic Easing\n * @type {EasingObject}\n */\n\nvar Quintic = {\n In: function In(k) {\n return k * k * k * k * k;\n },\n Out: function Out(k) {\n return --k * k * k * k * k + 1;\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return 0.5 * k * k * k * k * k;\n }\n\n k -= 2;\n return 0.5 * (k * k * k * k * k + 2);\n }\n};\n/**\n * Sinusoidal Easing\n * @type {EasingObject}\n */\n\nvar Sinusoidal = {\n In: function In(k) {\n return 1 - Math.cos(k * Math.PI / 2);\n },\n Out: function Out(k) {\n return Math.sin(k * Math.PI / 2);\n },\n InOut: function InOut(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n};\n/**\n * Exponential Easing\n * @type {EasingObject}\n */\n\nvar Exponential = {\n In: function In(k) {\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n Out: function Out(k) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n InOut: function InOut(k) {\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n k *= 2;\n\n if (k < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n }\n};\n/**\n * Circular Easing\n * @type {EasingObject}\n */\n\nvar Circular = {\n In: function In(k) {\n return 1 - Math.sqrt(1 - k * k);\n },\n Out: function Out(k) {\n return Math.sqrt(1 - --k * k);\n },\n InOut: function InOut(k) {\n k *= 2;\n\n if (k < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n\n k -= 2;\n return 0.5 * (Math.sqrt(1 - k * k) + 1);\n }\n};\n/**\n * Elastic Easing\n * @type {EasingObject}\n */\n\nvar Elastic = {\n In: function In(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k -= 1;\n return -(a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n Out: function Out(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;\n },\n InOut: function InOut(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n\n if (k === 0) {\n return 0;\n }\n\n if (k === 1) {\n return 1;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n\n k *= 2;\n\n if (k < 1) {\n k -= 1;\n return -0.5 * (a * Math.pow(2, 10 * k) * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n\n k -= 1;\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n }\n};\n/**\n * Back Easing\n * @type {EasingObject}\n */\n\nvar Back = {\n In: function In(k) {\n var s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n Out: function Out(k) {\n var s = 1.70158;\n return --k * k * ((s + 1) * k + s) + 1;\n },\n InOut: function InOut(k) {\n var s = 1.70158 * 1.525;\n k *= 2;\n\n if (k < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n\n k -= 2;\n return 0.5 * (k * k * ((s + 1) * k + s) + 2);\n }\n};\n/**\n * Bounce Easing\n * @type {EasingObject}\n */\n\nvar Bounce = {\n In: function In(k) {\n return 1 - Bounce.Out(1 - k);\n },\n Out: function Out(k) {\n if (k < 1 / 2.75) {\n return 7.5625 * k * k;\n } else if (k < 2 / 2.75) {\n k -= 1.5;\n return 7.5625 * (k / 2.75) * k + 0.75;\n } else if (k < 2.5 / 2.75) {\n k -= 2.25;\n return 7.5625 * (k / 2.75) * k + 0.9375;\n }\n\n k -= 2.625;\n return 7.5625 * (k / 2.75) * k + 0.984375;\n },\n InOut: function InOut(k) {\n if (k < 0.5) {\n return Bounce.In(k * 2) * 0.5;\n }\n\n return Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n }\n};\n// CONCATENATED MODULE: ./src/core/Messenger.js\nfunction Messenger_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Messenger_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Messenger_createClass(Constructor, protoProps, staticProps) { if (protoProps) Messenger_defineProperties(Constructor.prototype, protoProps); if (staticProps) Messenger_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/**\n * Class that can execute functions when local messages are received. Local messages\n * are prefixed with the instance\'s id.\n *\n * @alias core/Messenger\n *\n * @property {core/Messenger} GlobalMessenger - A messenger that can be used for\n * global messaging. When using static listen and emit methods they are executed\n * on this messenger.\n * @property {Object} EVENTS - Built-in events that the Messenger emits.\n */\n\nvar Messenger_Messenger = /*#__PURE__*/function () {\n /**\n * @constructor\n *\n * @param {any=} id - Id for the object. If none is provided a new id will\n * be created. Id should be able to be represented as a string.\n */\n function Messenger(id) {\n Messenger_classCallCheck(this, Messenger);\n\n this._id = id !== undefined ? id : core_Utils.createId();\n this._dispatcher = window;\n this._callbacks = {};\n this._eventListeners = {};\n }\n /**\n * Gets the string id of the object.\n *\n * @readonly\n * @type {string}\n */\n\n\n Messenger_createClass(Messenger, [{\n key: "id",\n get: function get() {\n return this._id;\n }\n /**\n * Prefix a message with the instance id.\n *\n * @private\n *\n * @param {string} message\n *\n * @returns {string}\n */\n\n }, {\n key: "_createLocalMessage",\n value: function _createLocalMessage(message) {\n return "".concat(this.id, ".").concat(message);\n }\n /**\n * Return a function that will call a callback function and supply the event\'s\n * detail property as an argument.\n *\n * @private\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\n\n }, {\n key: "_createListener",\n value: function _createListener(callback) {\n return function (e) {\n var value;\n\n if (e.detail !== null) {\n value = e.detail;\n }\n\n callback(value);\n };\n }\n /**\n * Create an event object and send it to listeners.\n *\n * @private\n *\n * @param {string} message - Event type name.\n * @param {any=} value - Value to send to listeners.\n *\n * @returns {CustomEvent}\n */\n\n }, {\n key: "_createEvent",\n value: function _createEvent(message, value) {\n return new CustomEvent(message, {\n detail: value\n });\n }\n /**\n * Register an event.\n *\n * @private\n *\n * @param {string} message - Event type name.\n * @param {Function} listener - A listener function generated using _createListener.\n */\n\n }, {\n key: "_addListener",\n value: function _addListener(message, listener) {\n this._dispatcher.addEventListener(this._createLocalMessage(message), listener);\n }\n /**\n * Unregister an event.\n *\n * @private\n *\n * @param {string} message - Event type name.\n * @param {Function} listener - A listener function generated using _createListener.\n */\n\n }, {\n key: "_removeListener",\n value: function _removeListener(message, listener) {\n this._dispatcher.removeEventListener(this._createLocalMessage(message), listener);\n }\n /**\n * Execute a function when a message is received for this object.\n *\n * @param {string} message - The message to listen for.\n * @param {Function} callback - Function to execute once the message is received.\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n if (typeof callback !== \'function\') {\n throw new Error("Cannot add listener for ".concat(message, " on ").concat(this.id, ". Callback must be a function."));\n }\n\n if (this._callbacks[message] === undefined) {\n this._callbacks[message] = [];\n this._eventListeners[message] = [];\n }\n\n var listener = this._createListener(callback);\n\n this._callbacks[message].push(callback);\n\n this._eventListeners[message].push(listener);\n\n this._addListener(message, listener);\n }\n /**\n * Prevent a function from being executed when a message is received for this\n * object.\n *\n * @param {string} message - The message to stop listening for.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for the message.\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n if (this._callbacks[message] === undefined) {\n return;\n } else if (callback === undefined) {\n // If no callback was defined, call stopListening on all callbacks for the message\n for (var i = this._callbacks[message].length - 1; i > -1; i--) {\n this.stopListening(message, this._callbacks[message][i]);\n }\n\n return;\n } // If a callback was defined, make sure it\'s a listener\n\n\n var index = this._callbacks[message].indexOf(callback);\n\n if (index === -1) {\n return;\n }\n\n var listener = this._eventListeners[message][index];\n\n this._removeListener(message, listener);\n\n this._callbacks[message].splice(index, 1);\n\n this._eventListeners[message].splice(index, 1);\n\n if (this._callbacks[message].length === 0) {\n delete this._callbacks[message];\n delete this._eventListeners[message];\n }\n }\n /**\n * De-register callback(s) from being executed when messages matching the given\n * regular expression are received.\n *\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for messages matching the regular expression.\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this = this;\n\n var messages = Object.keys(this._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this.stopListening(message, callback);\n });\n }\n /**\n * Prevent any functions from being executed when any message is received for\n * this object.\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n var messages = Object.keys(this._callbacks);\n\n for (var i = messages.length - 1; i > -1; i--) {\n this.stopListening(messages[i]);\n }\n }\n /**\n * Send a message, causing listener functions for the message on this object\n * to be executed.\n *\n * @param {string} message - The message to emit.\n * @param {any=} value - Optional argument to pass to listener callbacks.\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n if (this._callbacks[message] === undefined) {\n return;\n }\n\n message = this._createLocalMessage(message);\n\n var event = this._createEvent(message, value);\n\n this._dispatcher.dispatchEvent(event);\n }\n /**\n * Execute a function when a message is received for the global Messenger instance.\n *\n * @static\n *\n * @param {string} message - The message to listen for.\n * @param {Function} callback - Function to execute once the message is received.\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback, messenger) {\n this.GlobalMessenger.listenTo(message, callback, messenger);\n }\n /**\n * Prevent a function from being executed when a message is received for the\n * global Messenger instance.\n *\n * @static\n *\n * @param {string} message - The message to stop listening for.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for the message.\n */\n\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n this.GlobalMessenger.stopListening(message, callback);\n }\n /**\n * De-register callback(s) from being executed on the global messengerr instance\n * when messages matching the given regular expression are received.\n *\n * @param {Regexp} regexp - regexp - The regular expression to filter messages with.\n * @param {Function=} callback - Optional callback to remove. If none is defined,\n * remove all callbacks for messages matching the regular expression.\n */\n\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n var _this2 = this;\n\n var messages = Object.keys(this.GlobalMessenger._callbacks).filter(function (message) {\n return regexp.test(message);\n });\n messages.forEach(function (message) {\n _this2.stopListening(message, callback);\n });\n }\n /**\n * Prevent any functions from being executed when any message is received for\n * the global Messenger instance.\n *\n * @static\n */\n\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n this.GlobalMessenger.stopListeningToAll();\n }\n /**\n * Send a message, causing listener functions for the message on the global Messenger\n * instance to be executed.\n *\n * @static\n *\n * @param {string} message - The message to emit.\n * @param {any=} value - Optional argument to pass to listener callbacks.\n */\n\n }, {\n key: "emit",\n value: function emit(message, value) {\n this.GlobalMessenger.emit(message, value);\n }\n }]);\n\n return Messenger;\n}();\n\nObject.defineProperties(Messenger_Messenger, {\n GlobalMessenger: {\n value: new Messenger_Messenger(),\n writable: false\n },\n EVENTS: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_Messenger = (Messenger_Messenger);\n// CONCATENATED MODULE: ./src/three.js/Messenger.js\nfunction Messenger_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Messenger_typeof = function _typeof(obj) { return typeof obj; }; } else { Messenger_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Messenger_typeof(obj); }\n\nfunction three_js_Messenger_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction three_js_Messenger_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction three_js_Messenger_createClass(Constructor, protoProps, staticProps) { if (protoProps) three_js_Messenger_defineProperties(Constructor.prototype, protoProps); if (staticProps) three_js_Messenger_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Messenger_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Messenger_setPrototypeOf(subClass, superClass); }\n\nfunction Messenger_setPrototypeOf(o, p) { Messenger_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Messenger_setPrototypeOf(o, p); }\n\nfunction Messenger_createSuper(Derived) { var hasNativeReflectConstruct = Messenger_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Messenger_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Messenger_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Messenger_possibleConstructorReturn(this, result); }; }\n\nfunction Messenger_possibleConstructorReturn(self, call) { if (call && (Messenger_typeof(call) === "object" || typeof call === "function")) { return call; } return Messenger_assertThisInitialized(self); }\n\nfunction Messenger_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Messenger_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; } }\n\nfunction Messenger_getPrototypeOf(o) { Messenger_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Messenger_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @extends core/Messenger\r\n * @alias three.js/Messenger\r\n */\n\nvar three_js_Messenger_Messenger = /*#__PURE__*/function (_CoreMessenger) {\n Messenger_inherits(Messenger, _CoreMessenger);\n\n var _super = Messenger_createSuper(Messenger);\n\n /**\r\n * @constructor\r\n *\r\n * @param {any=} id - Id for the object. If none is provided a new id will\r\n * be created. Id should be able to be represented as a string.\r\n */\n function Messenger(id) {\n var _this;\n\n three_js_Messenger_classCallCheck(this, Messenger);\n\n _this = _super.call(this, id);\n _this._dispatcher = Messenger_assertThisInitialized(_this);\n return _this;\n }\n\n three_js_Messenger_createClass(Messenger, [{\n key: "_createEvent",\n value: function _createEvent(message, value) {\n return {\n detail: value,\n type: message\n };\n }\n }]);\n\n return Messenger;\n}(core_Messenger); // Assign Three.js EventDispatcher functionality to the Messenger class\n\n\nObject.getOwnPropertyNames(THREE.EventDispatcher.prototype).filter(function (prop) {\n return prop !== \'constructor\';\n}).forEach(function (prop) {\n three_js_Messenger_Messenger.prototype[prop] = THREE.EventDispatcher.prototype[prop];\n});\nObject.defineProperty(three_js_Messenger_Messenger, \'GlobalMessenger\', {\n value: new three_js_Messenger_Messenger(),\n writable: false\n});\n/* harmony default export */ var three_js_Messenger = (three_js_Messenger_Messenger);\n// CONCATENATED MODULE: ./src/core/AbstractHostFeature.js\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || AbstractHostFeature_unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction AbstractHostFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractHostFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractHostFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractHostFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractHostFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractHostFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractHostFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractHostFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractHostFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Base class for all host features. Keeps a reference to the host object managing\r\n * the feature.\r\n *\r\n * @abstract\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.update=onUpdate] - Message that is emitted after\r\n * each call to [update]{@link AbstractHostFeature#update}.\r\n * @property {Object} SERVICES - Any AWS services that are necessary for the\r\n * feature to function.\r\n */\n\nvar AbstractHostFeature_AbstractHostFeature = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - The HostObject managing the feature.\r\n */\n function AbstractHostFeature(host) {\n AbstractHostFeature_classCallCheck(this, AbstractHostFeature);\n\n this._host = host;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n */\n\n\n AbstractHostFeature_createClass(AbstractHostFeature, [{\n key: "installApi",\n value: function installApi() {\n var _this = this;\n\n var events = {};\n var api = {\n EVENTS: events\n }; // Add the class name to event names\n\n Object.entries(this.constructor.EVENTS).forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n name = _ref2[0],\n value = _ref2[1];\n\n events[name] = "".concat(_this.constructor.name, ".").concat(value);\n });\n this._host[this.constructor.name] = api;\n return api;\n }\n /**\r\n * Gets the host that manages the feature.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "host",\n get: function get() {\n return this._host;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n */\n\n }, {\n key: "owner",\n get: function get() {\n return this._host.owner;\n }\n /**\r\n * Listen to a feature message from the host object.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "listenTo",\n value: function listenTo(message, callback) {\n this._host.listenTo(message, callback);\n }\n /**\r\n * Listen to a feature message from the global messenger. Feature messages will\r\n * be prefixed with the class name of the feature.\r\n *\r\n * @param {string} message - Message to listen for.\r\n * @param {Function} callback - The callback to execute when the message is received.\r\n */\n\n }, {\n key: "stopListening",\n value:\n /**\r\n * Stop listening to a message from the host object.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListening(message, callback) {\n this._host.stopListening(message, callback);\n }\n /**\r\n * Stop listening to a message from the global messenger.\r\n *\r\n * @param {string} message - Message to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningByRegexp",\n value:\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * host object.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n function stopListeningByRegexp(regexp, callback) {\n this._host.stopListeningByRegexp(regexp, callback);\n }\n /**\r\n * Stop listening to a message matching the given regular expression from the\r\n * global messenger.\r\n *\r\n * @param {Regexp} regexp - The regular expression to stop listening for.\r\n * @param {Function=} callback - Optional callback to remove. If none is defined,\r\n * remove all callbacks for the message.\r\n */\n\n }, {\n key: "stopListeningToAll",\n value:\n /**\r\n * Stop listening to all messages.\r\n */\n function stopListeningToAll() {\n this._host.stopListeningToAll();\n }\n /**\r\n * Stop listening to all feature messages.\r\n */\n\n }, {\n key: "emit",\n value:\n /**\r\n * Emit feature messages from the host. Feature messages will be prefixed with\r\n * the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n function emit(message, value) {\n message = "".concat(this.constructor.name, ".").concat(message);\n\n this._host.emit(message, value);\n }\n /**\r\n * Emit feature messages from the global messenger. Feature messages will be prefixed\r\n * with the class name of the feature.\r\n *\r\n * @param {string} message - The message to emit.\r\n * @param {any=} value - Optional parameter to pass to listener callbacks.\r\n */\n\n }, {\n key: "update",\n value:\n /**\r\n * Executes each time the host is updated.\r\n *\r\n * @param {number} deltaTime - Amount of time since the last host update was\r\n * called.\r\n */\n function update(deltaTime) {\n this.emit(this.constructor.EVENTS.update, deltaTime);\n }\n /**\r\n * Clean up once the feature is no longer in use. Remove the feature namespace\r\n * from the host and remove reference to the host.\r\n */\n\n }, {\n key: "discard",\n value: function discard() {\n var _this2 = this;\n\n Object.keys(this._host[this.constructor.name]).forEach(function (name) {\n delete _this2._host[_this2.constructor.name][name];\n });\n delete this._host[this.constructor.name];\n delete this._host;\n }\n /**\r\n * Applies a sequence of mixin class factory functions to this class and\r\n * returns the result. Each function is expected to return a class that\r\n * extends the class it was given. The functions are applied in the order\r\n * that parameters are given, meaning that the first factory will\r\n * extend this base class.\r\n *\r\n * @param {...Function} mixinClassFactories Class factory functions that will\r\n * be applied.\r\n *\r\n * @returns {Class} A class that is the result of applying the factory functions.\r\n * The resulting class will always inherit from AbstractHostFeature.\r\n */\n\n }], [{\n key: "listenTo",\n value: function listenTo(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n three_js_Messenger.listenTo(message, callback);\n }\n }, {\n key: "stopListening",\n value: function stopListening(message, callback) {\n message = "".concat(this.name, ".").concat(message);\n three_js_Messenger.stopListening(message, callback);\n }\n }, {\n key: "stopListeningByRegexp",\n value: function stopListeningByRegexp(regexp, callback) {\n regexp = new RegExp("^".concat(this.name, ".").concat(regexp.source.replace(/\\^/, \'\')));\n three_js_Messenger.stopListeningByRegexp(regexp, callback);\n }\n }, {\n key: "stopListeningToAll",\n value: function stopListeningToAll() {\n three_js_Messenger.stopListeningByRegexp(new RegExp("^".concat(this.name, ".")));\n }\n }, {\n key: "emit",\n value: function emit(message, value) {\n message = "".concat(this.name, ".").concat(message);\n three_js_Messenger.emit(message, value);\n }\n }, {\n key: "mix",\n value: function mix() {\n var ResultClass = this;\n\n for (var _len = arguments.length, mixinClassFactories = new Array(_len), _key = 0; _key < _len; _key++) {\n mixinClassFactories[_key] = arguments[_key];\n }\n\n mixinClassFactories.forEach(function (mixinClassFactory) {\n ResultClass = mixinClassFactory(ResultClass);\n });\n return ResultClass;\n }\n }]);\n\n return AbstractHostFeature;\n}();\n\nObject.defineProperties(AbstractHostFeature_AbstractHostFeature, {\n EVENTS: {\n value: {\n update: \'onUpdate\'\n },\n writable: false\n },\n SERVICES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_AbstractHostFeature = (AbstractHostFeature_AbstractHostFeature);\n// CONCATENATED MODULE: ./src/core/HostObject.js\nfunction 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; }\n\nfunction _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; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction HostObject_construct(Parent, args, Class) { if (HostObject_isNativeReflectConstruct()) { HostObject_construct = Reflect.construct; } else { HostObject_construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) HostObject_setPrototypeOf(instance, Class.prototype); return instance; }; } return HostObject_construct.apply(null, arguments); }\n\nfunction HostObject_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { HostObject_typeof = function _typeof(obj) { return typeof obj; }; } else { HostObject_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return HostObject_typeof(obj); }\n\nfunction HostObject_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction HostObject_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction HostObject_createClass(Constructor, protoProps, staticProps) { if (protoProps) HostObject_defineProperties(Constructor.prototype, protoProps); if (staticProps) HostObject_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction HostObject_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) HostObject_setPrototypeOf(subClass, superClass); }\n\nfunction HostObject_setPrototypeOf(o, p) { HostObject_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return HostObject_setPrototypeOf(o, p); }\n\nfunction HostObject_createSuper(Derived) { var hasNativeReflectConstruct = HostObject_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = HostObject_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = HostObject_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return HostObject_possibleConstructorReturn(this, result); }; }\n\nfunction HostObject_possibleConstructorReturn(self, call) { if (call && (HostObject_typeof(call) === "object" || typeof call === "function")) { return call; } return HostObject_assertThisInitialized(self); }\n\nfunction HostObject_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction HostObject_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; } }\n\nfunction HostObject_getPrototypeOf(o) { HostObject_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return HostObject_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * Object that manages access to all Host features. Contains a reference to\r\n * engine-specific visuals if applicable.\r\n *\r\n * @extends core/Messenger\r\n * @alias core/HostObject\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the Messenger emits.\r\n * @property {string} [EVENTS.update=\'onUpdate\'] - Message that is emitted after\r\n * each call to [update]{@link core/HostObject#update}.\r\n * @property {string} [EVENTS.addFeature=\'onAddFeature\'] - Message that is emitted\r\n * after each call to [addFeature]{@link core/HostObject#addFeature}.\r\n * @property {string} [EVENTS.removeFeature=\'onRemoveFeature\'] - Message that is emitted\r\n * after each call to [removeFeature]{@link core/HostObject#removeFeature}.\r\n */\n\nvar HostObject_HostObject = /*#__PURE__*/function (_Messenger) {\n HostObject_inherits(HostObject, _Messenger);\n\n var _super = HostObject_createSuper(HostObject);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the host.\r\n * @param {Object=} options.owner - Optional engine-specific owner of the host.\r\n */\n function HostObject() {\n var _this;\n\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$owner = _ref.owner,\n owner = _ref$owner === void 0 ? {} : _ref$owner;\n\n HostObject_classCallCheck(this, HostObject);\n\n // If an owner is specified, use its id for messaging\n _this = _super.call(this, owner.id);\n _this._owner = owner;\n _this._features = {};\n _this._waits = [];\n _this._lastUpdate = _this.now;\n return _this;\n }\n /**\r\n * Gets the engine owner object of the host.\r\n *\r\n * @readonly\r\n * @type {Object}\r\n */\n\n\n HostObject_createClass(HostObject, [{\n key: "owner",\n get: function get() {\n return this._owner;\n }\n /**\r\n * Gets the current time in milliseconds.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "now",\n get: function get() {\n return Date.now();\n }\n /**\r\n * Gets the amount of time in milliseconds since update was last called.\r\n *\r\n * @readonly\r\n * @type {number}\r\n */\n\n }, {\n key: "deltaTime",\n get: function get() {\n return this.now - this._lastUpdate;\n }\n /**\r\n * This function should be called in the engine\'s render loop. Executes update\r\n * loops for all features.\r\n */\n\n }, {\n key: "update",\n value: function update() {\n var currentTime = this.now;\n var dt = this.deltaTime; // Progress stored waits\n\n this._waits.forEach(function (wait) {\n wait.execute(dt);\n }); // Update all features\n\n\n Object.values(this._features).forEach(function (feature) {\n feature.update(dt);\n }); // Notify listeners an update occured\n\n this.emit(this.constructor.EVENTS.update, dt);\n this._lastUpdate = currentTime;\n }\n /**\r\n * Return a deferred promise that will wait a given number of seconds before\r\n * resolving. The host will continuously update the wait promise during the\r\n * update loop until it resolves.\r\n *\r\n * @param {number} [seconds=0] - Number of seconds to wait before resolving.\r\n * @param {Object=} options - Optional options object\r\n * @param {Function} [options.onFinish] - Callback to execute once the wait time\r\n * is met.\r\n * @param {Function=} options.onProgress - Callback to execute each time the wait\r\n * time progresses towards the target number of seconds. The amount of progress\r\n * as a 0-1 percentage is passed as an argument.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels\r\n * the wait before completion.\r\n * @param {Function=} options.onError - Callback to execute if the wait stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "wait",\n value: function wait(seconds) {\n var _this2 = this;\n\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n onFinish = _ref2.onFinish,\n onProgress = _ref2.onProgress,\n onCancel = _ref2.onCancel,\n onError = _ref2.onError;\n\n var wait = core_Utils.wait(seconds, {\n onFinish: onFinish,\n onProgress: onProgress,\n onCancel: onCancel,\n onError: onError\n });\n\n this._waits.push(wait); // Once the wait promise is no longer pending remove it from the waits array\n\n\n var onComplete = function onComplete() {\n _this2._waits.splice(_this2._waits.indexOf(wait), 1);\n };\n\n wait.then(onComplete, onComplete);\n return wait;\n }\n /**\r\n * Instantiate a new Host feature and store it. Features must inherit from\r\n * AbstractHostFeature.\r\n *\r\n * @param {Class} FeatureClass - Class that will instantiate the feature. Must\r\n * extend {@link AbstractHostFeature}.\r\n * @param {boolean} [force=false] - Whether or not to overwrite an existing\r\n * feature if one of this type already exists on the object.\r\n * @param {...any} args - Additional arguments to pass to the FeatureClass\r\n * constructor. The HostObject will always be passed as the first argument.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully added.\r\n */\n\n }, {\n key: "addFeature",\n value: function addFeature(FeatureClass) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var inputType = HostObject_typeof(FeatureClass); // Make sure the FeatureClass can be executed\n\n\n if (inputType !== \'function\') {\n throw new Error("Cannot add feature to host ".concat(this.id, ". FeatureClass must be a class."));\n } // Make sure the feature is a host feature\n else if (!(FeatureClass.prototype instanceof core_AbstractHostFeature)) {\n throw new Error("Cannot add feature ".concat(FeatureClass.name, " to host ").concat(this.id, ". FeatureClass must extend AbstractHostFeature."));\n } // Check if the FeatureClass already exists on this object\n\n\n if (this._features[FeatureClass.name] !== undefined) {\n if (force) {\n console.warn("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Existing feature will be overwritten."));\n } else {\n throw new Error("Feature ".concat(FeatureClass.name, " already exists on host ").concat(this.id, ". Use \'force\' argument to overwrite the feature."));\n }\n } // Initialize the feature\n\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var feature = HostObject_construct(FeatureClass, [this].concat(args));\n\n feature.installApi();\n this._features[FeatureClass.name] = feature;\n this.emit(this.constructor.EVENTS.addFeature, FeatureClass.name);\n return true;\n }\n /**\r\n * Remove a feature from the object.\r\n *\r\n * @param {string} typeName - Name of the type of feature to remove.\r\n *\r\n * @returns {boolean} - Whether or not a feature was successfully removed.\r\n */\n\n }, {\n key: "removeFeature",\n value: function removeFeature(typeName) {\n if (this._features[typeName] === undefined) {\n console.warn("Feature of type ".concat(typeName, " does not exist on host ").concat(this.id, ". No feature will be removed."));\n return false;\n } else {\n // Remove the feature\n this.emit(this.constructor.EVENTS.removeFeature, typeName);\n\n this._features[typeName].discard();\n\n delete this._features[typeName];\n return true;\n }\n }\n /**\r\n * Indicate whether a specified feature is installed on the host.\r\n *\r\n * @param {string} typeName - Name of the type of feature to look for.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "hasFeature",\n value: function hasFeature(typeName) {\n return !!this._features[typeName];\n }\n /**\r\n * List the names of the features installed on the host.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "listFeatures",\n value: function listFeatures() {\n return Object.keys(this._features);\n }\n }]);\n\n return HostObject;\n}(three_js_Messenger);\n\nObject.defineProperty(HostObject_HostObject, \'EVENTS\', {\n value: _objectSpread(_objectSpread({}, Object.getPrototypeOf(HostObject_HostObject).EVENTS), {}, {\n update: \'onUpdate\',\n addFeature: \'onAddFeature\',\n removeFeature: \'onRemoveFeature\'\n }),\n writable: false\n});\n/* harmony default export */ var core_HostObject = (HostObject_HostObject);\n// CONCATENATED MODULE: ./src/three.js/HostObject.js\nfunction three_js_HostObject_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { three_js_HostObject_typeof = function _typeof(obj) { return typeof obj; }; } else { three_js_HostObject_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return three_js_HostObject_typeof(obj); }\n\nfunction three_js_HostObject_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction three_js_HostObject_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) three_js_HostObject_setPrototypeOf(subClass, superClass); }\n\nfunction three_js_HostObject_setPrototypeOf(o, p) { three_js_HostObject_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return three_js_HostObject_setPrototypeOf(o, p); }\n\nfunction three_js_HostObject_createSuper(Derived) { var hasNativeReflectConstruct = three_js_HostObject_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = three_js_HostObject_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = three_js_HostObject_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return three_js_HostObject_possibleConstructorReturn(this, result); }; }\n\nfunction three_js_HostObject_possibleConstructorReturn(self, call) { if (call && (three_js_HostObject_typeof(call) === "object" || typeof call === "function")) { return call; } return three_js_HostObject_assertThisInitialized(self); }\n\nfunction three_js_HostObject_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction three_js_HostObject_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; } }\n\nfunction three_js_HostObject_getPrototypeOf(o) { three_js_HostObject_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return three_js_HostObject_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Threejs Clock object\r\n *\r\n * @external "THREE.Clock"\r\n * @see https://threejs.org/docs/#api/en/core/Clock\r\n */\n\n/**\r\n * @alias three.js/HostObject\r\n * @extends core/HostObject\r\n */\n\nvar three_js_HostObject_HostObject = /*#__PURE__*/function (_CoreHostObject) {\n three_js_HostObject_inherits(HostObject, _CoreHostObject);\n\n var _super = three_js_HostObject_createSuper(HostObject);\n\n /**\r\n * @constructor\r\n *\r\n * @param {Object=} options - Options for the host.\r\n * @param {Object=} options.owner - Optional engine-specific owner of the host.\r\n * @param {external:"THREE.Clock"=} options.clock - Optional clock to manage time.\r\n */\n function HostObject() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n three_js_HostObject_classCallCheck(this, HostObject);\n\n _this = _super.call(this, options);\n _this._clock = options.clock;\n\n if (_this._clock) {\n Object.defineProperty(three_js_HostObject_assertThisInitialized(_this), \'now\', {\n get: function get() {\n return _this._clock.getElapsedTime() * 1000;\n }\n });\n _this._lastUpdate = _this.now;\n }\n\n return _this;\n }\n\n return HostObject;\n}(core_HostObject);\n\n/* harmony default export */ var three_js_HostObject = (three_js_HostObject_HostObject);\n// CONCATENATED MODULE: ./src/core/FeatureDependentInterface.js\nfunction FeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { FeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FeatureDependentInterface_typeof(obj); }\n\nfunction FeatureDependentInterface_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; }\n\nfunction FeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { FeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { FeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { FeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction FeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction FeatureDependentInterface_slicedToArray(arr, i) { return FeatureDependentInterface_arrayWithHoles(arr) || FeatureDependentInterface_iterableToArrayLimit(arr, i) || FeatureDependentInterface_unsupportedIterableToArray(arr, i) || FeatureDependentInterface_nonIterableRest(); }\n\nfunction FeatureDependentInterface_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction FeatureDependentInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return FeatureDependentInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return FeatureDependentInterface_arrayLikeToArray(o, minLen); }\n\nfunction FeatureDependentInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction FeatureDependentInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction FeatureDependentInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FeatureDependentInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction FeatureDependentInterface_setPrototypeOf(o, p) { FeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction FeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = FeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction FeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (FeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return FeatureDependentInterface_assertThisInitialized(self); }\n\nfunction FeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FeatureDependentInterface_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; } }\n\nfunction FeatureDependentInterface_getPrototypeOf(o) { FeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FeatureDependentInterface_getPrototypeOf(o); }\n\nfunction FeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) FeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) FeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for features that are dependent on other features being\n * present on the host. Event dependencies will be listened for when a feature of\n * matching type is added to the host and will stop being listened for when one\n * is removed. If the feature is already present when constructed, events will\n * be listened for right away.\n *\n * @interface\n *\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\n * listening for when a feature of type FeatureName is added/removed from the host.\n * Event dependencies should follow the signature:\n * { FeatureName: { eventName: callbackName, ... }, ... }\n */\n\nvar FeatureDependentInterface_FeatureDependentInterface = /*#__PURE__*/function () {\n function FeatureDependentInterface() {\n FeatureDependentInterface_classCallCheck(this, FeatureDependentInterface);\n }\n\n FeatureDependentInterface_createClass(FeatureDependentInterface, [{\n key: "_onFeatureAdded",\n value:\n /**\n * Start listening for event dependencies that match the given feature type.\n *\n * @private\n *\n * @param {string} typeName - type of feature to listen for.\n */\n function _onFeatureAdded(typeName) {}\n /**\n * Stop listening for event dependencies that match the given feature type.\n *\n * @private\n *\n * @param {string} typeName - type of feature to stop listening for.\n */\n\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {}\n /**\n * @augments {@link AbstractHostFeature#discard}\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\n * Creates a class that implements {@link FeatureDependentInterface} and extends\n * a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link FeatureDependentInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var FeatureDependentMixin = /*#__PURE__*/function (_BaseClass) {\n FeatureDependentInterface_inherits(FeatureDependentMixin, _BaseClass);\n\n var _super = FeatureDependentInterface_createSuper(FeatureDependentMixin);\n\n function FeatureDependentMixin(host) {\n var _this;\n\n FeatureDependentInterface_classCallCheck(this, FeatureDependentMixin);\n\n _this = _super.call(this, host);\n _this._host = host; // No need to listen for events if the mixin is in the prototype chain multiple times\n\n if (!_this._initialized) {\n _this._initialized = true; // Start listening for feature events\n\n _this._onFeatureAdded = _this._onFeatureAdded.bind(FeatureDependentInterface_assertThisInitialized(_this));\n _this._onFeatureRemoved = _this._onFeatureRemoved.bind(FeatureDependentInterface_assertThisInitialized(_this));\n\n _this._host.listenTo(three_js_HostObject.EVENTS.addFeature, _this._onFeatureAdded);\n\n _this._host.listenTo(three_js_HostObject.EVENTS.removeFeature, _this._onFeatureRemoved); // Register features that already exist\n\n\n Object.keys(_this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this._host[typeName] !== undefined) {\n _this._onFeatureAdded(typeName);\n }\n });\n }\n\n return _this;\n }\n\n FeatureDependentInterface_createClass(FeatureDependentMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref) {\n var _ref2 = FeatureDependentInterface_slicedToArray(_ref, 2),\n eventName = _ref2[0],\n callback = _ref2[1];\n\n _this2[callback] = _this2[callback].bind(_this2);\n\n _this2._host.listenTo(_this2._host[typeName].EVENTS[eventName], _this2[callback]);\n });\n }\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n if (this.constructor.EVENT_DEPENDENCIES[typeName] !== undefined) {\n var events = this.constructor.EVENT_DEPENDENCIES[typeName];\n Object.entries(events).forEach(function (_ref3) {\n var _ref4 = FeatureDependentInterface_slicedToArray(_ref3, 2),\n eventName = _ref4[0],\n callback = _ref4[1];\n\n _this3._host.stopListening(_this3._host[typeName].EVENTS[eventName], _this3[callback]);\n });\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n var _this4 = this;\n\n // Stop listening for feature events\n this._host.stopListening(three_js_HostObject.EVENTS.addFeature, this._onFeatureAdded);\n\n this._host.stopListening(three_js_HostObject.EVENTS.removeFeature, this._onFeatureRemoved); // Stop listening to feature-specific events\n\n\n Object.keys(this.constructor.EVENT_DEPENDENCIES).forEach(function (typeName) {\n if (_this4._host[typeName] !== undefined) {\n _this4._onFeatureRemoved(typeName);\n }\n });\n\n _get(FeatureDependentInterface_getPrototypeOf(FeatureDependentMixin.prototype), "discard", this).call(this);\n }\n }]);\n\n return FeatureDependentMixin;\n }(BaseClass);\n\n var EVENT_DEPENDENCIES = BaseClass.EVENT_DEPENDENCIES || {};\n Object.defineProperties(FeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: FeatureDependentInterface_objectSpread({}, EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return FeatureDependentMixin;\n }\n }]);\n\n return FeatureDependentInterface;\n}();\n/**\n * Event dependencies should follow the signature:\n * {\n * FeatureName: {\n * // Events that the feature should start/stop listening for when a feature\n * // of type FeatureName is added/removed from the host\n * {\n * eventName: callbackName,\n * ...\n * },\n * }\n * }\n */\n\n\nObject.defineProperties(FeatureDependentInterface_FeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {},\n writable: false\n }\n});\n/* harmony default export */ var core_FeatureDependentInterface = (FeatureDependentInterface_FeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeatureDependentInterface.js\nfunction AnimationFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeatureDependentInterface_typeof(obj); }\n\nfunction AnimationFeatureDependentInterface_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; }\n\nfunction AnimationFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { AnimationFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeatureDependentInterface_setPrototypeOf(o, p) { AnimationFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction AnimationFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (AnimationFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction AnimationFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeatureDependentInterface_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; } }\n\nfunction AnimationFeatureDependentInterface_getPrototypeOf(o) { AnimationFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for features that are dependent on the AnimationFeature\n * being present on the host. Layer and animation events will automatically be\n * listened for once a AnimationFeature is added to the host and stopped once it\n * is removed.\n *\n * @interface\n * @extends FeatureDependentInterface\n *\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\n * listening for when a feature of type FeatureName is added/removed from the host.\n * @property {Object} EVENT_DEPENDENCIES.AnimationFeature - Events that are\n * specific to the AnimationFeature.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addLayer=\'_onLayerAdded\'] -\n * The name of the method that will be executed when AnimationFeature addLayer\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeLayer=\'_onLayerRemoved\'] -\n * The name of the method that will be executed when AnimationFeature removeLayer\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameLayer=\'_onLayerRenamed\'] -\n * The name of the method that will be executed when AnimationFeature renameLayer\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.addAnimation=\'_onAnimationAdded\'] -\n * The name of the method that will be executed when AnimationFeature addAnimation\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.removeAnimation=\'_onAnimationRemoved\'] -\n * The name of the method that will be executed when AnimationFeature removeAnimation\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.AnimationFeature.renameAnimation=\'_onAnimationRenamed\'] -\n * The name of the method that will be executed when AnimationFeature renameAnimation\n * events are emitted.\n */\n\nvar AnimationFeatureDependentInterface_AnimationFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentInterface);\n\n function AnimationFeatureDependentInterface() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentInterface, [{\n key: "_onLayerAdded",\n value:\n /**\n * Executed when animation layer added events are caught.\n *\n * @private\n *\n * @param {string} name - Name of the layer that was added.\n */\n function _onLayerAdded(_ref) {\n var name = _ref.name;\n }\n /**\n * Executed when animation layer removed events are caught.\n *\n * @private\n *\n * @param {string} name - Name of the layer that was removed.\n */\n\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var name = _ref2.name;\n }\n /**\n * Executed when animation layer renamed events are caught.\n *\n * @private\n *\n * @param {string} oldName - Name of the layer that was renamed.\n * @param {string} newName - New name of the layer.\n */\n\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n }\n /**\n * Executed when animation added events are caught.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that an animation was added to.\n * @param {string} animationName - Name of the animation that was added.\n */\n\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n }\n /**\n * Executed when animation removed events are caught.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that an animation was removed from.\n * @param {string} animationName - Name of the animation that was removed.\n */\n\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n }\n /**\n * Executed when animation renamed events are caught.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that an animation belongs to.\n * @param {string} oldName - Name of the animation that was renamed.\n * @param {string} newName - New name of the animation.\n */\n\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n }\n /**\n * Creates a class that implements {@link AnimationFeatureDependentInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationFeatureDependentInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var AnimationFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n AnimationFeatureDependentInterface_inherits(AnimationFeatureDependentMixin, _ParentClass);\n\n var _super2 = AnimationFeatureDependentInterface_createSuper(AnimationFeatureDependentMixin);\n\n function AnimationFeatureDependentMixin() {\n AnimationFeatureDependentInterface_classCallCheck(this, AnimationFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n AnimationFeatureDependentInterface_createClass(AnimationFeatureDependentMixin, [{\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref7) {\n var name = _ref7.name;\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref8) {\n var name = _ref8.name;\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref9) {\n var oldName = _ref9.oldName,\n newName = _ref9.newName;\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref10) {\n var layerName = _ref10.layerName,\n animationName = _ref10.animationName;\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref11) {\n var layerName = _ref11.layerName,\n animationName = _ref11.animationName;\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref12) {\n var layerName = _ref12.layerName,\n oldName = _ref12.oldName,\n newName = _ref12.newName;\n }\n }]);\n\n return AnimationFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(AnimationFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: AnimationFeatureDependentInterface_objectSpread(AnimationFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), AnimationFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return AnimationFeatureDependentMixin;\n }\n }]);\n\n return AnimationFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(AnimationFeatureDependentInterface_AnimationFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n AnimationFeature: {\n addLayer: \'_onLayerAdded\',\n removeLayer: \'_onLayerRemoved\',\n renameLayer: \'_onLayerRenamed\',\n addAnimation: \'_onAnimationAdded\',\n removeAnimation: \'_onAnimationRemoved\',\n renameAnimation: \'_onAnimationRenamed\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_AnimationFeatureDependentInterface = (AnimationFeatureDependentInterface_AnimationFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/animpack/ManagedAnimationLayerInterface.js\nfunction ManagedAnimationLayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { ManagedAnimationLayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ManagedAnimationLayerInterface_typeof(obj); }\n\nfunction ManagedAnimationLayerInterface_slicedToArray(arr, i) { return ManagedAnimationLayerInterface_arrayWithHoles(arr) || ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) || ManagedAnimationLayerInterface_unsupportedIterableToArray(arr, i) || ManagedAnimationLayerInterface_nonIterableRest(); }\n\nfunction ManagedAnimationLayerInterface_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction ManagedAnimationLayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return ManagedAnimationLayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction ManagedAnimationLayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction ManagedAnimationLayerInterface_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction ManagedAnimationLayerInterface_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ManagedAnimationLayerInterface_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; }\n\nfunction ManagedAnimationLayerInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ManagedAnimationLayerInterface_ownKeys(Object(source), true).forEach(function (key) { ManagedAnimationLayerInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ManagedAnimationLayerInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction ManagedAnimationLayerInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction ManagedAnimationLayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { ManagedAnimationLayerInterface_get = Reflect.get; } else { ManagedAnimationLayerInterface_get = function _get(target, property, receiver) { var base = ManagedAnimationLayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return ManagedAnimationLayerInterface_get(target, property, receiver || target); }\n\nfunction ManagedAnimationLayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = ManagedAnimationLayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction ManagedAnimationLayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction ManagedAnimationLayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction ManagedAnimationLayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) ManagedAnimationLayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) ManagedAnimationLayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction ManagedAnimationLayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) ManagedAnimationLayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction ManagedAnimationLayerInterface_setPrototypeOf(o, p) { ManagedAnimationLayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return ManagedAnimationLayerInterface_setPrototypeOf(o, p); }\n\nfunction ManagedAnimationLayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = ManagedAnimationLayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = ManagedAnimationLayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = ManagedAnimationLayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return ManagedAnimationLayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction ManagedAnimationLayerInterface_possibleConstructorReturn(self, call) { if (call && (ManagedAnimationLayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return ManagedAnimationLayerInterface_assertThisInitialized(self); }\n\nfunction ManagedAnimationLayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction ManagedAnimationLayerInterface_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; } }\n\nfunction ManagedAnimationLayerInterface_getPrototypeOf(o) { ManagedAnimationLayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return ManagedAnimationLayerInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for that keeps track of layers and animations on a host.\n * Tracked assets are marked as inactive until layers and animations with matching\n * names are detected as present on the host.\n *\n * @interface\n * @extends AnimationFeatureDependentInterface\n *\n * @property {Object} DEFAULT_LAYER_OPTIONS - Default options to use when executing\n * {@link AnimationLayer} methods.\n * @property {number} [DEFAULT_LAYER_OPTIONS.blendTime=0.5] - Default time in seconds\n * to use when executing {@link AnimationLayer.setBlendWeight}.\n * @property {Object} [DEFAULT_LAYER_OPTIONS.animations={}] - Maps animation names\n * to default options objects to use for managed animations.\n */\n\nvar ManagedAnimationLayerInterface_ManagedAnimationLayerInterface = /*#__PURE__*/function (_AnimationFeatureDepe) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerInterface, _AnimationFeatureDepe);\n\n var _super = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerInterface);\n\n function ManagedAnimationLayerInterface() {\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerInterface);\n\n return _super.apply(this, arguments);\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerInterface, [{\n key: "registerLayer",\n value:\n /**\n * Start tracking keeping track of whether a layer with the given name is present\n * on the host.\n *\n * @param {string} name - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {number=} options.blendTime - Default amount of time to use when\n * manipulating layer weights on this layer.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating layer weights on this layer.\n * @param {Object=} options.animations - Animations to keep track of on the layer.\n * Animations are represented as key/value pairs of animation names and their\n * options.\n */\n function registerLayer(name) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n }\n /**\n * Start tracking keeping track of whether an animation with the given name is\n * present on the host.\n *\n * @param {string} layerName - Name of the layer that will own the animation.\n * @param {string} animationName - Name of the animation to keep track of.\n * @param {Object=} options - Options for the animation.\n */\n\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n }\n /**\n * Set layer weights on tracked layers.\n *\n * @param {Function=} nameFilter - Predicate function to test each tracked layer\n * with. By default all layers will pass.\n * @param {number} weight - Weight value to set on layers.\n * @param {number=} seconds - Number of seconds it will take to reach the weight\n * on each layer. If undefined, each layers\' blendTime option is used.\n * @param {Function=} easingFn - Easing function to use when setting weight\n * on each layer. If undefined, each layers\' easingFn option is used.\n */\n\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n }\n /**\n * Set all tracked layers\' weights to 1.\n *\n * @param {number=} seconds - Number of seconds it will take to reach the weight\n * on each layer. If undefined, each layers\' blendTime option is used.\n * @param {Function=} easingFn - Easing function to use when setting weight\n * on each layer. If undefined, each layers\' easingFn option is used.\n */\n\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {}\n /**\n * Set all tracked layers\' weights to 0.\n *\n * @param {number=} seconds - Number of seconds it will take to reach the weight\n * on each layer. If undefined, each layers\' blendTime option is used.\n * @param {Function=} easingFn - Easing function to use when setting weight\n * on each layer. If undefined, each layers\' easingFn option is used.\n */\n\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {}\n /**\n * Creates a class that implements {@link ManagedAnimationLayerInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link ManagedAnimationLayerInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = animpack_AnimationFeatureDependentInterface.Mixin(BaseClass);\n\n var ManagedAnimationLayerMixin = /*#__PURE__*/function (_ParentClass) {\n ManagedAnimationLayerInterface_inherits(ManagedAnimationLayerMixin, _ParentClass);\n\n var _super2 = ManagedAnimationLayerInterface_createSuper(ManagedAnimationLayerMixin);\n\n function ManagedAnimationLayerMixin() {\n var _this;\n\n ManagedAnimationLayerInterface_classCallCheck(this, ManagedAnimationLayerMixin);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super2.call.apply(_super2, [this].concat(args));\n _this._managedLayers = {};\n return _this;\n }\n\n ManagedAnimationLayerInterface_createClass(ManagedAnimationLayerMixin, [{\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n var _this2 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Detect new layers\n\n this._host.AnimationFeature.layers.forEach(function (name) {\n _this2._onLayerAdded({\n name: name\n });\n });\n }\n }, {\n key: "_onFeatureRemoved",\n value: function _onFeatureRemoved(typeName) {\n var _this3 = this;\n\n ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "_onFeatureRemoved", this).call(this, typeName);\n\n if (typeName !== \'AnimationFeature\') {\n return;\n }\n\n this._managedLayers = this._managedLayers || {}; // Deactivate the layers\n\n Object.keys(this._managedLayers).forEach(function (name) {\n _this3._onLayerRemoved({\n name: name\n });\n });\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref) {\n var _this4 = this;\n\n var name = _ref.name;\n\n // Mark the layer as active if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = true; // Detect new animations\n\n this._host.AnimationFeature.getAnimations(name).forEach(function (animName) {\n _this4._onAnimationAdded({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRemoved",\n value: function _onLayerRemoved(_ref2) {\n var _this5 = this;\n\n var name = _ref2.name;\n\n // Deactivate the layer if it is managed\n if (this._managedLayers[name] !== undefined) {\n this._managedLayers[name].isActive = false; // Deactivate the animations\n\n Object.keys(this._managedLayers[name].animations).forEach(function (animName) {\n _this5._onAnimationRemoved({\n layerName: name,\n animationName: animName\n });\n });\n }\n }\n }, {\n key: "_onLayerRenamed",\n value: function _onLayerRenamed(_ref3) {\n var oldName = _ref3.oldName,\n newName = _ref3.newName;\n var layerOptions = this._managedLayers[oldName]; // Replace the layer key with the new name\n\n if (layerOptions !== undefined) {\n delete this._managedLayers[oldName];\n this._managedLayers[newName] = layerOptions;\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref4) {\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName;\n\n // Mark the animation as active if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = true;\n }\n }\n }, {\n key: "_onAnimationRemoved",\n value: function _onAnimationRemoved(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n\n // Deactivate the animation if it is managed\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[animationName] !== undefined) {\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }, {\n key: "_onAnimationRenamed",\n value: function _onAnimationRenamed(_ref6) {\n var layerName = _ref6.layerName,\n oldName = _ref6.oldName,\n newName = _ref6.newName;\n\n if (this._managedLayers[layerName] !== undefined && this._managedLayers[layerName].animations[oldName] !== undefined) {\n // Replace the animation key with the new name\n var animOptions = this._managedLayers[layerName].animations[oldName];\n delete this._managedLayers[layerName].animations[oldName];\n this._managedLayers[layerName].animations[newName] = animOptions;\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this6 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // Start with default options for each new layer\n if (this._managedLayers[name] === undefined) {\n this._managedLayers[name] = ManagedAnimationLayerInterface_objectSpread(ManagedAnimationLayerInterface_objectSpread({}, this.constructor.DEFAULT_LAYER_OPTIONS), {}, {\n animations: {}\n });\n } // Update all options except animations\n\n\n var layerOptions = this._managedLayers[name];\n options = ManagedAnimationLayerInterface_objectSpread({}, options);\n var animationOptions = options.animations || {};\n delete options.animations;\n Object.assign(layerOptions, options); // Check whether the layer can be manipulated now\n\n layerOptions.isActive = this._host.AnimationFeature !== undefined && this._host.AnimationFeature.layers.includes(name); // Register the animations\n\n Object.entries(animationOptions).forEach(function (_ref7) {\n var _ref8 = ManagedAnimationLayerInterface_slicedToArray(_ref7, 2),\n animName = _ref8[0],\n animOptions = _ref8[1];\n\n _this6.registerAnimation(name, animName, animOptions);\n });\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Register the layer if it hasn\'t been registered yet\n if (this._managedLayers[layerName] === undefined) {\n this.registerLayer(layerName);\n } // Update animation options\n\n\n var animOptions = this._managedLayers[layerName].animations[animationName] || {};\n Object.assign(animOptions, options);\n this._managedLayers[layerName].animations[animationName] = animOptions; // Check whether the animation can be manipulated now\n\n this._managedLayers[layerName].animations[animationName].isActive = this._managedLayers[layerName].isActive && this._host.AnimationFeature.getAnimations(layerName).includes(animationName);\n }\n }, {\n key: "setLayerWeights",\n value: function setLayerWeights() {\n var _this7 = this;\n\n var nameFilter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {\n return true;\n };\n var weight = arguments.length > 1 ? arguments[1] : undefined;\n var seconds = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var layerNames = Object.keys(this._managedLayers).filter(nameFilter);\n layerNames.forEach(function (name) {\n var layerOptions = _this7._managedLayers[name];\n\n if (layerOptions.isActive) {\n _this7._host.AnimationFeature.setLayerWeight(name, weight, seconds !== undefined ? seconds : layerOptions.blendTime, easingFn || layerOptions.easingFn);\n }\n });\n }\n }, {\n key: "enable",\n value: function enable(seconds, easingFn) {\n this.setLayerWeights(undefined, 1, seconds, easingFn);\n }\n }, {\n key: "disable",\n value: function disable(seconds, easingFn) {\n this.setLayerWeights(undefined, 0, seconds, easingFn);\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var api = ManagedAnimationLayerInterface_get(ManagedAnimationLayerInterface_getPrototypeOf(ManagedAnimationLayerMixin.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n registerLayer: this.registerLayer.bind(this),\n registerAnimation: this.registerAnimation.bind(this),\n setLayerWeights: this.setLayerWeights.bind(this),\n enable: this.enable.bind(this),\n disable: this.disable.bind(this)\n });\n return api;\n }\n }]);\n\n return ManagedAnimationLayerMixin;\n }(ParentClass);\n\n Object.defineProperties(ManagedAnimationLayerMixin, {\n DEFAULT_LAYER_OPTIONS: {\n value: ManagedAnimationLayerInterface.DEFAULT_LAYER_OPTIONS,\n writable: false\n }\n });\n return ManagedAnimationLayerMixin;\n }\n }]);\n\n return ManagedAnimationLayerInterface;\n}(animpack_AnimationFeatureDependentInterface);\n\nObject.defineProperties(ManagedAnimationLayerInterface_ManagedAnimationLayerInterface, {\n DEFAULT_LAYER_OPTIONS: {\n value: {\n blendTime: 0.5,\n animations: {}\n },\n writable: false\n }\n});\n/* harmony default export */ var animpack_ManagedAnimationLayerInterface = (ManagedAnimationLayerInterface_ManagedAnimationLayerInterface);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeatureDependentInterface.js\nfunction TextToSpeechFeatureDependentInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeatureDependentInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeatureDependentInterface_typeof(obj); }\n\nfunction TextToSpeechFeatureDependentInterface_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; }\n\nfunction TextToSpeechFeatureDependentInterface_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { TextToSpeechFeatureDependentInterface_ownKeys(Object(source), true).forEach(function (key) { TextToSpeechFeatureDependentInterface_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { TextToSpeechFeatureDependentInterface_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction TextToSpeechFeatureDependentInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeatureDependentInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeatureDependentInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeatureDependentInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeatureDependentInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeatureDependentInterface_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p) { TextToSpeechFeatureDependentInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeatureDependentInterface_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeatureDependentInterface_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeatureDependentInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeatureDependentInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeatureDependentInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeatureDependentInterface_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeatureDependentInterface_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeatureDependentInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeatureDependentInterface_assertThisInitialized(self); }\n\nfunction TextToSpeechFeatureDependentInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeatureDependentInterface_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; } }\n\nfunction TextToSpeechFeatureDependentInterface_getPrototypeOf(o) { TextToSpeechFeatureDependentInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeatureDependentInterface_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/**\n * Class factory interface for features that are dependent on the TextToSpeechFeature\n * being present on the host. Speech events will automatically be listened for once a\n * TextToSpeechFeature is added to the host and stopped once it is removed.\n *\n * @interface\n * @extends FeatureDependentInterface\n *\n * @property {Object} EVENT_DEPENDENCIES - Events that the feature should start/stop\n * listening for when a feature of type FeatureName is added/removed from the host.\n * @property {Object} EVENT_DEPENDENCIES.TextToSpeechFeature - Events that are\n * specific to the TextToSpeechFeature.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.play=\'_onPlay\'] -\n * The name of the method that will be executed when TextToSpeechFeature play\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.pause=\'_onPause\'] -\n * The name of the method that will be executed when TextToSpeechFeature pause\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.resume=\'_onResume\'] -\n * The name of the method that will be executed when TextToSpeechFeature resume\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.stop=\'_onStop\'] -\n * The name of the method that will be executed when TextToSpeechFeature stop\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.sentence=\'_onSentence\'] -\n * The name of the method that will be executed when TextToSpeechFeature sentence\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.word=\'_onWord\'] -\n * The name of the method that will be executed when TextToSpeechFeature word\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.viseme=\'_onViseme\'] -\n * The name of the method that will be executed when TextToSpeechFeature viseme\n * events are emitted.\n * @property {string} [EVENT_DEPENDENCIES.TextToSpeechFeature.ssml=\'_onSsml\'] -\n * The name of the method that will be executed when TextToSpeechFeature ssml\n * events are emitted.\n */\n\nvar TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface = /*#__PURE__*/function (_FeatureDependentInte) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentInterface, _FeatureDependentInte);\n\n var _super = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentInterface);\n\n function TextToSpeechFeatureDependentInterface() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentInterface);\n\n return _super.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentInterface, [{\n key: "_onPlay",\n value:\n /**\n * Executed when speech play events are caught.\n *\n * @private\n */\n function _onPlay() {}\n /**\n * Executed when speech pause events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onPause",\n value: function _onPause() {}\n /**\n * Executed when speech resume events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onResume",\n value: function _onResume() {}\n /**\n * Executed when speech stop events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onStop",\n value: function _onStop() {}\n /**\n * Executed when speech sentence events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n /**\n * Executed when speech word events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onWord",\n value: function _onWord() {}\n /**\n * Executed when speech viseme events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n /**\n * Executed when speech ssml events are caught.\n *\n * @private\n */\n\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n /**\n * Creates a class that implements {@link TextToSpeechFeatureDependentInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link TextToSpeechFeatureDependentInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = core_FeatureDependentInterface.Mixin(BaseClass);\n\n var TextToSpeechFeatureDependentMixin = /*#__PURE__*/function (_ParentClass) {\n TextToSpeechFeatureDependentInterface_inherits(TextToSpeechFeatureDependentMixin, _ParentClass);\n\n var _super2 = TextToSpeechFeatureDependentInterface_createSuper(TextToSpeechFeatureDependentMixin);\n\n function TextToSpeechFeatureDependentMixin() {\n TextToSpeechFeatureDependentInterface_classCallCheck(this, TextToSpeechFeatureDependentMixin);\n\n return _super2.apply(this, arguments);\n }\n\n TextToSpeechFeatureDependentInterface_createClass(TextToSpeechFeatureDependentMixin, [{\n key: "_onPlay",\n value: function _onPlay() {}\n }, {\n key: "_onPause",\n value: function _onPause() {}\n }, {\n key: "_onResume",\n value: function _onResume() {}\n }, {\n key: "_onStop",\n value: function _onStop() {}\n }, {\n key: "_onSentence",\n value: function _onSentence() {}\n }, {\n key: "_onWord",\n value: function _onWord() {}\n }, {\n key: "_onViseme",\n value: function _onViseme() {}\n }, {\n key: "_onSsml",\n value: function _onSsml() {}\n }]);\n\n return TextToSpeechFeatureDependentMixin;\n }(ParentClass);\n\n Object.defineProperties(TextToSpeechFeatureDependentMixin, {\n EVENT_DEPENDENCIES: {\n value: TextToSpeechFeatureDependentInterface_objectSpread(TextToSpeechFeatureDependentInterface_objectSpread({}, ParentClass.EVENT_DEPENDENCIES), TextToSpeechFeatureDependentInterface.EVENT_DEPENDENCIES),\n writable: false\n }\n });\n return TextToSpeechFeatureDependentMixin;\n }\n }]);\n\n return TextToSpeechFeatureDependentInterface;\n}(core_FeatureDependentInterface);\n\nObject.defineProperties(TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface, {\n EVENT_DEPENDENCIES: {\n value: {\n TextToSpeechFeature: {\n play: \'_onPlay\',\n pause: \'_onPause\',\n resume: \'_onResume\',\n stop: \'_onStop\',\n sentence: \'_onSentence\',\n word: \'_onWord\',\n viseme: \'_onViseme\',\n ssml: \'_onSsml\'\n }\n },\n writable: false\n }\n});\n/* harmony default export */ var awspack_TextToSpeechFeatureDependentInterface = (TextToSpeechFeatureDependentInterface_TextToSpeechFeatureDependentInterface);\n// CONCATENATED MODULE: ./src/core/LipsyncFeature.js\nfunction LipsyncFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { LipsyncFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { LipsyncFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return LipsyncFeature_typeof(obj); }\n\nfunction LipsyncFeature_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; }\n\nfunction LipsyncFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { LipsyncFeature_ownKeys(Object(source), true).forEach(function (key) { LipsyncFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { LipsyncFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction LipsyncFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }\n\nfunction LipsyncFeature_slicedToArray(arr, i) { return LipsyncFeature_arrayWithHoles(arr) || LipsyncFeature_iterableToArrayLimit(arr, i) || LipsyncFeature_unsupportedIterableToArray(arr, i) || LipsyncFeature_nonIterableRest(); }\n\nfunction LipsyncFeature_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction LipsyncFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return LipsyncFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return LipsyncFeature_arrayLikeToArray(o, minLen); }\n\nfunction LipsyncFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction LipsyncFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction LipsyncFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction LipsyncFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction LipsyncFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction LipsyncFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) LipsyncFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) LipsyncFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction LipsyncFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { LipsyncFeature_get = Reflect.get; } else { LipsyncFeature_get = function _get(target, property, receiver) { var base = LipsyncFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return LipsyncFeature_get(target, property, receiver || target); }\n\nfunction LipsyncFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = LipsyncFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction LipsyncFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) LipsyncFeature_setPrototypeOf(subClass, superClass); }\n\nfunction LipsyncFeature_setPrototypeOf(o, p) { LipsyncFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return LipsyncFeature_setPrototypeOf(o, p); }\n\nfunction LipsyncFeature_createSuper(Derived) { var hasNativeReflectConstruct = LipsyncFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = LipsyncFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = LipsyncFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return LipsyncFeature_possibleConstructorReturn(this, result); }; }\n\nfunction LipsyncFeature_possibleConstructorReturn(self, call) { if (call && (LipsyncFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return LipsyncFeature_assertThisInitialized(self); }\n\nfunction LipsyncFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction LipsyncFeature_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; } }\n\nfunction LipsyncFeature_getPrototypeOf(o) { LipsyncFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return LipsyncFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n/**\n * Default mapping of Polly viseme names to animation options objects.\n *\n * @property {Object} [sil={name: \'sil\'}]\n * @property {Object} [p={name: \'p\', overrideWeight: 0.9}]\n * @property {Object} [t={name: \'t\', blendTime: 0.2}]\n * @property {Object} [S={name: \'S\'}]\n * @property {Object} [T={name: \'T\'}]\n * @property {Object} [f={name: \'f\', overrideWeight: 0.75}]\n * @property {Object} [k={name: \'k\'}]\n * @property {Object} [i={name: \'i\'}]\n * @property {Object} [r={name: \'r\'}]\n * @property {Object} [s={name: \'s\', blendTime: 0.25}]\n * @property {Object} [u={name: \'u\'}]\n * @property {Object} [@={name: \'@\'}]\n * @property {Object} [a={name: \'a\'}]\n * @property {Object} [e={name: \'e\', blendTime: 0.2}]\n * @property {Object} [E={name: \'E\'}]\n * @property {Object} [o={name: \'o\'}]\n * @property {Object} [O={name: \'O\'}]\n */\n\nvar DefaultVisemeMap = {\n sil: {\n name: \'sil\'\n },\n p: {\n name: \'p\',\n overrideWeight: 0.9\n },\n t: {\n name: \'t\',\n blendTime: 0.2\n },\n S: {\n name: \'S\'\n },\n T: {\n name: \'T\'\n },\n f: {\n name: \'f\',\n overrideWeight: 0.75\n },\n k: {\n name: \'k\'\n },\n i: {\n name: \'i\'\n },\n r: {\n name: \'r\'\n },\n s: {\n name: \'s\',\n blendTime: 0.25\n },\n u: {\n name: \'u\'\n },\n \'@\': {\n name: \'@\'\n },\n a: {\n name: \'a\'\n },\n e: {\n name: \'e\',\n blendTime: 0.2\n },\n E: {\n name: \'E\'\n },\n o: {\n name: \'o\'\n },\n O: {\n name: \'O\'\n }\n};\n/**\n * Lipsync controls two types of movement: idle animation that should play while\n * speech is playing and viseme animations corresponding to Polly visemes whose\n * weights should be turned on and off as they are encountered in the Polly SSML\n * transcript. Layers owned by this feature will be enabled while speech is playing\n * and disabled once it stops.\n *\n * @extends AbstractHostFeature\n * @alias core/LipsyncFeature\n * @implements TextToSpeechFeatureDependentInterface\n * @implements ManagedAnimationLayerInterface\n */\n\nvar LipsyncFeature_LipsyncFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n LipsyncFeature_inherits(LipsyncFeature, _AbstractHostFeature$);\n\n var _super = LipsyncFeature_createSuper(LipsyncFeature);\n\n /**\n * @constructor\n *\n * @param {core/HostObject} host - Host that owns the feature.\n * @param {Object=} visemeOptions - Options for the viseme layers.\n * @param {number} [visemeOptions.blendTime=0.15] - Default amount of time it\n * will take to manipulate each freeBlend weight on the viseme states.\n * @param {Object} [visemeOptions.decayRate={amount: .5, seconds: .5}] - An object\n * describing the 0-1 factor viseme weight will decay if the viseme duration is\n * longer than the blendTime and the number of seconds it would take to decay\n * by that factor.\n * @param {number} [visemeOptions.easingFn=Quadratic.InOut] - Default easing function\n * to use when manipulating viseme freeBlend weights.\n * @param {Array.} [visemeOptions..layers=[]] - An array of layer options\n * objects to register as viseme layers.\n * @param {Object=} talkingOptions - Options for the talking layers.\n * @param {number} [talkingOptions.blendTime=0.75] - Default amount of time to\n * enable and disable the talking idle layers\n * @param {number} [talkingOptions.easingFn=Quadratic.InOut] - Default easing\n * function to use when manipulating weights on the talking idle layers.\n * @param {Array.} [talkingOptions.layers=[]] - An array of layer options\n * objects to register as talking layers.\n * @param {number} [visemeLeadTime=.067] - The amount of time to instruct the\n * TextToSpeechFeature to emit speechmarks before each one\'s actual timestamp\n * is reached. This will set the \'speechMarkOffset\' variable on the TextToSpeechFeature.\n */\n function LipsyncFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$blendTime = _ref.blendTime,\n visemeBlendTime = _ref$blendTime === void 0 ? 0.15 : _ref$blendTime,\n _ref$decayRate = _ref.decayRate;\n\n _ref$decayRate = _ref$decayRate === void 0 ? {} : _ref$decayRate;\n var _ref$decayRate$amount = _ref$decayRate.amount,\n amount = _ref$decayRate$amount === void 0 ? 0.5 : _ref$decayRate$amount,\n _ref$decayRate$second = _ref$decayRate.seconds,\n seconds = _ref$decayRate$second === void 0 ? 0.5 : _ref$decayRate$second,\n _ref$easingFn = _ref.easingFn,\n visemeEasingFn = _ref$easingFn === void 0 ? Quadratic.InOut : _ref$easingFn,\n _ref$layers = _ref.layers,\n visemeLayers = _ref$layers === void 0 ? [] : _ref$layers;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n talkingBlendTime = _ref2$blendTime === void 0 ? 0.75 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n talkingEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n talkingLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var visemeLeadTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.067;\n\n LipsyncFeature_classCallCheck(this, LipsyncFeature);\n\n _this = _super.call(this, host);\n _this._visemeLayers = {};\n _this._talkingLayers = {};\n _this.visemeLeadTime = visemeLeadTime; // Register the viseme layers\n\n visemeLayers.forEach(function (_ref3) {\n var name = _ref3.name,\n animation = _ref3.animation,\n _ref3$visemeMap = _ref3.visemeMap,\n visemeMap = _ref3$visemeMap === void 0 ? DefaultVisemeMap : _ref3$visemeMap;\n\n _this.registerVisemeLayer(name, {\n animation: animation,\n visemeMap: visemeMap,\n decayRate: {\n amount: amount,\n seconds: seconds\n },\n blendTime: visemeBlendTime,\n easingFn: visemeEasingFn\n });\n }); // Register the talking layers\n\n talkingLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation;\n\n _this.registerTalkingLayer(name, {\n animation: animation,\n blendTime: talkingBlendTime,\n easingFn: talkingEasingFn\n });\n });\n return _this;\n }\n /**\n * Ensure that registered viseme animations are FreeBlendStates.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the viseme animation.\n * @param {string} animationName - Name of the animation.\n */\n\n\n LipsyncFeature_createClass(LipsyncFeature, [{\n key: "_registerVisemeAnimation",\n value: function _registerVisemeAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (this._host.AnimationFeature.getAnimationType(layerName, animationName) !== \'freeBlend\') {\n // Warn and deactivate if the registered state is not freeBlend\n console.warn("Cannot register Lipsync viseme animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Viseme animations must be of type \'freeBlend\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n } else {\n // Check if the blendWeights can be manipulated now\n var weightNames = this._host.AnimationFeature.getAnimationBlendNames(layerName, animationName);\n\n var visemeMap = this._managedLayers[layerName].animations[animationName].visemeMap;\n Object.values(visemeMap).forEach(function (visemeOptions) {\n visemeOptions.isActive = weightNames.includes(visemeOptions.name);\n });\n }\n }\n }\n /**\n * If the added feature is TextToSpeech, update its speechMarkOffset variable.\n *\n * @private\n *\n * @param {string} typeName - Name of the type of feature that was added.\n */\n\n }, {\n key: "_onFeatureAdded",\n value: function _onFeatureAdded(typeName) {\n this._visemeLayers = this._visemeLayers || {};\n this._talkingLayers = this._talkingLayers || {};\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onFeatureAdded", this).call(this, typeName);\n\n if (typeName === \'TextToSpeechFeature\') {\n this._host.TextToSpeechFeature.speechmarkOffset = -this._visemeLeadTime || 0;\n }\n }\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref5) {\n var name = _ref5.name;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[name] !== undefined) {\n this._registerVisemeAnimation(name, this._visemeLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n\n LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the viseme animation\n\n\n if (this._visemeLayers[layerName] === animationName) {\n this._registerVisemeAnimation(layerName, this._visemeLayers[layerName]);\n }\n }\n }, {\n key: "_onPlay",\n value: function _onPlay() {\n var _this2 = this;\n\n // Turn on the layer weights\n this.enable(); // Set the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref7) {\n var _ref8 = LipsyncFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animationName = _ref8[1];\n\n if (_this2._managedLayers[layerName].animations[animationName].isActive) {\n _this2._host.AnimationFeature.resumeAnimation(layerName, animationName);\n }\n });\n });\n }\n }, {\n key: "_onPause",\n value: function _onPause() {\n this._onStop();\n }\n }, {\n key: "_onResume",\n value: function _onResume() {\n this._onPlay();\n }\n }, {\n key: "_onStop",\n value: function _onStop() {\n var _this3 = this;\n\n // Turn off the layer weights\n this.disable(); // Pause the current animations\n\n [this._visemeLayers, this._talkingLayers].forEach(function (layers) {\n Object.entries(layers).forEach(function (_ref9) {\n var _ref10 = LipsyncFeature_slicedToArray(_ref9, 2),\n layerName = _ref10[0],\n animationName = _ref10[1];\n\n if (_this3._managedLayers[layerName].animations[animationName].isActive) {\n _this3._host.AnimationFeature.pauseAnimation(layerName, animationName);\n }\n });\n });\n }\n /**\n * When viseme events are caught, turn on weight of the new viseme for the duration\n * of the speech mark, then turn weight back off.\n *\n * @private\n *\n * @param {Object} event - Event data passed from the speech.\n * @param {Object} event.mark - Speechmark object.\n */\n\n }, {\n key: "_onViseme",\n value: function () {\n var _onViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(_ref11) {\n var _this4 = this;\n\n var mark;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n mark = _ref11.mark;\n Object.entries(this._visemeLayers).forEach(function (_ref12) {\n var _ref13 = LipsyncFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n // Make sure the layer can be manipulated\n var _this4$_managedLayers = _this4._managedLayers[layerName].animations[animName],\n isActive = _this4$_managedLayers.isActive,\n visemeMap = _this4$_managedLayers.visemeMap;\n\n if (!isActive) {\n return;\n } // Take variables from the viseme if they exist and default to the layer\n\n\n var _this4$_managedLayers2 = LipsyncFeature_objectSpread(LipsyncFeature_objectSpread({}, _this4._managedLayers[layerName]), visemeMap[mark.value]),\n viseme = _this4$_managedLayers2.name,\n isVisemeActive = _this4$_managedLayers2.isActive,\n decayRate = _this4$_managedLayers2.decayRate,\n blendTime = _this4$_managedLayers2.blendTime,\n easingFn = _this4$_managedLayers2.easingFn,\n overrideWeight = _this4$_managedLayers2.overrideWeight;\n\n var visemeNames = _this4._host.AnimationFeature.getAnimationBlendNames(layerName, animName); // Make sure the new viseme has an active freeBlend weight\n\n\n if (!isVisemeActive || !visemeNames.includes(viseme)) {\n return;\n } // Find the peak weight for the viseme and the amount of time it should\n // take to reach it\n\n\n var weight = 1;\n var duration = mark.duration / 1000;\n\n if (duration < blendTime) {\n var lerpFactor = blendTime > 0 ? duration / blendTime : 1;\n weight = overrideWeight !== undefined ? overrideWeight : core_MathUtils.lerp(0, 1, lerpFactor);\n }\n\n var blendInTime = Math.min(duration, blendTime); // Find the amount and time viseme will be held for\n\n var holdTime = duration - blendTime;\n\n if (holdTime < 0) {\n // Perform in -> out animation\n _this4._animateSimpleViseme(layerName, animName, viseme, weight, blendInTime, blendTime, easingFn);\n } else {\n var _lerpFactor = decayRate.seconds > 0 ? holdTime / decayRate.seconds : 1; // Perform in -> hold -> out animation\n\n\n var decayWeight = core_MathUtils.lerp(weight, weight * decayRate.amount, Math.min(1, _lerpFactor));\n\n _this4._animateHeldViseme(layerName, animName, viseme, weight, decayWeight, blendInTime, holdTime, blendTime, easingFn);\n }\n });\n\n case 2:\n case "end":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function _onViseme(_x) {\n return _onViseme2.apply(this, arguments);\n }\n\n return _onViseme;\n }()\n /**\n * Animate a viseme blend weight towards a value and then back to zero.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the viseme.\n * @param {string} animName - Name of the freeblend animation that contains\n * the viseme.\n * @param {string} visemeName - Name of the blend weight to manipulate.\n * @param {number} weight - Peak weight to animate towards.\n * @param {number} blendInTime - Amount of time it should take to reach the\n * peak weight.\n * @param {number} blendOutTime - Amount of time it should take to animate back\n * to zero after reaching the peak weight.\n * @param {Function} easingFn - Easing function to use during animation.\n */\n\n }, {\n key: "_animateSimpleViseme",\n value: function _animateSimpleViseme(layerName, animName, visemeName, peakWeight, blendInTime, blendOutTime, easingFn) {\n var _this5 = this;\n\n // Animate towards the peak value\n var weightPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn); // Animate back to zero if there was no weight interruption\n\n\n weightPromise.then(function () {\n if (!weightPromise.canceled) {\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n });\n }\n /**\n * Animate a viseme blend weight towards a value and then back to zero.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the viseme.\n * @param {string} animName - Name of the freeblend animation that contains\n * the viseme.\n * @param {string} visemeName - Name of the blend weight to manipulate.\n * @param {number} peakWeight - Peak weight to animate towards.\n * @param {number} decayWeight - Weight to animate towards after reaching the\n * peak weight.\n * @param {number} blendInTime - Amount of time it should take to reach the\n * peak weight.\n * @param {number} holdTime - Amount of time it should take to reach the decay\n * weight after the peak weight has been reached.\n * @param {number} blendOutTime - Amount of time it should take to animate back\n * to zero after reaching the decay weight.\n * @param {Function} easingFn - Easing function to use during animation.\n */\n\n }, {\n key: "_animateHeldViseme",\n value: function () {\n var _animateHeldViseme2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(layerName, animName, visemeName, peakWeight, decayWeight, blendInTime, holdTime, blendOutTime, easingFn) {\n var startPromise, holdPromise;\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // Animate towards the peak value\n startPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, peakWeight, blendInTime, easingFn);\n _context2.next = 3;\n return startPromise;\n\n case 3:\n if (startPromise.canceled) {\n _context2.next = 8;\n break;\n }\n\n // Animate towards the decay value if there was no weight interruption\n holdPromise = this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, decayWeight, holdTime, easingFn);\n _context2.next = 7;\n return holdPromise;\n\n case 7:\n if (!holdPromise.canceled) {\n // Animate back to zero if there was no weight interruption\n this._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, visemeName, 0, blendOutTime, easingFn);\n }\n\n case 8:\n case "end":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function _animateHeldViseme(_x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9, _x10) {\n return _animateHeldViseme2.apply(this, arguments);\n }\n\n return _animateHeldViseme;\n }()\n /**\n * Gets and sets the amount of time in seconds to negatively offset speechmark\n * emission by.\n *\n * @type {number}\n */\n\n }, {\n key: "visemeLeadTime",\n get: function get() {\n return this._visemeLeadTime;\n },\n set: function set(seconds) {\n this._visemeLeadTime = seconds;\n\n if (this._host.TextToSpeechFeature) {\n this._host.TextToSpeechFeature.speechmarkOffset = -seconds;\n }\n }\n /**\n * Start keeping track of an animation layer that owns a freeBlend animation\n * with blendWeights corresponding to visemes.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation=\'visemes\'] - Name of the animation on the\n * layer that will be played during speech. This animation must be of type\n * freeBlend.\n * @param {Object=} decayRate\n * @param {number} [decayRate.amount=0.5] - The percentage to decrease the viseme\'s\n * peak value by over time once the peak value has been reached.\n * @param {number} [decayRate.seconds=0.5] - The amount of time in seconds to\n * decrease the viseme\'s weight once it has reached its peak value.\n * @param {number=} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating animation blendWeights.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating animation blendWeights.\n * @param {Object} [options.visemeMap=DefaultVisemeMap] - Object containing key/value pairs of\n * Polly viseme names mapped to objects containing the name of the corresponding\n * animation blendWeight and any other animation options to use such as viseme\n * specific blend times and easing functions.\n */\n\n }, {\n key: "registerVisemeLayer",\n value: function registerVisemeLayer(layerName) {\n var _ref14 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref14$animation = _ref14.animation,\n animation = _ref14$animation === void 0 ? \'visemes\' : _ref14$animation,\n _ref14$decayRate = _ref14.decayRate,\n decayRate = _ref14$decayRate === void 0 ? {\n amount: 0.5,\n seconds: 0.5\n } : _ref14$decayRate,\n _ref14$blendTime = _ref14.blendTime,\n blendTime = _ref14$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref14$blendTime,\n easingFn = _ref14.easingFn,\n _ref14$visemeMap = _ref14.visemeMap,\n visemeMap = _ref14$visemeMap === void 0 ? DefaultVisemeMap : _ref14$visemeMap;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n decayRate: decayRate,\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {\n visemeMap: visemeMap\n })\n });\n this._visemeLayers[layerName] = animation; // Validate the viseme animation\n\n this._registerVisemeAnimation(layerName, animation);\n }\n /**\n * Start keeping track of an animation layer that contains a looping animation\n * to be played during speech.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation=\'stand_talk\'] - Name of the animation on the\n * layer that will be played during speech.\n * @param {number} [options.blendTime=[LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link LipsyncFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating the layer\'s weights.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating the layer\'s weights.\n */\n\n }, {\n key: "registerTalkingLayer",\n value: function registerTalkingLayer(layerName) {\n var _ref15 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref15$animation = _ref15.animation,\n animation = _ref15$animation === void 0 ? \'stand_talk\' : _ref15$animation,\n _ref15$blendTime = _ref15.blendTime,\n blendTime = _ref15$blendTime === void 0 ? LipsyncFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref15$blendTime,\n easingFn = _ref15.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: LipsyncFeature_defineProperty({}, animation, {})\n });\n this._talkingLayers[layerName] = animation;\n }\n /**\n * Adds a namespace to the host with the name of the feature to contain properties\n * and methods from the feature that users of the host need access to.\n *\n * @see LipsyncFeature\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\n * @inner\n * @namespace LipsyncFeature\n */\n var api = LipsyncFeature_get(LipsyncFeature_getPrototypeOf(LipsyncFeature.prototype), "installApi", this).call(this);\n /**\n * @memberof LipsyncFeature\n * @name registerLayer\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#registerLayer\n */\n\n /**\n * @memberof LipsyncFeature\n * @name registerAnimation\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#registerAnimation\n */\n\n /**\n * @memberof LipsyncFeature\n * @name setLayerWeights\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#setLayerWeights\n */\n\n /**\n * @memberof LipsyncFeature\n * @name enable\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#enable\n */\n\n /**\n * @memberof LipsyncFeature\n * @name disable\n * @instance\n * @method\n * @see ManagedAnimationLayerInterface#disable\n */\n\n\n Object.assign(api, {\n /**\n * @memberof LipsyncFeature\n * @instance\n * @method\n * @see core/LipsyncFeature#registerVisemeLayer\n */\n registerVisemeLayer: this.registerVisemeLayer.bind(this),\n\n /**\n * @memberof LipsyncFeature\n * @instance\n * @method\n * @see core/LipsyncFeature#registerTalkingLayer\n */\n registerTalkingLayer: this.registerTalkingLayer.bind(this)\n });\n /**\n * @memberof LipsyncFeature\n * @instance\n * @name visemeLeadTime\n * @see core/LipsyncFeature#visemeLeadTime\n */\n\n Object.defineProperty(api, \'visemeLeadTime\', {\n get: function get() {\n return _this6.visemeLeadTime;\n },\n set: function set(seconds) {\n _this6.visemeLeadTime = seconds;\n }\n });\n return api;\n }\n }]);\n\n return LipsyncFeature;\n}(core_AbstractHostFeature.mix(awspack_TextToSpeechFeatureDependentInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_LipsyncFeature = (LipsyncFeature_LipsyncFeature);\n\n// CONCATENATED MODULE: ./src/core/awspack/SSMLSpeechmarkInterface.js\nfunction SSMLSpeechmarkInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { SSMLSpeechmarkInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SSMLSpeechmarkInterface_typeof(obj); }\n\nfunction SSMLSpeechmarkInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SSMLSpeechmarkInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SSMLSpeechmarkInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) SSMLSpeechmarkInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) SSMLSpeechmarkInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SSMLSpeechmarkInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SSMLSpeechmarkInterface_setPrototypeOf(subClass, superClass); }\n\nfunction SSMLSpeechmarkInterface_setPrototypeOf(o, p) { SSMLSpeechmarkInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SSMLSpeechmarkInterface_setPrototypeOf(o, p); }\n\nfunction SSMLSpeechmarkInterface_createSuper(Derived) { var hasNativeReflectConstruct = SSMLSpeechmarkInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SSMLSpeechmarkInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SSMLSpeechmarkInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SSMLSpeechmarkInterface_possibleConstructorReturn(this, result); }; }\n\nfunction SSMLSpeechmarkInterface_possibleConstructorReturn(self, call) { if (call && (SSMLSpeechmarkInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return SSMLSpeechmarkInterface_assertThisInitialized(self); }\n\nfunction SSMLSpeechmarkInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SSMLSpeechmarkInterface_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; } }\n\nfunction SSMLSpeechmarkInterface_getPrototypeOf(o) { SSMLSpeechmarkInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SSMLSpeechmarkInterface_getPrototypeOf(o); }\n\n/* eslint-disable no-unused-vars */\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-empty */\n\n/**\n * Class factory interface for that registers callback method when a ssml speechmark event is emitted.\n *\n * @interface\n * @extends TextToSpeechFeatureDependentInterface\n */\n\nvar SSMLSpeechmarkInterface_SSMLSpeechmarkInterface = /*#__PURE__*/function (_TextToSpeechFeatureD) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechmarkInterface, _TextToSpeechFeatureD);\n\n var _super = SSMLSpeechmarkInterface_createSuper(SSMLSpeechmarkInterface);\n\n function SSMLSpeechmarkInterface() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechmarkInterface);\n\n return _super.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechmarkInterface, [{\n key: "_onSsml",\n value:\n /**\n * When ssml events are caught, this will try to parse the speech mark value and execute any function which meets criteria defined in the value.\n * Speech mark value will be treated as stringified json format containing required feature name, function name and argument array to pass in.\n * Example speech mark value might look like: \'{"feature":"GestureFeature", "method":"switchToGesture", "args":["genricA", 0.5]}\'\n *\n * @private\n *\n * @param {Object} event - Event data passed from the speech.\n * @param {Object} event.mark - Speechmark object.\n */\n function _onSsml(_ref) {\n var mark = _ref.mark;\n }\n /**\n * Creates a class that implements {@link SSMLSpeechmarkInterface}\n * and extends a specified base class.\n *\n * @param {Class} BaseClass - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link SSMLSpeechmarkInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin(BaseClass) {\n var ParentClass = awspack_TextToSpeechFeatureDependentInterface.Mixin(BaseClass);\n\n var SSMLSpeechMarkMixin = /*#__PURE__*/function (_ParentClass) {\n SSMLSpeechmarkInterface_inherits(SSMLSpeechMarkMixin, _ParentClass);\n\n var _super2 = SSMLSpeechmarkInterface_createSuper(SSMLSpeechMarkMixin);\n\n function SSMLSpeechMarkMixin() {\n SSMLSpeechmarkInterface_classCallCheck(this, SSMLSpeechMarkMixin);\n\n return _super2.apply(this, arguments);\n }\n\n SSMLSpeechmarkInterface_createClass(SSMLSpeechMarkMixin, [{\n key: "_onSsml",\n value: function _onSsml(_ref2) {\n var mark = _ref2.mark;\n\n try {\n var _JSON$parse = JSON.parse(mark.value),\n feature = _JSON$parse.feature,\n method = _JSON$parse.method,\n args = _JSON$parse.args;\n\n if (this.constructor.name === feature) {\n var callback = this[method];\n\n if (callback && typeof callback === \'function\') {\n callback.apply(this, args);\n } else {\n console.warn("Function ".concat(method, " does not exist within feature ").concat(feature));\n }\n }\n } catch (e) {}\n }\n }]);\n\n return SSMLSpeechMarkMixin;\n }(ParentClass);\n\n return SSMLSpeechMarkMixin;\n }\n }]);\n\n return SSMLSpeechmarkInterface;\n}(awspack_TextToSpeechFeatureDependentInterface);\n\n/* harmony default export */ var awspack_SSMLSpeechmarkInterface = (SSMLSpeechmarkInterface_SSMLSpeechmarkInterface);\n// CONCATENATED MODULE: ./src/core/GestureFeature.js\nfunction GestureFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { GestureFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { GestureFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return GestureFeature_typeof(obj); }\n\nfunction GestureFeature_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; }\n\nfunction GestureFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { GestureFeature_ownKeys(Object(source), true).forEach(function (key) { GestureFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { GestureFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction GestureFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction GestureFeature_slicedToArray(arr, i) { return GestureFeature_arrayWithHoles(arr) || GestureFeature_iterableToArrayLimit(arr, i) || GestureFeature_unsupportedIterableToArray(arr, i) || GestureFeature_nonIterableRest(); }\n\nfunction GestureFeature_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction GestureFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return GestureFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return GestureFeature_arrayLikeToArray(o, minLen); }\n\nfunction GestureFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction GestureFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction GestureFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction GestureFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction GestureFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction GestureFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) GestureFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) GestureFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction GestureFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { GestureFeature_get = Reflect.get; } else { GestureFeature_get = function _get(target, property, receiver) { var base = GestureFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return GestureFeature_get(target, property, receiver || target); }\n\nfunction GestureFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = GestureFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction GestureFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) GestureFeature_setPrototypeOf(subClass, superClass); }\n\nfunction GestureFeature_setPrototypeOf(o, p) { GestureFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return GestureFeature_setPrototypeOf(o, p); }\n\nfunction GestureFeature_createSuper(Derived) { var hasNativeReflectConstruct = GestureFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = GestureFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = GestureFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return GestureFeature_possibleConstructorReturn(this, result); }; }\n\nfunction GestureFeature_possibleConstructorReturn(self, call) { if (call && (GestureFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return GestureFeature_assertThisInitialized(self); }\n\nfunction GestureFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction GestureFeature_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; } }\n\nfunction GestureFeature_getPrototypeOf(o) { GestureFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return GestureFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\nvar DefaultGestureWords = {\n big: [\'add\', \'above\', \'authority\', \'big\', \'cover\', \'full\', \'fly\', \'grow\', \'growth\', \'high\', \'huge\', \'increase\', \'major\', \'majority\', \'large\', \'leader\', \'lot\', \'raise\', \'rise\', \'tall\'],\n heart: [\'accept\', \'admit\', \'believe\', \'care\', \'feeling\', \'feel\', \'friend\', \'grateful\', \'happy\', \'heart\', \'human\', \'pain\', \'save\', \'safe\', \'kind\', \'love\'],\n "in": [\'include\', \'including\', \'inside\', \'into\', \'now\', \'near\', \'nearest\', \'closest\', \'therein\', \'within\'],\n many: [\'all\', \'always\', \'any\', \'anyone\', \'among\', \'area\', \'around\', \'beautiful\', \'entire\', \'environment\', \'environments\', \'environmental\', \'everybody\', \'everyone\', \'everything\', \'audience\', \'total\', \'group\', \'groups\', \'million\', \'millions\', \'others\', \'billion\', \'billions\', \'hundred\', \'hundreds\', \'many\', \'thousand\', \'thousands\', \'world\', \'worlds\', \'outside\', \'reveal\'],\n movement: [\'away\', \'across\', \'ahead\', \'along\', \'far\', \'fast\', \'follow\', \'go\', \'leave\', \'move\', \'movement\', \'through\', \'throughout\', \'toward\', \'travel\', \'turned\', \'passed\'],\n one: [\'single\', \'one\', \'once\', \'first\', \'firstly\', \'only\', \'solo\', \'warned\', \'truly\', \'up\', \'alone\'],\n aggressive: [\'power\', \'powers\', \'powerful\', \'assert\', \'assertive\', \'strong\', \'stronger\', \'strongest\', \'strength\', \'flex\', \'dang\', \'damn\', \'damnit\', \'darn\', \'shucks\', \'doh\', \'drat\', \'angry\', \'angrier\', \'angriest\', \'aggressive\', \'annoyed\', \'annoying\', \'attack\', \'attacking\', \'offense\', \'offensive\', \'battle\'],\n you: [\'you\', \'yall\', "y\'all", \'your\', \'yours\', \'thou\', \'thy\'],\n defense: [\'defense\', \'fear\', \'repulsed\', \'scared\', \'scary\', \'scarier\', \'scariest\', \'fearful\', \'afraid\', \'cower\', \'cowers\', \'cowering\', \'hideous\', \'doomed\', \'terrified\', \'terrify\', \'terrifying\', \'terrifies\', \'spooky\', \'spookier\', \'spookiest\'],\n wave: [\'hello\', \'hi\', \'hiya\', \'howdy\', \'welcome\', \'aloha\', \'heya\', \'hey\', \'bye\', \'goodbye\', \'hola\', \'adios\', \'chao\'],\n self: [\'my\', \'I\', \'myself\', \'self\', "I\'ve", \'Ive\', \'me\', \'mine\', \'own\']\n};\n/**\n * Gesture allows you to play animations on demand on one or more layers from script\n * or ssml. If gesture is played that is a QueueState, the queue will automatically\n * be progressed after a given hold time if a looping queued state is reached. Gesture\n * layers can optionally be automatically disabled when no gesture animation is\n * in progress.\n *\n * @extends AbstractHostFeature\n * @implements SSMLSpeechmarkInterface\n * @implements ManagedAnimationLayerInterface\n */\n\nvar GestureFeature_GestureFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n GestureFeature_inherits(GestureFeature, _AbstractHostFeature$);\n\n var _super = GestureFeature_createSuper(GestureFeature);\n\n /**\n * @constructor\n *\n * @param {core/HostObject} host - Host object that owns the feature.\n * @param {Object=} options - Optional options for the feature.\n * @param {number} [options.holdTime = 3] - Amount of time in seconds that must\n * elapse before advancing a gesture that\'s a {@link QueueState} when the current\n * state in the queue is set to loop infinitely.\n * @param {number} [options.minimumInterval = 0.25] - The minimum amount of time\n * in seconds that must elapse before another gesture can be played.\n * @param {Object} layers - An object that maps layer names to layer options.\n * These are the layers that will be registered as tracked gesture layers. See\n * {@link ManagedAnimationLayerInterface#registerLayer} for more information\n * on expected format for each layer options object.\n */\n function GestureFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$holdTime = _ref.holdTime,\n holdTime = _ref$holdTime === void 0 ? 3 : _ref$holdTime,\n _ref$minimumInterval = _ref.minimumInterval,\n minimumInterval = _ref$minimumInterval === void 0 ? 1 : _ref$minimumInterval,\n _ref$layers = _ref.layers,\n layers = _ref$layers === void 0 ? {} : _ref$layers;\n\n GestureFeature_classCallCheck(this, GestureFeature);\n\n _this = _super.call(this, host);\n _this.holdTime = holdTime;\n _this.minimumInterval = minimumInterval; // Register the gesture layers\n\n Object.entries(layers).forEach(function (_ref2) {\n var _ref3 = GestureFeature_slicedToArray(_ref2, 2),\n name = _ref3[0],\n _ref3$ = _ref3[1],\n options = _ref3$ === void 0 ? {} : _ref3$;\n\n _this.registerLayer(name, options);\n });\n return _this;\n }\n /**\n * Return a valid hold time value. If hold time isn\'t defined for the animation,\n * try to use the hold time for the layer. If that\'s not defined, fall back to\n * the hold time for the feature.\n *\n * @private\n *\n * @param {Object} layer - Managed layer options object.\n * @param {Object} animation - Managed animation options object.\n *\n * @returns {number}\n */\n\n\n GestureFeature_createClass(GestureFeature, [{\n key: "_getHoldTime",\n value: function _getHoldTime(layer, animation) {\n var layerHoldTime = layer.holdTime !== undefined ? layer.holdTime : this.holdTime;\n return animation.holdTime !== undefined ? animation.holdTime : layerHoldTime;\n }\n /**\n * Return a valid minimum interval value. If minimum interval isn\'t defined for\n * the animation, try to use the minimum interval for the layer. If that\'s not\n * defined, fall back to the minimum interval for the feature.\n *\n * @private\n *\n * @param {Object} layer - Managed layer options object.\n * @param {Object} animation - Managed animation options object.\n *\n * @returns {number}\n */\n\n }, {\n key: "_getMinimumInterval",\n value: function _getMinimumInterval(layer, animation) {\n var layerMinimumInterval = layer.minimumInterval !== undefined ? layer.minimumInterval : this.minimumInterval;\n return animation.minimumInterval !== undefined ? animation.minimumInterval : layerMinimumInterval;\n }\n /**\n * Callback for {@link core/AnimationFeature#playNextAnimation} event. If the\n * event is emitted for a managed animation and the new queued state cannot\n * advance on its own, start a new timer promise that will advance the queue\n * once it resolves.\n *\n * @private\n *\n * @param {Object} options - Options object passed from playNextAnimation event.\n * @param {string} layerName - Name of the layer that owns the queue state.\n * @param {string} animationName - Name of the queue state animation.\n * @param {boolean} canAdvance - Whether or not the current state in the queue\n * can advance on its own.\n * @param {boolean} isQueueEnd - Whether the current state in the queue is the last\n * state in the queue.\n */\n\n }, {\n key: "_onNext",\n value: function _onNext(_ref4) {\n var _this2 = this;\n\n var layerName = _ref4.layerName,\n animationName = _ref4.animationName,\n canAdvance = _ref4.canAdvance,\n isQueueEnd = _ref4.isQueueEnd;\n // Exit if this isn\'t a managed layer\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Exit if it isn\'t a managed animation\n\n\n var animation = layer.animations[animationName];\n\n if (animation === undefined) {\n return;\n } // Start a new timer for looping states that aren\'t the end of the queue\n\n\n if (!canAdvance && !isQueueEnd && layer.currentGesture === animationName) {\n var holdTime = this._getHoldTime(layer, animation);\n\n layer.holdTimer.cancel(); // Skip to the next animation right away if hold time is zero\n\n if (holdTime <= 0) {\n this._host.AnimationFeature.playNextAnimation(layerName, animationName);\n } // Wait for the given hold time before progressing\n else {\n layer.holdTimer = core_Utils.wait(holdTime, {\n onFinish: function onFinish() {\n // Advance the queue to the next state\n if (layer.currentGesture === animationName) {\n _this2._host.AnimationFeature.playNextAnimation(layerName, animationName);\n }\n }\n });\n }\n }\n }\n /**\n * Callback for {@link core/AnimationFeature#stopAnimation} event. If the\n * event is emitted for a managed animation cancel the layer\'s stored timers.\n * If the layer is set to auto-disable set its weight to 0.\n *\n * @private\n *\n * @param {Object} options - Options object passed from playNextAnimation event.\n * @param {string} layerName - Name of the layer that owns the stopped animation.\n * @param {string} animationName - Name of the animation that was stopped.\n */\n\n }, {\n key: "_onStop",\n value: function _onStop(_ref5) {\n var layerName = _ref5.layerName,\n animationName = _ref5.animationName;\n // Make sure the layer is managed\n var layer = this._managedLayers[layerName];\n\n if (layer === undefined) {\n return;\n } // Make sure the animation is managed\n\n\n var animation = layer.animations[animationName];\n\n if (animation !== undefined && animationName === layer.currentGesture) {\n layer.currentGesture = null;\n layer.playTimer = null;\n layer.holdTimer.cancel(); // Turn off layer weight\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 0);\n }\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref6) {\n var layerName = _ref6.layerName,\n animationName = _ref6.animationName;\n var layer = this._managedLayers[layerName];\n\n if (layer !== undefined) {\n var animation = layer.animations[animationName]; // Register the animation as active if it is unmanaged\n\n if (animation === undefined) {\n this.registerAnimation(layerName, animationName);\n } // Mark the animation as active if it is managed\n else {\n animation.isActive = true;\n }\n }\n }\n }, {\n key: "registerLayer",\n value: function registerLayer(name) {\n var _this3 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerLayer", this).call(this, name, GestureFeature_objectSpread(GestureFeature_objectSpread({}, options), {}, {\n holdTimer: core_Deferred.resolve(),\n playTimer: null,\n currentGesture: null\n }));\n\n if (this._managedLayers[name].isActive) {\n this._host.AnimationFeature.getAnimations(name).forEach(function (anim) {\n // Automatically register all animations on the layer\n if (_this3._managedLayers[name].animations[anim] === undefined) {\n _this3.registerAnimation(name, anim, _this3._managedLayers[name].animations[anim]);\n }\n });\n }\n }\n }, {\n key: "registerAnimation",\n value: function registerAnimation(layerName, animationName) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Try to fall back to a default word array\n if (!(options.words instanceof Array) && !(options.words instanceof Set)) {\n options.words = DefaultGestureWords[animationName] || [];\n }\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "registerAnimation", this).call(this, layerName, animationName, options);\n }\n /**\n * Create an object that maps ssml mark syntax required to play each gesture to\n * the words array associated with each gesture. Words arrays are defined at when\n * the gesture animation is registered. Gestures without associated words will\n * be excluded from the result. The resulting object can be used as an input\n * for {@link TextToSpeechUtils.autoGenerateSSMLMarks} to update a speech string\n * with the markup required to play gestures timed with their associated words.\n *\n * @returns {Object}\n */\n\n }, {\n key: "createGestureMap",\n value: function createGestureMap() {\n var _this4 = this;\n\n var gestureMap = {};\n Object.entries(this._managedLayers).forEach(function (_ref7) {\n var _ref8 = GestureFeature_slicedToArray(_ref7, 2),\n layerName = _ref8[0],\n animations = _ref8[1].animations;\n\n Object.entries(animations).forEach(function (_ref9) {\n var _ref10 = GestureFeature_slicedToArray(_ref9, 2),\n animationName = _ref10[0],\n _ref10$ = _ref10[1],\n holdTime = _ref10$.holdTime,\n minimumInterval = _ref10$.minimumInterval,\n words = _ref10$.words,\n transitionTime = _ref10$.transitionTime;\n\n // Only store gestures that have any associated words\n if (words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = {\n feature: _this4.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n };\n gestureMap[JSON.stringify(key)] = words;\n }\n });\n });\n return gestureMap;\n }\n /**\n * Create an array that contains ssml mark syntax required to play each gesture\n * that does not have any associated words. The resulting array can be used as\n * an input for {@link TextToSpeechUtils.autoGenerateSSMLMarks} or\n * {@link TextToSpeechUtils.addMarksToUnmarkedSentences} to update a speech\n * string with the markup required to play random gestures at each unmarked\n * sentence in the string.\n *\n * @param {Array.=} layers - An array of names of managed layers to generate\n * marks for. If undefined, use all managed layers.\n *\n * @returns {Array.}\n */\n\n }, {\n key: "createGenericGestureArray",\n value: function createGenericGestureArray(layers) {\n var _this5 = this;\n\n var genericGestures = [];\n layers = layers || Object.keys(this._managedLayers);\n layers.forEach(function (layerName) {\n var layer = _this5._managedLayers[layerName]; // Make sure the layer is managed\n\n if (!layer) {\n return;\n }\n\n Object.entries(layer.animations).forEach(function (_ref11) {\n var _ref12 = GestureFeature_slicedToArray(_ref11, 2),\n animationName = _ref12[0],\n _ref12$ = _ref12[1],\n holdTime = _ref12$.holdTime,\n minimumInterval = _ref12$.minimumInterval,\n words = _ref12$.words,\n transitionTime = _ref12$.transitionTime;\n\n // Only store gestures that don\'t have any associated words\n if (!words.length) {\n var options = GestureFeature_objectSpread(GestureFeature_objectSpread(GestureFeature_objectSpread({}, holdTime && {\n holdTime: holdTime\n }), minimumInterval && {\n minimumInterval: minimumInterval\n }), transitionTime && {\n transitionTime: transitionTime\n });\n\n var key = JSON.stringify({\n feature: _this5.constructor.name,\n method: \'playGesture\',\n args: [layerName, animationName, options]\n });\n\n if (!genericGestures.includes(key)) {\n genericGestures.push(key);\n }\n }\n });\n });\n return genericGestures;\n }\n /**\n * Play a managed gesture animation.\n *\n * @param {string} layerName - The name of the layer that contains the gesture\n * animation.\n * @param {string} animationName - The name of the gesture animation.\n * @param {Object=} options - Optional gesture options.\n * @param {number=} options.holdTime - This option only applies to {@link QueueState}\n * gestures. When a QueueState gesture progresses to a looping state, this option\n * defines how many seconds should elapse before moving the queue forward. If\n * undefined, it will fall back first to the holdTime defined in the options when\n * the gesture animation was registered and then to the holdTime defined on the\n * feature.\n * @param {number=} options.minimumInterval - The minimum amount of time that\n * must have elapsed since the last time a gesture was played.\n */\n\n }, {\n key: "playGesture",\n value: function playGesture(layerName, animationName) {\n var _ref13 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n holdTime = _ref13.holdTime,\n minimumInterval = _ref13.minimumInterval,\n transitionTime = _ref13.transitionTime,\n _ref13$force = _ref13.force,\n force = _ref13$force === void 0 ? false : _ref13$force;\n\n // Make sure the animation is registered\n if (this._managedLayers[layerName] === undefined || this._managedLayers[layerName].animations[animationName] === undefined) {\n this.registerAnimation(layerName, animationName, {\n holdTime: holdTime,\n minimumInterval: minimumInterval,\n transitionTime: transitionTime\n });\n }\n\n var layer = this._managedLayers[layerName];\n var animation = layer.animations[animationName]; // Make sure the animation is active\n\n if (!animation.isActive) {\n // Create warning message based on which object doesn\'t exist yet\n var typeName = layer.isActive ? \'animation\' : \'layer\';\n var message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No ").concat(typeName, " exists with this name yet.");\n console.warn(message);\n return core_Deferred.cancel({\n reason: \'inactive\',\n value: typeName\n });\n } // Check if the gesture is already playing\n\n\n var currentGesture = layer.currentGesture;\n\n if (currentGesture === animationName && !force) {\n var _message = "Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". The gesture is already playing. Use options.force to force the gesture replay, which may result in a hard transition.");\n\n console.warn(_message);\n return core_Deferred.cancel({\n reason: \'playing\',\n value: animationName\n });\n } // Update animation options\n\n\n if (holdTime !== undefined) {\n animation.holdTime = holdTime;\n }\n\n if (minimumInterval !== undefined) {\n animation.minimumInterval = minimumInterval;\n } else {\n minimumInterval = this._getMinimumInterval(layer, animation);\n } // Check the interval\n\n\n if (!force && layer.playTimer !== null && layer.playTimer < minimumInterval) {\n console.warn("Skipping gesture ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Minimum interval ").concat(minimumInterval, " has not been met."));\n return core_Deferred.cancel({\n reason: \'minimumInterval\',\n value: minimumInterval - layer.playTimer\n });\n } // Play the animation\n\n\n layer.currentGesture = animationName;\n layer.playTimer = 0;\n layer.holdTimer.cancel();\n\n if (layer.autoDisable) {\n this.setLayerWeights(function (name) {\n return name === layerName;\n }, 1);\n }\n\n return this._host.AnimationFeature.playAnimation(layerName, animationName, transitionTime);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this6 = this;\n\n GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "update", this).call(this, deltaTime); // Increment the timers\n\n\n Object.entries(this._managedLayers).forEach(function (_ref14) {\n var _ref15 = GestureFeature_slicedToArray(_ref14, 2),\n name = _ref15[0],\n options = _ref15[1];\n\n if (options.isActive && !_this6._host.AnimationFeature.getPaused(name)) {\n options.holdTimer.execute(deltaTime);\n\n if (options.playTimer !== null) {\n options.playTimer += deltaTime / 1000;\n }\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n /**\n * @inner\n * @namespace GestureFeature\n */\n var api = GestureFeature_get(GestureFeature_getPrototypeOf(GestureFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\n * @memberof GestureFeature\n * @instance\n * @method\n * @see GestureFeature#createGestureMap\n */\n createGestureMap: this.createGestureMap.bind(this),\n\n /**\n * @memberof GestureFeature\n * @instance\n * @method\n * @see GestureFeature#createGenericGestureArray\n */\n createGenericGestureArray: this.createGenericGestureArray.bind(this),\n\n /**\n * @memberof GestureFeature\n * @instance\n * @method\n * @see GestureFeature#playGesture\n */\n playGesture: this.playGesture.bind(this)\n });\n }\n }]);\n\n return GestureFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\nObject.defineProperties(GestureFeature_GestureFeature, {\n DEFAULT_LAYER_OPTIONS: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.DEFAULT_LAYER_OPTIONS), {}, {\n autoDisable: true\n }),\n writable: false\n },\n EVENT_DEPENDENCIES: {\n value: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES), {}, {\n AnimationFeature: GestureFeature_objectSpread(GestureFeature_objectSpread({}, GestureFeature_GestureFeature.EVENT_DEPENDENCIES.AnimationFeature), {}, {\n playNextAnimation: \'_onNext\',\n stopAnimation: \'_onStop\',\n interruptAnimation: \'_onStop\'\n })\n })\n }\n});\n/* harmony default export */ var core_GestureFeature = (GestureFeature_GestureFeature);\n\n// CONCATENATED MODULE: ./src/core/animpack/AnimationUtils.js\nfunction AnimationUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\r\n * A collection of useful animation functions.\r\n *\r\n * @hideconstructor\r\n */\n\nvar AnimationUtils_AnimationUtils = /*#__PURE__*/function () {\n function AnimationUtils() {\n AnimationUtils_classCallCheck(this, AnimationUtils);\n }\n\n AnimationUtils_createClass(AnimationUtils, null, [{\n key: "lerp",\n value: function lerp(from, to, factor) {\n console.warn("AnimationUtils.lerp is being deprecated. Use MathUtils.lerp instead.");\n return core_MathUtils.lerp(from, to, factor);\n }\n /**\r\n * Clamp a number between 2 values.\r\n *\r\n * @param {number} value - Value to clamp.\r\n * @param {number} [min=0] - Minumum value.\r\n * @param {number} [max=1] - Maximum value.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "clamp",\n value: function clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n console.warn("AnimationUtils.clamp is being deprecated. Use MathUtils.clamp instead.");\n return core_MathUtils.clamp(value, min, max);\n }\n /**\r\n * Return a deferred promise that can be used to update the value of a numeric\r\n * property of this object over time. Pass delta time in milliseconds to the\r\n * deferred promise\'s execute method in an update loop to animate the property\r\n * towards the target value.\r\n *\r\n * @param {Object} propertyOwner - Object that contains the property to animation.\r\n * @param {string} propertyName - Name of the property to animate.\r\n * @param {number} targetValue - Target value to reach.\r\n * @param {Object=} options - Optional options object\r\n * @param {number} [options.seconds=0] - Number of seconds it will take to reach\r\n * the target value.\r\n * @param {Function} [options.easingFn=Linear.InOut] - Easing function to use for animation.\r\n * @param {Function} [options.onFinish] - Callback to execute once the animation completes.\r\n * The target value is passed as a parameter.\r\n * @param {Function=} options.onProgress - Callback to execute each time the animation\r\n * property is updated during the animation. The property\'s value at the time of\r\n * the update is passed as a parameter.\r\n * @param {Function=} options.onCancel - Callback to execute if the user cancels the\r\n * animation before completion. The animation property\'s value at the time of\r\n * cancel is passed as a parameter.\r\n * @param {Function=} options.onError - Callback to execute if the animation stops\r\n * because an error is encountered. The error message is passed as a parameter.\r\n *\r\n * @returns {Deferred} Resolves with the property\'s value once it reaches the\r\n * target value.\r\n */\n\n }, {\n key: "interpolateProperty",\n value: function interpolateProperty(propertyOwner, propertyName, targetValue) {\n var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref$seconds = _ref.seconds,\n seconds = _ref$seconds === void 0 ? 0 : _ref$seconds,\n easingFn = _ref.easingFn,\n _onFinish = _ref.onFinish,\n _onProgress = _ref.onProgress,\n _onCancel = _ref.onCancel,\n onError = _ref.onError;\n\n // Make sure property is an object\n if (!(propertyOwner instanceof Object)) {\n var e = new Error("Cannot interpolate property ".concat(propertyName, ". Property owner must be an object."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n return core_Deferred.reject(e);\n } // Make sure property is numeric\n\n\n if (Number.isNaN(Number(propertyOwner[propertyName]))) {\n var _e = new Error("Cannot interpolate property ".concat(propertyName, ". Property must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e);\n }\n\n return core_Deferred.reject(_e);\n } // Make sure the target value is numeric\n\n\n if (Number.isNaN(Number(targetValue))) {\n var _e2 = new Error("Cannot interpolate property ".concat(propertyName, " to value ").concat(targetValue, ". Target value must be numeric."));\n\n if (typeof onError === \'function\') {\n onError(_e2);\n }\n\n return core_Deferred.reject(_e2);\n } // Resolve immediately if the target has already been reached\n\n\n var startValue = propertyOwner[propertyName];\n\n if (startValue === targetValue) {\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n\n return core_Deferred.resolve(targetValue);\n } // Default to linear interpolation\n\n\n if (typeof easingFn !== \'function\') {\n if (easingFn !== undefined) {\n console.warn("Invalid property interpolation easingFn. Defaulting to linear interpolation.");\n }\n\n easingFn = Linear.InOut;\n }\n\n var interpolator = core_Utils.wait(seconds, {\n onFinish: function onFinish() {\n propertyOwner[propertyName] = targetValue;\n\n if (typeof _onFinish === \'function\') {\n _onFinish(targetValue);\n }\n },\n onCancel: function onCancel() {\n if (typeof _onCancel === \'function\') {\n _onCancel(propertyOwner[propertyName]);\n }\n },\n onProgress: function onProgress(progress) {\n if (propertyOwner[propertyName] !== targetValue) {\n // Calculate the lerp factor\n var easeFactor = easingFn(progress);\n\n if (typeof easeFactor !== \'number\') {\n var _e3 = new Error("Invalid property interpolation easingFn. EasingFn must return a number.");\n\n interpolator.reject(_e3);\n return;\n } // Update the value\n\n\n propertyOwner[propertyName] = core_MathUtils.lerp(startValue, targetValue, easeFactor);\n } // Signal progress\n\n\n if (typeof _onProgress === \'function\') {\n _onProgress(propertyOwner[propertyName]);\n } // Signal completion once time is up\n\n\n if (progress === 1) {\n propertyOwner[propertyName] = targetValue;\n interpolator.resolve(targetValue);\n }\n },\n onError: onError\n });\n return interpolator;\n }\n }]);\n\n return AnimationUtils;\n}();\n\n/* harmony default export */ var animpack_AnimationUtils = (AnimationUtils_AnimationUtils);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractState.js\nfunction AbstractState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractState_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\n * Base class for a state in our animation system.\n *\n * @abstract\n */\n\nvar AbstractState_AbstractState = /*#__PURE__*/function () {\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation state.\n * @param {string=} options.name - Name for the animation state. Names must be\n * unique for the container the state is applied to and should be validated at\n * the container level. If no name is given it will default to the constructor\n * name.\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\n */\n function AbstractState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AbstractState_classCallCheck(this, AbstractState);\n\n this.name = options.name !== undefined ? options.name : this.constructor.name;\n this._weight = options.weight !== undefined ? core_MathUtils.clamp(options.weight, 0, 1) : 0;\n this._internalWeight = this._weight;\n this._paused = false;\n this._promises = {\n finish: core_Deferred.resolve(),\n weight: core_Deferred.resolve(),\n play: core_Deferred.resolve()\n };\n this._playCallbacks = {\n onFinish: undefined,\n onError: undefined,\n onCancel: undefined\n };\n }\n /**\n * Gets whether or not the state is currently paused.\n *\n * @type {number}\n */\n\n\n AbstractState_createClass(AbstractState, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\n * Gets and sets the user defined weight.\n *\n * @type {number}\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n },\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n /**\n * Gets whether or not the weight is currently being animated.\n *\n * @readonly\n * @type {boolean}\n */\n\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {number} weight - The target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target weight.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.weight.cancel();\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.weight;\n }\n /**\n * Gets the internal weight.\n *\n * @readonly\n * @type {number}\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._internalWeight;\n }\n /**\n * Multiplies the user weight by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n }\n /**\n * Update any values that need to be evaluated every frame.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._paused) {\n Object.values(this._promises).forEach(function (promise) {\n promise.execute(deltaTime);\n });\n }\n }\n /**\n * Start playback of the state from the beginning.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n this._promises.play = new core_Deferred(undefined, onFinish, onError, onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n return this._promises.finish;\n }\n /**\n * Pause playback of the state. This prevents pending promises from being executed.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n return true;\n }\n /**\n * Resume playback of the state.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n this._promises.play = new core_Deferred(undefined, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n this._promises.finish = core_Deferred.all([this._promises.play, this._promises.weight]);\n }\n\n return this._promises.finish;\n }\n /**\n * Cancel playback of the state and cancel any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.cancel();\n });\n return true;\n }\n /**\n * Stop playback of the state and resolve any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._paused = true;\n Object.values(this._promises).forEach(function (promise) {\n promise.resolve();\n });\n return true;\n }\n /**\n * Cancel any pending promises and remove reference to them.\n */\n\n }, {\n key: "discard",\n value: function discard() {\n this.cancel();\n delete this._promises;\n }\n /**\n * Force the internal weight to 0. Should be called before switching or transitioning\n * to a new state.\n */\n\n }, {\n key: "deactivate",\n value: function deactivate() {\n this.updateInternalWeight(0);\n }\n }]);\n\n return AbstractState;\n}();\n\n/* harmony default export */ var state_AbstractState = (AbstractState_AbstractState);\n// CONCATENATED MODULE: ./src/core/animpack/state/TransitionState.js\nfunction TransitionState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TransitionState_typeof = function _typeof(obj) { return typeof obj; }; } else { TransitionState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TransitionState_typeof(obj); }\n\nfunction TransitionState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TransitionState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TransitionState_createClass(Constructor, protoProps, staticProps) { if (protoProps) TransitionState_defineProperties(Constructor.prototype, protoProps); if (staticProps) TransitionState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TransitionState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TransitionState_get = Reflect.get; } else { TransitionState_get = function _get(target, property, receiver) { var base = TransitionState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TransitionState_get(target, property, receiver || target); }\n\nfunction TransitionState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TransitionState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TransitionState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TransitionState_setPrototypeOf(subClass, superClass); }\n\nfunction TransitionState_setPrototypeOf(o, p) { TransitionState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TransitionState_setPrototypeOf(o, p); }\n\nfunction TransitionState_createSuper(Derived) { var hasNativeReflectConstruct = TransitionState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TransitionState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TransitionState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TransitionState_possibleConstructorReturn(this, result); }; }\n\nfunction TransitionState_possibleConstructorReturn(self, call) { if (call && (TransitionState_typeof(call) === "object" || typeof call === "function")) { return call; } return TransitionState_assertThisInitialized(self); }\n\nfunction TransitionState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TransitionState_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; } }\n\nfunction TransitionState_getPrototypeOf(o) { TransitionState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TransitionState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Class for smooth transitioning between states on an animation layer.\r\n *\r\n * @extends AbstractState\r\n */\n\nvar TransitionState_TransitionState = /*#__PURE__*/function (_AbstractState) {\n TransitionState_inherits(TransitionState, _AbstractState);\n\n var _super = TransitionState_createSuper(TransitionState);\n\n function TransitionState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n TransitionState_classCallCheck(this, TransitionState);\n\n _this = _super.call(this, options);\n _this._to = null;\n _this._from = [];\n _this._weightPromise = core_Deferred.resolve();\n return _this;\n }\n\n TransitionState_createClass(TransitionState, [{\n key: "internalWeight",\n get: function get() {\n // Find the combined weight of all sub-states\n var totalWeight = 0;\n\n if (this._to) {\n totalWeight += this._to.weight;\n }\n\n this._from.forEach(function (state) {\n totalWeight += state.weight;\n });\n\n return totalWeight * this._internalWeight;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._from.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n\n if (this._to) {\n this._to.updateInternalWeight(this._internalWeight);\n }\n }\n /**\r\n * Update sub-states the transition is controlling and start new weight\r\n * animations on each one. This should be called each time the current state of\r\n * an animation layer gets updated to a new value and a transition time greater\r\n * that zero is specified.\r\n *\r\n * @param {Array.} [currentStates=[]] - States whose weight values\r\n * will be animated to 0.\r\n * @param {AbstractState=} targetState - State whose weight will be animated\r\n * to 1.\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "configure",\n value: function configure() {\n var currentStates = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var targetState = arguments.length > 1 ? arguments[1] : undefined;\n var transitionTime = arguments.length > 2 ? arguments[2] : undefined;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var onComplete = arguments.length > 4 ? arguments[4] : undefined;\n\n // Deactivate any states that aren\'t in the new configuration\n if (this._to === targetState || currentStates.includes(this._to)) {\n this._to = null;\n }\n\n this._from = this._from.filter(function (state) {\n return state !== targetState && !currentStates.includes(state);\n });\n this.deactivate();\n this._from = currentStates;\n this._to = targetState;\n this.reset(transitionTime, easingFn, onComplete);\n }\n /**\r\n * Start new weight animations state the transition controls. This should be called\r\n * if an animation is played with a transition time greater than zero and a transtion\r\n * to that animation was already in progress.\r\n *\r\n * @param {number} transitionTime - Amount of time it will in seconds take for\r\n * weight animations to complete.\r\n * @param {Function=} easingFn - Easing function to use for weight animations.\r\n * Default is Easing.Linear.InOut.\r\n * @param {Function=} onComplete - Function to execute once all weight animations\r\n * complete.\r\n */\n\n }, {\n key: "reset",\n value: function reset(transitionTime, easingFn, onComplete) {\n var _this3 = this;\n\n // Stop any pending promises\n this._weightPromise.cancel(); // Start tweening weight to 0 for the current states\n\n\n var weightPromises = this._from.map(function (state) {\n return state.setWeight(0, transitionTime, easingFn);\n }); // Start tweening weight to 1 for the target state\n\n\n if (this._to) {\n weightPromises.push(this._to.setWeight(1, transitionTime, easingFn));\n this.name = this._to.name;\n } else {\n this.name = null;\n }\n\n this._weightPromise = core_Deferred.all(weightPromises, function () {\n _this3._from.forEach(function (state) {\n state.cancel();\n state.deactivate();\n });\n\n if (typeof onComplete === \'function\') {\n onComplete();\n }\n });\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n this._playCallbacks.onFinish = onFinish;\n this._playCallbacks.onError = onError;\n this._playCallbacks.onCancel = onCancel;\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.play(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, onFinish, onError, onCancel);\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.pause();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "pause", this).call(this);\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n this._paused = false;\n\n if (!this._promises.play.pending) {\n this._playCallbacks.onFinish = onFinish || this._playCallbacks.onFinish;\n this._playCallbacks.onError = onError || this._playCallbacks.onError;\n this._playCallbacks.onCancel = onCancel || this._playCallbacks.onCancel;\n }\n\n var promises = [this._weightPromise];\n\n this._from.forEach(function (state) {\n state.resume();\n });\n\n if (this._to) {\n this._promises.play = this._to.resume(undefined, undefined, undefined, onNext);\n promises.push(this._promises.play);\n }\n\n this._promises.finish = core_Deferred.all(promises, this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel);\n return this._promises.finish;\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.cancel();\n }\n\n this._weightPromise.cancel();\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._from.forEach(function (state) {\n state.pause();\n });\n\n if (this._to) {\n this._to.stop();\n }\n\n return TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "stop", this).call(this);\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "update", this).call(this, deltaTime);\n\n this._from.forEach(function (state) {\n state.update(deltaTime);\n });\n\n if (this._to) {\n this._to.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n TransitionState_get(TransitionState_getPrototypeOf(TransitionState.prototype), "discard", this).call(this);\n\n this._weightPromise.cancel();\n\n delete this._weightPromise;\n this._to = null;\n this._from.length = 0;\n }\n }, {\n key: "deactivate",\n value: function deactivate() {\n if (this._to) {\n this._to.deactivate();\n }\n\n this._from.forEach(function (state) {\n state.deactivate();\n });\n }\n }]);\n\n return TransitionState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_TransitionState = (TransitionState_TransitionState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationPlayerInterface.js\nfunction AnimationPlayerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationPlayerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationPlayerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationPlayerInterface_typeof(obj); }\n\nfunction AnimationPlayerInterface_toConsumableArray(arr) { return AnimationPlayerInterface_arrayWithoutHoles(arr) || AnimationPlayerInterface_iterableToArray(arr) || AnimationPlayerInterface_unsupportedIterableToArray(arr) || AnimationPlayerInterface_nonIterableSpread(); }\n\nfunction AnimationPlayerInterface_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction AnimationPlayerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AnimationPlayerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AnimationPlayerInterface_arrayLikeToArray(o, minLen); }\n\nfunction AnimationPlayerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AnimationPlayerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AnimationPlayerInterface_arrayLikeToArray(arr); }\n\nfunction AnimationPlayerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AnimationPlayerInterface_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationPlayerInterface_get = Reflect.get; } else { AnimationPlayerInterface_get = function _get(target, property, receiver) { var base = AnimationPlayerInterface_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationPlayerInterface_get(target, property, receiver || target); }\n\nfunction AnimationPlayerInterface_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationPlayerInterface_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationPlayerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationPlayerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationPlayerInterface_setPrototypeOf(o, p) { AnimationPlayerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationPlayerInterface_setPrototypeOf(o, p); }\n\nfunction AnimationPlayerInterface_createSuper(Derived) { var hasNativeReflectConstruct = AnimationPlayerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationPlayerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationPlayerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationPlayerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationPlayerInterface_possibleConstructorReturn(self, call) { if (call && (AnimationPlayerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationPlayerInterface_assertThisInitialized(self); }\n\nfunction AnimationPlayerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationPlayerInterface_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; } }\n\nfunction AnimationPlayerInterface_getPrototypeOf(o) { AnimationPlayerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationPlayerInterface_getPrototypeOf(o); }\n\nfunction AnimationPlayerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationPlayerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationPlayerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationPlayerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationPlayerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/* eslint-disable no-useless-constructor */\n\n\n/**\n * Class factory interface for controlling playback of a collection of animations.\n * One animation can be played at any given time, crossfading between animations\n * will result in playing a {@link TransitionState}.\n *\n * @interface\n */\n\nvar AnimationPlayerInterface_AnimationPlayerInterface = /*#__PURE__*/function () {\n function AnimationPlayerInterface() {\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerInterface);\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerInterface, [{\n key: "paused",\n get:\n /**\n * Gets whether or not the player is updating states.\n *\n * @readonly\n * @type {boolean}\n */\n function get() {\n return this._paused;\n }\n /**\n * Gets and sets the default number of seconds it takes to transition to a new\n * animation.\n *\n * @type {number}\n */\n\n }, {\n key: "transitionTime",\n get: function get() {},\n set: function set(seconds) {}\n /**\n * Gets and sets the default easing function to use when transitioning and\n * setting weights.\n *\n * @type {Function}\n */\n\n }, {\n key: "easingFn",\n get: function get() {},\n set: function set(fn) {}\n /**\n * Gets the state the layer is currently in control of.\n *\n * @readonly\n * @type {AbstractState}\n */\n\n }, {\n key: "currentState",\n get: function get() {}\n /**\n * Gets the name of the state the layer is currently in control of.\n *\n * @readonly\n * @type {string}\n */\n\n }, {\n key: "currentAnimation",\n get: function get() {}\n /**\n * Gets whether or not the layer is currently transitioning to a new animation.\n *\n * @readonly\n * @type {boolean}\n */\n\n }, {\n key: "isTransitioning",\n get: function get() {}\n /**\n * Update the layer\'s current state to a new value. If transitionTime is defined\n * and greater than zero, perform a smooth blend between any states that currently\n * have non-zero weight values and the new state.\n *\n * @private\n *\n * @param {(string|null)} name - Name of the state to transition to.\n * @param {string} playMethod - Name of the operation being prepared for, to be\n * used in error messaging.\n * @param {number=} transitionTime - Amount of time in seconds it will take to\n * switch to the new state.\n * @param {Function=} easingFn - Easing function to use when transitioning to a\n * new state over time.\n * @param {Function=} onError - Function to execute if an error is encountered.\n */\n\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {}\n /**\n * Start playback an animation from the beginning.\n *\n * @param {string} name - Name of the animation to play.\n * @param {number=} transitionTime - Amount of time it will take before the\n * new state has full influence for the layer.\n * @param {Function=} easingFn - Easing function to use for blending if transitionTime\n * is greater than zero.\n * @param {Function=} onFinish - Function to execute when the animation finishes.\n * @param {Function=} onError - Function to execute if the animation encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n * @param {Function=} onNext - Function to execute if an animation queue is\n * played and it advances to the next animation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\n * Cancel playback of the current animation.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {}\n /**\n * Pause playback of the current animation.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {}\n /**\n * Resume playback of an animation.\n *\n * @param {string=} name - Name of the animation to resume playback for. Default\n * is the layer\'s current animation name.\n * @param {number=} transitionTime - Amount of time it will take before the\n * new state has full influence for the layer.\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n * @param {Function=} onNext - Function to execute if an animation queue is\n * played and it advances to the next animation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {}\n /**\n * Stop playback of the current animation.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {}\n /**\n * Update the current animation.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {}\n /**\n * Discard the transition state.\n */\n\n }, {\n key: "discard",\n value: function discard() {}\n /**\n * Creates a class that implements {@link AnimationPlayerInterface} and extends\n * a specified base class.\n *\n * @param {Class} [BaseClass = class{}] - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link AnimationPlayerInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n AnimationPlayerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n var AnimationPlayerMixin = /*#__PURE__*/function (_BaseClass) {\n AnimationPlayerInterface_inherits(AnimationPlayerMixin, _BaseClass);\n\n var _super = AnimationPlayerInterface_createSuper(AnimationPlayerMixin);\n\n function AnimationPlayerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationPlayerInterface_classCallCheck(this, AnimationPlayerMixin);\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._transitionState = new state_TransitionState();\n _this._states = _this._states !== undefined ? _this._states : new Map();\n _this._currentState = null;\n _this._paused = false;\n _this._transitionTime = Number(options.transitionTime) >= 0 ? Number(options.transitionTime) : 0;\n _this._easingFn = typeof options.easingFn === \'function\' ? options.easingFn : undefined;\n return _this;\n }\n\n AnimationPlayerInterface_createClass(AnimationPlayerMixin, [{\n key: "paused",\n get: function get() {\n return this._paused;\n }\n }, {\n key: "transitionTime",\n get: function get() {\n return this._transitionTime;\n },\n set: function set(seconds) {\n seconds = Number(seconds);\n\n if (!(seconds >= 0)) {\n throw new Error("Cannot set transition time for ".concat(this.constructor.name, " to ").concat(seconds, ". Seconds must be a numeric value greather than or equal to zero."));\n }\n\n this._transitionTime = seconds;\n }\n }, {\n key: "easingFn",\n get: function get() {\n return this._easingFn;\n },\n set: function set(fn) {\n this._easingFn = fn;\n }\n }, {\n key: "currentState",\n get: function get() {\n return this._currentState;\n }\n }, {\n key: "currentAnimation",\n get: function get() {\n if (this._currentState) {\n return this._currentState.name;\n }\n\n return null;\n }\n }, {\n key: "isTransitioning",\n get: function get() {\n return this._currentState === this._transitionState;\n }\n }, {\n key: "_prepareCurrentState",\n value: function _prepareCurrentState(name, playMethod, transitionTime, easingFn, onError) {\n var _this2 = this;\n\n if (name !== null && !this._states.has(name)) {\n var e = new Error("Cannot ".concat(playMethod, " animation ").concat(name, ". No animation exists with this name."));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n\n throw e;\n }\n\n var targetState = name !== null ? this._states.get(name) : null; // Make sure the new state isn\'t already playing\n\n if (this.currentAnimation !== name) {\n // Switch to the new state immediately\n if (transitionTime <= 0) {\n // Cancel the current state and set its weight to 0\n if (this._currentState) {\n this._currentState.cancel();\n\n this._currentState.weight = 0;\n\n this._currentState.deactivate();\n }\n\n this._currentState = targetState;\n } // Blend to the new state over time\n else {\n // Make sure to transition out of any states with non-zero weight\n var currentStates = AnimationPlayerInterface_toConsumableArray(this._states.values()).filter(function (s) {\n return s !== targetState && (s.weight || s.weightPending);\n }); // Update the transition state with new inputs\n\n\n this._transitionState.configure(currentStates, targetState, transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n\n this._currentState = this._transitionState;\n }\n } else if (playMethod === \'play\') {\n this._currentState.cancel();\n\n if (this._currentState === this._transitionState) {\n this._transitionState.reset(transitionTime, easingFn, function () {\n _this2._currentState = targetState;\n _this2._transitionState.weight = 0;\n });\n }\n } // Update weight for the new current state so it has full influence for the player\n\n\n this._currentState.weight = 1;\n\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }, {\n key: "playAnimation",\n value: function playAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'play\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.play(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation() {\n if (this._currentState) {\n return this._currentState.pause();\n } else {\n return false;\n }\n }\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(name, transitionTime, easingFn, onFinish, onError, onCancel, onNext) {\n if (name === undefined && this._currentState) {\n name = this._currentState.name;\n }\n\n var error;\n var reject = false;\n\n try {\n this._prepareCurrentState(name, \'resume\', transitionTime !== undefined ? transitionTime : this._transitionTime, easingFn !== undefined ? easingFn : this._easingFn, onError);\n } catch (e) {\n error = e;\n reject = true;\n }\n\n if (reject) {\n return core_Deferred.reject(error);\n }\n\n return this._currentState.resume(onFinish, onError, onCancel, onNext);\n }\n }, {\n key: "cancelAnimation",\n value: function cancelAnimation() {\n if (this._currentState) {\n return this._currentState.cancel();\n } else {\n return false;\n }\n }\n }, {\n key: "stopAnimation",\n value: function stopAnimation() {\n if (this._currentState) {\n return this._currentState.stop();\n } else {\n return false;\n }\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "update", this).call(this, deltaTime);\n }\n\n if (this._currentState) {\n this._currentState.update(deltaTime);\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this)) {\n AnimationPlayerInterface_get(AnimationPlayerInterface_getPrototypeOf(AnimationPlayerMixin.prototype), "discard", this).call(this);\n }\n\n this._transitionState.discard();\n\n delete this._transitionState;\n }\n }]);\n\n return AnimationPlayerMixin;\n }(BaseClass);\n\n return AnimationPlayerMixin;\n }\n }]);\n\n return AnimationPlayerInterface;\n}();\n\n/* harmony default export */ var animpack_AnimationPlayerInterface = (AnimationPlayerInterface_AnimationPlayerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/StateContainerInterface.js\nfunction StateContainerInterface_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { StateContainerInterface_typeof = function _typeof(obj) { return typeof obj; }; } else { StateContainerInterface_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return StateContainerInterface_typeof(obj); }\n\nfunction StateContainerInterface_toConsumableArray(arr) { return StateContainerInterface_arrayWithoutHoles(arr) || StateContainerInterface_iterableToArray(arr) || StateContainerInterface_unsupportedIterableToArray(arr) || StateContainerInterface_nonIterableSpread(); }\n\nfunction StateContainerInterface_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction StateContainerInterface_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return StateContainerInterface_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return StateContainerInterface_arrayLikeToArray(o, minLen); }\n\nfunction StateContainerInterface_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction StateContainerInterface_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return StateContainerInterface_arrayLikeToArray(arr); }\n\nfunction StateContainerInterface_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction StateContainerInterface_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) StateContainerInterface_setPrototypeOf(subClass, superClass); }\n\nfunction StateContainerInterface_setPrototypeOf(o, p) { StateContainerInterface_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return StateContainerInterface_setPrototypeOf(o, p); }\n\nfunction StateContainerInterface_createSuper(Derived) { var hasNativeReflectConstruct = StateContainerInterface_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = StateContainerInterface_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = StateContainerInterface_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return StateContainerInterface_possibleConstructorReturn(this, result); }; }\n\nfunction StateContainerInterface_possibleConstructorReturn(self, call) { if (call && (StateContainerInterface_typeof(call) === "object" || typeof call === "function")) { return call; } return StateContainerInterface_assertThisInitialized(self); }\n\nfunction StateContainerInterface_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction StateContainerInterface_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; } }\n\nfunction StateContainerInterface_getPrototypeOf(o) { StateContainerInterface_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return StateContainerInterface_getPrototypeOf(o); }\n\nfunction StateContainerInterface_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction StateContainerInterface_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction StateContainerInterface_createClass(Constructor, protoProps, staticProps) { if (protoProps) StateContainerInterface_defineProperties(Constructor.prototype, protoProps); if (staticProps) StateContainerInterface_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable max-classes-per-file */\n\n/* eslint-disable no-unused-vars */\n\n/* eslint-disable no-empty-function */\n\n/* eslint-disable getter-return */\n\n/**\n * Class factory interface for manipulating a collection of {@link AbstractState}.\n *\n * @interface\n */\n\nvar StateContainerInterface_StateContainerInterface = /*#__PURE__*/function () {\n function StateContainerInterface() {\n StateContainerInterface_classCallCheck(this, StateContainerInterface);\n }\n\n StateContainerInterface_createClass(StateContainerInterface, [{\n key: "getState",\n value:\n /**\n * Return the state with the given name.\n *\n * @param {string} name - Name of the state.\n *\n * @returns {AbstractState}\n */\n function getState(name) {}\n /**\n * Gets an array of the names of all states in the container.\n *\n * @type {Array.}\n */\n\n }, {\n key: "getStateNames",\n value: function getStateNames() {}\n /**\n * Add a new state to be controlled by the container. States are stored keyed\n * by their name property, which must be unique. If it isn\'t, a number will\n * be added or incremented until a unique key is generated.\n *\n * @param {AbstractState} state - State to add to the container.\n *\n * @returns {string} - Unique name of the state.\n */\n\n }, {\n key: "addState",\n value: function addState(state) {}\n /**\n * Removes a state with the given name from the container.\n *\n * @param {string} name - Name of the state to remove.\n *\n * @returns {boolean} - Whether or not a state was removed.\n */\n\n }, {\n key: "removeState",\n value: function removeState(name) {}\n /**\n * Renames a state with the given name in the container. Name must be unique\n * to the container, if it isn\'t the name will be incremented until it is unique.\n *\n * @param {string} currentName - Name of the state to rename.\n * @param {string} newName - Name to update the state with.\n *\n * @returns {string} - Updated name for the state.\n */\n\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {}\n /**\n * Discards all states.\n */\n\n }, {\n key: "discardStates",\n value: function discardStates() {}\n /**\n * Creates a class that implements {@link StateContainerInterface} and extends\n * a specified base class.\n *\n * @param {Class} [BaseClass = class{}] - The class to extend.\n *\n * @return {Class} A class that extends `BaseClass` and implements {@link StateContainerInterface}.\n */\n\n }], [{\n key: "Mixin",\n value: function Mixin() {\n var BaseClass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /*#__PURE__*/function () {\n function _class() {\n StateContainerInterface_classCallCheck(this, _class);\n }\n\n return _class;\n }();\n\n /**\n * This mixin adds functionality for manipulating uniquely-named animation states in\n * a map.\n */\n var StateContainerMixin = /*#__PURE__*/function (_BaseClass) {\n StateContainerInterface_inherits(StateContainerMixin, _BaseClass);\n\n var _super = StateContainerInterface_createSuper(StateContainerMixin);\n\n function StateContainerMixin() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n StateContainerInterface_classCallCheck(this, StateContainerMixin);\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this, options].concat(args));\n _this._states = _this._states !== undefined ? _this._states : new Map();\n return _this;\n }\n\n StateContainerInterface_createClass(StateContainerMixin, [{\n key: "getState",\n value: function getState(name) {\n return this._states.get(name);\n }\n }, {\n key: "getStateNames",\n value: function getStateNames() {\n return StateContainerInterface_toConsumableArray(this._states.keys());\n }\n }, {\n key: "addState",\n value: function addState(state) {\n // Make sure the state is not already in this container\n if (StateContainerInterface_toConsumableArray(this._states.values()).includes(state)) {\n console.warn("Cannot add animation to state ".concat(this.name, ". Animation was already added."));\n return state.name;\n } // Make sure the state name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(state.name, StateContainerInterface_toConsumableArray(this._states.keys()));\n\n if (state.name !== uniqueName) {\n console.warn("Animation name ".concat(state.name, " is not unique for state ").concat(this.name, ". New animation will be added with name ").concat(uniqueName, "."));\n state.name = uniqueName;\n }\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n // Check if the state is in this container\n if (!this._states || !this._states.has(name)) {\n console.warn("Did not remove animation ".concat(name, " from state ").concat(this.name, ". No animation exists with this name."));\n return false;\n }\n\n this._states.get(name).discard();\n\n this._states["delete"](name);\n\n return true;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n // Make sure the state is in this container\n if (!this._states || !this._states.has(currentName)) {\n throw new Error("Cannot rename animation ".concat(currentName, " in ").concat(this.name, ". No animation exists with this name."));\n }\n\n var state = this._states.get(currentName); // Exit if the names are the same\n\n\n if (currentName === newName) {\n return currentName;\n } // Make sure the name is unique\n\n\n var uniqueName = core_Utils.getUniqueName(newName, StateContainerInterface_toConsumableArray(this._states.keys()).filter(function (s) {\n return s.name !== currentName;\n }));\n\n if (newName !== uniqueName) {\n console.warn("Animation name ".concat(newName, " is not unique in state ").concat(this.name, ". Animation will be renamed to ").concat(uniqueName, "."));\n newName = uniqueName;\n }\n\n state.name = newName;\n\n this._states["delete"](currentName);\n\n this._states.set(state.name, state);\n\n return state.name;\n }\n }, {\n key: "discardStates",\n value: function discardStates() {\n this._states.forEach(function (state) {\n state.discard();\n });\n\n delete this._states;\n }\n }]);\n\n return StateContainerMixin;\n }(BaseClass);\n\n return StateContainerMixin;\n }\n }]);\n\n return StateContainerInterface;\n}();\n\n/* harmony default export */ var state_StateContainerInterface = (StateContainerInterface_StateContainerInterface);\n// CONCATENATED MODULE: ./src/core/animpack/state/QueueState.js\nfunction QueueState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { QueueState_typeof = function _typeof(obj) { return typeof obj; }; } else { QueueState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return QueueState_typeof(obj); }\n\nfunction QueueState_toConsumableArray(arr) { return QueueState_arrayWithoutHoles(arr) || QueueState_iterableToArray(arr) || QueueState_unsupportedIterableToArray(arr) || QueueState_nonIterableSpread(); }\n\nfunction QueueState_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction QueueState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return QueueState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return QueueState_arrayLikeToArray(o, minLen); }\n\nfunction QueueState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction QueueState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return QueueState_arrayLikeToArray(arr); }\n\nfunction QueueState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction QueueState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction QueueState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction QueueState_createClass(Constructor, protoProps, staticProps) { if (protoProps) QueueState_defineProperties(Constructor.prototype, protoProps); if (staticProps) QueueState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction QueueState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { QueueState_get = Reflect.get; } else { QueueState_get = function _get(target, property, receiver) { var base = QueueState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return QueueState_get(target, property, receiver || target); }\n\nfunction QueueState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = QueueState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction QueueState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) QueueState_setPrototypeOf(subClass, superClass); }\n\nfunction QueueState_setPrototypeOf(o, p) { QueueState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return QueueState_setPrototypeOf(o, p); }\n\nfunction QueueState_createSuper(Derived) { var hasNativeReflectConstruct = QueueState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = QueueState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = QueueState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return QueueState_possibleConstructorReturn(this, result); }; }\n\nfunction QueueState_possibleConstructorReturn(self, call) { if (call && (QueueState_typeof(call) === "object" || typeof call === "function")) { return call; } return QueueState_assertThisInitialized(self); }\n\nfunction QueueState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction QueueState_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; } }\n\nfunction QueueState_getPrototypeOf(o) { QueueState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return QueueState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\n * Class for playing an ordered array of animation states in sequence.\n *\n * @extends AbstractState\n * @implements @AnimationPlayerInterface\n */\n\nvar QueueState = /*#__PURE__*/function (_AnimationPlayerInter) {\n QueueState_inherits(QueueState, _AnimationPlayerInter);\n\n var _super = QueueState_createSuper(QueueState);\n\n /**\n * @constructor\n *\n * @param {Object} [options={}] - Options for the state.\n * @param {boolean} [options.autoAdvance=true] - Whether to autmatically advance\n * to the next state in the queue as each state completes.\n * @param {Array.} [queueStates=[]] - Array of states to be played\n * in order.\n */\n function QueueState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var queueStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n QueueState_classCallCheck(this, QueueState);\n\n _this = _super.call(this, options);\n queueStates.forEach(function (state) {\n _this.addState(state);\n });\n _this._queue = _this._states.keys();\n _this._done = true;\n return _this;\n }\n /**\n * Gets whether the animation queue has reached the end.\n */\n\n\n QueueState_createClass(QueueState, [{\n key: "done",\n get: function get() {\n return this._done;\n }\n /**\n * Gets the internal weight.\n *\n * @readonly\n * @type {number}\n */\n\n }, {\n key: "internalWeight",\n get: function get() {\n return this._currentState ? this._currentState.internalWeight * this._internalWeight : 0;\n }\n /**\n * Restart the queue iterator.\n *\n * @private\n */\n\n }, {\n key: "_reset",\n value: function _reset() {\n this._queue = this._states.keys();\n\n var _this$_queue$next = this._queue.next(),\n value = _this$_queue$next.value,\n done = _this$_queue$next.done;\n\n this._done = done;\n return value || null;\n }\n /**\n * Multiplies the user weight by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\n * Start the next animation in the queue.\n *\n * @param {Function=} onNext - Function to execute each time an animation completes\n * and the queue moves to the next animation.\n * @param {boolean} [wrap=false] - Whether or not to start the queue from the\n * beginning again if the end has been reached.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "next",\n value: function next(onNext) {\n var _this2 = this;\n\n var wrap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n // Move the queue forward\n var _this$_queue$next2 = this._queue.next(),\n name = _this$_queue$next2.value,\n done = _this$_queue$next2.done;\n\n this._done = done;\n this._paused = false; // The queue has reached the end\n\n if (done) {\n // Start the queue over\n if (wrap) {\n return this.play(this._playCallbacks.onFinish, this._playCallbacks.onError, this._playCallbacks.onCancel, onNext);\n } // Stop the queue\n else {\n this._promises.finish.resolve();\n\n return this._promises.finish;\n }\n } // Signal the next animation is starting\n\n\n if (typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: this.getState(name).loopCount !== Infinity && !isQueueEnd,\n isQueueEnd: isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._transitionTime, this._easingFn, function () {\n if (!_this2._paused && !_this2.isTransitioning) {\n _this2.next(onNext);\n }\n }, this._playCallbacks.onError);\n return this._promises.finish;\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel, onNext) {\n var _this3 = this;\n\n var name = this._reset();\n\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n\n if (this._done) {\n this._promises.finish.resolve();\n } else {\n // Signal the next animation is starting\n if (name !== this.currentAnimation && typeof onNext === \'function\') {\n var lastName = QueueState_toConsumableArray(this._states.keys())[this._states.size - 1];\n\n var isQueueEnd = name === lastName;\n onNext({\n name: name,\n canAdvance: name ? this.getState(name).loopCount !== Infinity && !isQueueEnd : true,\n isQueueEnd: !name || isQueueEnd\n });\n } // Start the next animation\n\n\n this.playAnimation(name, this._currentState ? this._transitionTime : 0, this._easingFn, function () {\n if (!_this3._paused && !_this3.isTransitioning) {\n _this3.next(onNext);\n }\n }, onError);\n }\n\n return this._promises.finish;\n }\n }, {\n key: "pause",\n value: function pause() {\n var paused = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "pause", this).call(this);\n\n this.pauseAnimation();\n return paused;\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel, onNext) {\n var _this4 = this;\n\n if (this._done) {\n return this.play(onFinish, onError, onCancel, onNext);\n } else {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, function () {\n if (!_this4._paused && !_this4.isTransitioning) {\n _this4.next(onNext);\n }\n }, onError);\n return this._promises.finish;\n }\n }\n }, {\n key: "cancel",\n value: function cancel() {\n var canceled = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "cancel", this).call(this);\n\n if (this._currentState) {\n this._currentState.cancel();\n }\n\n return canceled;\n }\n }, {\n key: "stop",\n value: function stop() {\n var stopped = QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "stop", this).call(this);\n\n this.stopAnimation();\n this._done = true;\n return stopped;\n }\n }, {\n key: "discard",\n value: function discard() {\n QueueState_get(QueueState_getPrototypeOf(QueueState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return QueueState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_QueueState = (QueueState);\n// CONCATENATED MODULE: ./src/core/animpack/state/AbstractBlendState.js\nfunction AbstractBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractBlendState_typeof(obj); }\n\nfunction AbstractBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractBlendState_get = Reflect.get; } else { AbstractBlendState_get = function _get(target, property, receiver) { var base = AbstractBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractBlendState_get(target, property, receiver || target); }\n\nfunction AbstractBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractBlendState_setPrototypeOf(o, p) { AbstractBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractBlendState_setPrototypeOf(o, p); }\n\nfunction AbstractBlendState_createSuper(Derived) { var hasNativeReflectConstruct = AbstractBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractBlendState_possibleConstructorReturn(self, call) { if (call && (AbstractBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractBlendState_assertThisInitialized(self); }\n\nfunction AbstractBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractBlendState_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; } }\n\nfunction AbstractBlendState_getPrototypeOf(o) { AbstractBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\n * Base class for a state that blends a collection of {@link AbstractState}.\n *\n * @abstract\n * @implements StateContainerInterface\n */\n\nvar AbstractBlendState_AbstractBlendState = /*#__PURE__*/function (_StateContainerInterf) {\n AbstractBlendState_inherits(AbstractBlendState, _StateContainerInterf);\n\n var _super = AbstractBlendState_createSuper(AbstractBlendState);\n\n function AbstractBlendState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n AbstractBlendState_classCallCheck(this, AbstractBlendState);\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this, options].concat(args));\n blendStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\n * Gets the sum of internal weights of the sub-states.\n *\n * @readonly\n * @type {number}\n */\n\n\n AbstractBlendState_createClass(AbstractBlendState, [{\n key: "internalWeight",\n get: function get() {\n var blendWeights = 0;\n\n this._states.forEach(function (state) {\n blendWeights += state.internalWeight;\n });\n\n return blendWeights;\n }\n /**\n * Returns the weight of a state controlled by the container.\n *\n * @param {string} name - Name of the state to return the weight from.\n *\n * @returns {number} - Weight of the state.\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot get weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n return state.weight;\n }\n /**\n * Sets the weight of a state controlled by the container.\n *\n * @param {string} name - Name of the state to set the weight of.\n * @param {number} weight - Weight value to set on the state.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, weight) {\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n // Make sure the name is valid\n var state = this.getState(name);\n\n if (state === undefined) {\n throw new Error("Cannot set weight of state ".concat(name, " from BlendState ").concat(this.name, ". No state exists with this name."));\n }\n\n weight = core_MathUtils.clamp(weight);\n return state.setWeight(weight, seconds, easingFn);\n }\n /**\n * Multiplies the weight of each sub-state by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this2 = this;\n\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(_this2._internalWeight);\n });\n }\n /**\n * Update any values of the sub-states that need to be evaluated every frame.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "update", this).call(this, deltaTime);\n\n this._states.forEach(function (state) {\n state.update(deltaTime);\n });\n }\n /**\n * Start playback of the sub-states from the beginning.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "play", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.play());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\n * Pause playback of the sub-states. This prevents pending promises from being executed.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._states.forEach(function (state) {\n state.pause();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "pause", this).call(this);\n }\n /**\n * Resume playback of the sub-states.\n *\n * @param {Function=} onFinish - Function to execute when the state finishes.\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n * @param {Function=} onCancel - Function to execute if playback is canceled.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n var promises = [AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "resume", this).call(this)];\n\n this._states.forEach(function (state) {\n promises.push(state.resume());\n });\n\n return core_Deferred.all(promises, onFinish, onError, onCancel);\n }\n /**\n * Cancel playback of the sub-states and cancel any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n this._states.forEach(function (state) {\n state.cancel();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "cancel", this).call(this);\n }\n /**\n * Stop playback of the sub-states and resolve any pending promises.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "stop",\n value: function stop() {\n this._states.forEach(function (state) {\n state.stop();\n });\n\n return AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "stop", this).call(this);\n }\n /**\n * Discards all sub-state resources.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AbstractBlendState_get(AbstractBlendState_getPrototypeOf(AbstractBlendState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return AbstractBlendState;\n}(state_StateContainerInterface.Mixin(state_AbstractState));\n\n/* harmony default export */ var state_AbstractBlendState = (AbstractBlendState_AbstractBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/FreeBlendState.js\nfunction FreeBlendState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FreeBlendState_typeof = function _typeof(obj) { return typeof obj; }; } else { FreeBlendState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FreeBlendState_typeof(obj); }\n\nfunction FreeBlendState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction FreeBlendState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction FreeBlendState_createClass(Constructor, protoProps, staticProps) { if (protoProps) FreeBlendState_defineProperties(Constructor.prototype, protoProps); if (staticProps) FreeBlendState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction FreeBlendState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { FreeBlendState_get = Reflect.get; } else { FreeBlendState_get = function _get(target, property, receiver) { var base = FreeBlendState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return FreeBlendState_get(target, property, receiver || target); }\n\nfunction FreeBlendState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = FreeBlendState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction FreeBlendState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) FreeBlendState_setPrototypeOf(subClass, superClass); }\n\nfunction FreeBlendState_setPrototypeOf(o, p) { FreeBlendState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return FreeBlendState_setPrototypeOf(o, p); }\n\nfunction FreeBlendState_createSuper(Derived) { var hasNativeReflectConstruct = FreeBlendState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = FreeBlendState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = FreeBlendState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return FreeBlendState_possibleConstructorReturn(this, result); }; }\n\nfunction FreeBlendState_possibleConstructorReturn(self, call) { if (call && (FreeBlendState_typeof(call) === "object" || typeof call === "function")) { return call; } return FreeBlendState_assertThisInitialized(self); }\n\nfunction FreeBlendState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction FreeBlendState_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; } }\n\nfunction FreeBlendState_getPrototypeOf(o) { FreeBlendState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return FreeBlendState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * Class for blending N number of blend states.\n *\n * @extends AbstractBlendState\n */\n\nvar FreeBlendState = /*#__PURE__*/function (_AbstractBlendState) {\n FreeBlendState_inherits(FreeBlendState, _AbstractBlendState);\n\n var _super = FreeBlendState_createSuper(FreeBlendState);\n\n /**\n * @constructor\n *\n * @param {Object} [options={}] - Options for the container state.\n * @param {Array.} [blendStates=[]] - Blend states to be controlled by\n * this container.\n */\n function FreeBlendState() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n FreeBlendState_classCallCheck(this, FreeBlendState);\n\n return _super.call(this, options, blendStates);\n }\n\n FreeBlendState_createClass(FreeBlendState, [{\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this = this;\n\n FreeBlendState_get(FreeBlendState_getPrototypeOf(FreeBlendState.prototype), "updateInternalWeight", this).call(this, factor); // Determine the total active weight of blend states\n\n\n var sumWeights = 0;\n\n this._states.forEach(function (state) {\n sumWeights += state.weight;\n }); // Ensure the sum of blend state internal weights does not exceed container internal weight\n\n\n factor /= Math.max(sumWeights, 1); // Sum of blend state internal weights should not exceed container internal weight\n\n this._states.forEach(function (state) {\n state.updateInternalWeight(factor * _this._weight);\n });\n }\n }]);\n\n return FreeBlendState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_FreeBlendState = (FreeBlendState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend1dState.js\nfunction Blend1dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend1dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend1dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend1dState_typeof(obj); }\n\nfunction Blend1dState_toConsumableArray(arr) { return Blend1dState_arrayWithoutHoles(arr) || Blend1dState_iterableToArray(arr) || Blend1dState_unsupportedIterableToArray(arr) || Blend1dState_nonIterableSpread(); }\n\nfunction Blend1dState_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction Blend1dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend1dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend1dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend1dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend1dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend1dState_arrayLikeToArray(arr); }\n\nfunction Blend1dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend1dState_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; }\n\nfunction Blend1dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend1dState_ownKeys(Object(source), true).forEach(function (key) { Blend1dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend1dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend1dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend1dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend1dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend1dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend1dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend1dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend1dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend1dState_get = Reflect.get; } else { Blend1dState_get = function _get(target, property, receiver) { var base = Blend1dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend1dState_get(target, property, receiver || target); }\n\nfunction Blend1dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend1dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend1dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend1dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend1dState_setPrototypeOf(o, p) { Blend1dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend1dState_setPrototypeOf(o, p); }\n\nfunction Blend1dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend1dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend1dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend1dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend1dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend1dState_possibleConstructorReturn(self, call) { if (call && (Blend1dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend1dState_assertThisInitialized(self); }\n\nfunction Blend1dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend1dState_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; } }\n\nfunction Blend1dState_getPrototypeOf(o) { Blend1dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend1dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\n * Class for blending N number of blend states based on a single\n * parameter.\n *\n * @extends AbstractBlendState\n */\n\nvar Blend1dState_Blend1dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend1dState_inherits(Blend1dState, _AbstractBlendState);\n\n var _super = Blend1dState_createSuper(Blend1dState);\n\n /**\n * @constructor\n *\n * @param {Object} [options] - Options for the container state\n * @param {Array.} [blendStates=[]] - Blend states to be\n * controlled by this container.\n * @param {Array.} [blendThresholds=[]] - Threshold values for activating\n * each blend state.\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\n * each blend state should be phase matched.\n */\n function Blend1dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend1dState_classCallCheck(this, Blend1dState);\n\n _this = _super.call(this, options, blendStates);\n _this._blendValue = 0;\n _this._promises = Blend1dState_objectSpread(Blend1dState_objectSpread({}, _this._promises), {}, {\n blendValue: core_Deferred.resolve()\n }); // Validate there are no duplicate thresholds\n\n var nonZeroDifferentSize = blendStates.length !== 0 && blendStates.length !== blendThresholds.length;\n\n if (nonZeroDifferentSize) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds count does not match blendStates count."));\n }\n\n var containsDuplicates = new Set(blendThresholds).size !== blendThresholds.length;\n\n if (containsDuplicates) {\n throw new Error("Cannot create Blend1dState with blendThresholds ".concat(blendThresholds, ". BlendThresholds contains duplicate values"));\n } // Initialize the thresholds map\n\n\n _this._thresholds = [];\n\n Blend1dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n value: blendThresholds[index],\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._sortThresholds();\n\n _this._forceNoThresholdDupes = true;\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\n * Gets and sets the blend parameter value.\n */\n\n\n Blend1dState_createClass(Blend1dState, [{\n key: "blendValue",\n get: function get() {\n return this._blendValue;\n },\n set: function set(value) {\n this._blendValue = value;\n }\n /**\n * Gets whether or not the blend value is currently being animated.\n */\n\n }, {\n key: "blendValuePending",\n get: function get() {\n return this._promises.blendValue && this._promises.blendValue.pending;\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {null} name - Unused parameter.\n * @param {number} weight - The target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target weight.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n\n this._promises.blendValue.cancel();\n\n this._promises.blendValue = animpack_AnimationUtils.interpolateProperty(this, \'blendValue\', value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises.blendValue;\n }\n /**\n * Gets the user defined weight.\n *\n * @returns {number}\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight() {\n return this.blendValue;\n }\n }, {\n key: "addState",\n value: function addState(state) {\n var thresholdValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var phaseMatch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n this._thresholds = this._thresholds || []; // Make sure there is not already a state with this threshold\n\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === thresholdValue;\n });\n\n if (this._forceNoThresholdDupes && sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(thresholdValue, " for state ").concat(state.name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "addState", this).call(this, state);\n\n this._thresholds.push({\n value: thresholdValue,\n name: state.name,\n phaseMatch: phaseMatch || false\n });\n\n this._sortThresholds();\n\n return state.name;\n }\n }, {\n key: "removeState",\n value: function removeState(name) {\n var removed = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "removeState", this).call(this, name);\n\n if (removed) {\n var index = this._thresholds.findIndex(function (threshold) {\n return threshold.name === name;\n });\n\n this._thresholds.splice(index, 1);\n }\n\n return removed;\n }\n }, {\n key: "renameState",\n value: function renameState(currentName, newName) {\n newName = Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "renameState", this).call(this, currentName, newName);\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === currentName;\n });\n\n threshold.name = newName;\n return newName;\n }\n /**\n * Gets the threshold value of a blend with the corresponding name.\n *\n * @param {string} name - Name of the blend to get the threshold of.\n *\n * @returns {number} Threhold value.\n */\n\n }, {\n key: "getBlendThreshold",\n value: function getBlendThreshold(name) {\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot get blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n return threshold.value;\n }\n /**\n * Sets the threshold value of a blend with the corresponding name.\n *\n * @param {string} name - Name of the blend to set the threshold.\n * @param {number} value - Value of the threshold to set.\n *\n * @returns {number} Set threshold value.\n */\n\n }, {\n key: "setBlendThreshold",\n value: function setBlendThreshold(name, value) {\n // Make sure there is not already a state with this threshold\n var sameValue = this._thresholds.find(function (threshold) {\n return threshold.value === value;\n });\n\n if (sameValue !== undefined) {\n throw new Error("Cannot set blend threshold of ".concat(value, " for state ").concat(name, " on ").concat(this.name, ". A state already exists with that threshold."));\n }\n\n var threshold = this._thresholds.find(function (threshold) {\n return threshold.name === name;\n });\n\n if (threshold === undefined) {\n throw new Error("Cannot set blend threshold of state ".concat(name, " on ").concat(this.name, ". No state exists with that name."));\n }\n\n threshold.value = value;\n\n this._sortThresholds();\n\n return threshold.value;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend1dState_get(Blend1dState_getPrototypeOf(Blend1dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n this._states.forEach(function (state) {\n if (state.weight !== 0) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\n * Updates the blend weights based on their corresponding threshold values\n * and the current blendValue. Additionally, sets a lead phase state if the\n * conditions for phase-matching have been satisfied.\n *\n * @private\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (this._thresholds.length === 0) return;\n\n if (this._thresholds.length === 1) {\n var state = this._states.get(this._thresholds[0].name);\n\n state.setWeight(1);\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null; // Find the first threshold that is greater than or equal to the parameter value\n\n var targetIndex = this._thresholds.findIndex(function (threshold) {\n return threshold.value >= _this4._blendValue;\n });\n\n if (targetIndex === 0 || targetIndex === -1) {\n // Give one state full influence\n targetIndex = targetIndex === -1 ? this._thresholds.length - 1 : 0;\n\n var _state = this._states.get(this._thresholds[targetIndex].name);\n\n _state.setWeight(1);\n } else {\n // Linear interpolate influence between two states\n var thresholdA = this._thresholds[targetIndex - 1];\n var thresholdB = this._thresholds[targetIndex];\n var factorB = (this.blendValue - thresholdA.value) / (thresholdB.value - thresholdA.value);\n var factorA = 1 - factorB;\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(factorA);\n stateB.setWeight(factorB); // Set phase-matching if needed\n\n if (thresholdA.phaseMatch && thresholdB.phaseMatch) {\n this._phaseLeadState = factorA > factorB ? stateA : stateB;\n }\n }\n }\n /**\n * Sorts the thresholds from low to high based on value.\n *\n * @private\n */\n\n }, {\n key: "_sortThresholds",\n value: function _sortThresholds() {\n this._thresholds.sort(function (a, b) {\n return a.value - b.value;\n });\n }\n }]);\n\n return Blend1dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend1dState = (Blend1dState_Blend1dState);\n// CONCATENATED MODULE: ./src/core/animpack/state/Blend2dState.js\nfunction Blend2dState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Blend2dState_typeof = function _typeof(obj) { return typeof obj; }; } else { Blend2dState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Blend2dState_typeof(obj); }\n\nfunction Blend2dState_toConsumableArray(arr) { return Blend2dState_arrayWithoutHoles(arr) || Blend2dState_iterableToArray(arr) || Blend2dState_unsupportedIterableToArray(arr) || Blend2dState_nonIterableSpread(); }\n\nfunction Blend2dState_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction Blend2dState_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Blend2dState_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return Blend2dState_arrayLikeToArray(o, minLen); }\n\nfunction Blend2dState_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction Blend2dState_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return Blend2dState_arrayLikeToArray(arr); }\n\nfunction Blend2dState_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction Blend2dState_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; }\n\nfunction Blend2dState_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { Blend2dState_ownKeys(Object(source), true).forEach(function (key) { Blend2dState_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { Blend2dState_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction Blend2dState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction Blend2dState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Blend2dState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Blend2dState_createClass(Constructor, protoProps, staticProps) { if (protoProps) Blend2dState_defineProperties(Constructor.prototype, protoProps); if (staticProps) Blend2dState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Blend2dState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Blend2dState_get = Reflect.get; } else { Blend2dState_get = function _get(target, property, receiver) { var base = Blend2dState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Blend2dState_get(target, property, receiver || target); }\n\nfunction Blend2dState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Blend2dState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Blend2dState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Blend2dState_setPrototypeOf(subClass, superClass); }\n\nfunction Blend2dState_setPrototypeOf(o, p) { Blend2dState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Blend2dState_setPrototypeOf(o, p); }\n\nfunction Blend2dState_createSuper(Derived) { var hasNativeReflectConstruct = Blend2dState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Blend2dState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Blend2dState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Blend2dState_possibleConstructorReturn(this, result); }; }\n\nfunction Blend2dState_possibleConstructorReturn(self, call) { if (call && (Blend2dState_typeof(call) === "object" || typeof call === "function")) { return call; } return Blend2dState_assertThisInitialized(self); }\n\nfunction Blend2dState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Blend2dState_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; } }\n\nfunction Blend2dState_getPrototypeOf(o) { Blend2dState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Blend2dState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n\n\n\n/**\n * Class for blending N number of blend states based on two\n * paramters.\n *\n * @extends AbstractBlendState\n */\n\nvar Blend2dState_Blend2dState = /*#__PURE__*/function (_AbstractBlendState) {\n Blend2dState_inherits(Blend2dState, _AbstractBlendState);\n\n var _super = Blend2dState_createSuper(Blend2dState);\n\n /**\n * @constructor\n *\n * @param {Object} [options] - Options for the container state\n * @param {Array.} [blendStates=[]] - Blend states to be\n * controlled by this container.\n * @param {Array.>} [blendThresholds=[]] - Threshold values for activating\n * each blend state.\n * @param {Array.} [phaseMatches=[]] - Booleans indicating whether or not\n * each blend state should be phase matched.\n */\n function Blend2dState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var blendStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var blendThresholds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var phaseMatches = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];\n\n Blend2dState_classCallCheck(this, Blend2dState);\n\n _this = _super.call(this, options, blendStates);\n\n if (blendStates.length !== blendThresholds.length) {\n throw new Error("Cannot create Blend2dState with blendStates ".concat(blendStates, " and blendThresholds ").concat(blendThresholds, ". Count of blendStates must match count of blendThresholds."));\n }\n\n blendThresholds.slice(0, blendThresholds.length - 1).forEach(function (threshold, index) {\n blendThresholds.slice(index + 1).forEach(function (otherThreshold) {\n if (threshold[0] === otherThreshold[0] && threshold[1] === otherThreshold[1]) {\n throw new Error("Cannot create Blend2dState with blendThresholds ".concat(blendThresholds, ". No duplicate values allowed in blendThresholds."));\n }\n });\n });\n _this._blendValueX = 0;\n _this._blendValueY = 0;\n _this._promises = Blend2dState_objectSpread(Blend2dState_objectSpread({}, _this._promises), {}, {\n blendValueX: core_Deferred.resolve(),\n blendValueY: core_Deferred.resolve()\n });\n _this._thresholds = [];\n\n Blend2dState_toConsumableArray(_this._states.values()).forEach(function (state, index) {\n _this._thresholds.push({\n name: state.name,\n phaseMatch: phaseMatches[index] || false\n });\n });\n\n _this._vertices = blendThresholds;\n\n if (_this._vertices.length >= 3) {\n _this._triangles = core_MathUtils.getDelaunayTriangulation(_this._vertices);\n }\n\n _this._phaseLeadState = null;\n\n _this._updateBlendWeights();\n\n return _this;\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {string} name - Name of blend weight to update.\n * @param {number} weight - Target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target value.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n\n Blend2dState_createClass(Blend2dState, [{\n key: "setBlendWeight",\n value: function setBlendWeight(name, value) {\n var _this2 = this;\n\n var seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easingFn = arguments.length > 3 ? arguments[3] : undefined;\n var property = "blendValue".concat(name.toUpperCase());\n\n if (property !== \'blendValueX\' && property !== \'blendValueY\') {\n throw new Error("Cannot set blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for setBlendWeight"));\n }\n\n this._promises[property].cancel();\n\n this._promises[property] = animpack_AnimationUtils.interpolateProperty(this, property, value, {\n seconds: seconds,\n easingFn: easingFn,\n onProgress: function onProgress() {\n _this2._updateBlendWeights();\n },\n onFinish: function onFinish() {\n _this2._updateBlendWeights();\n }\n });\n return this._promises[property];\n }\n /**\n * Gets the user defined weight.\n *\n * @param {string} name - Name of blend weight.\n *\n * @returns {number}\n */\n\n }, {\n key: "getBlendWeight",\n value: function getBlendWeight(name) {\n var property = name.toUpperCase();\n\n if (property !== \'X\' && property !== \'Y\') {\n throw new Error("Cannot get blend weight for ".concat(name, " on ").concat(this.name, ". Blend2dState only accepts \'X\' or \'Y\' for getBlendWeight"));\n }\n\n return property === \'X\' ? this._blendValueX : this._blendValueY;\n }\n /**\n * Gets and sets the x blend weight.\n */\n\n }, {\n key: "blendValueX",\n get: function get() {\n return this._blendValueX;\n },\n set: function set(value) {\n this._blendValueX = value;\n }\n /**\n * Gets and sets the y blend weight.\n */\n\n }, {\n key: "blendValueY",\n get: function get() {\n return this._blendValueY;\n },\n set: function set(value) {\n this._blendValueY = value;\n }\n /**\n * Gets whether or not the x blend value is currently being animated.\n */\n\n }, {\n key: "blendValueXPending",\n get: function get() {\n return this._promises.blendValueX && this._promises.blendValueX.pending;\n }\n /**\n * Gets whether or not the y blend value is currently being animated.\n */\n\n }, {\n key: "blendValueYPending",\n get: function get() {\n return this._promises.blendValueY && this._promises.blendValueY.pending;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n var _this3 = this;\n\n Blend2dState_get(Blend2dState_getPrototypeOf(Blend2dState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._phaseLeadState) {\n Blend2dState_toConsumableArray(this._states.values()).forEach(function (state, index) {\n if (state.weight !== 0 && _this3._thresholds[index].phaseMatch) {\n state.normalizedTime = _this3._phaseLeadState.normalizedTime;\n }\n });\n }\n }\n /**\n * Updates the blend weights based on their corresponding threshold values\n * and the current [x,y] blendValue. Additionally, sets a lead phase state if the\n * conditions for phase-matching have been satisfied.\n *\n * @private\n */\n\n }, {\n key: "_updateBlendWeights",\n value: function _updateBlendWeights() {\n var _this4 = this;\n\n if (!this._vertices || this._vertices.length === 0) return;\n\n if (this._vertices.length === 1) {\n Blend2dState_toConsumableArray(this._states.values())[0].weight = 1;\n return;\n } // Initially set all sub-state weights to zero\n\n\n this._states.forEach(function (state) {\n state.setWeight(0);\n });\n\n this._phaseLeadState = null;\n var p = [this._blendValueX, this._blendValueY];\n\n if (this._vertices.length === 2) {\n this._setInfluenceClosestPointOnLine(p);\n } else {\n var triangle = this._triangles.find(function (triangle) {\n return core_MathUtils.isPointInTriangle(_this4._vertices[triangle[0]], _this4._vertices[triangle[1]], _this4._vertices[triangle[2]], p);\n });\n\n if (triangle) {\n this._setInfluenceTriangle(triangle, p);\n } else {\n this._setInfluenceClosestPointInTriangles(p);\n }\n }\n }\n /**\n * Sets blend weights for states corresponding to a\n * triangle of thresholds and a given [x,y] blendValues.\n *\n * @param {Array.>} triangle - Set of triangluated indices\n * that correspond to blend thresholds.\n * @param {Array.} p - Given [x,y] blendValue.\n *\n * @private\n */\n\n }, {\n key: "_setInfluenceTriangle",\n value: function _setInfluenceTriangle(triangle, p) {\n var areaA = core_MathUtils.triangleArea(this._vertices[triangle[1]], this._vertices[triangle[2]], p);\n var areaB = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[2]], p);\n var areaC = core_MathUtils.triangleArea(this._vertices[triangle[0]], this._vertices[triangle[1]], p);\n var totalArea = areaA + areaB + areaC;\n var weightA = areaA / totalArea;\n var weightB = areaB / totalArea;\n var weightC = areaC / totalArea;\n var thresholdA = this._thresholds[triangle[0]];\n var thresholdB = this._thresholds[triangle[1]];\n var thresholdC = this._thresholds[triangle[2]];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n var stateC = this._states.get(thresholdC.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n stateC.setWeight(weightC);\n\n this._setPhaseLeadState([stateA, stateB, stateC], [thresholdA.phaseMatch, thresholdB.phaseMatch, thresholdC.phaseMatch]);\n }\n /**\n * Determines the closest point within a triangle of\n * thresholds based on the current [x,y] blendValues and\n * then sets blend weights for the corresponding states.\n *\n * @param {Array.} p - Given [x,y] blendValue.\n *\n * @private\n */\n\n }, {\n key: "_setInfluenceClosestPointInTriangles",\n value: function _setInfluenceClosestPointInTriangles(p) {\n var _this5 = this;\n\n var globalClosestPoint = null;\n var globalMinDist = Number.POSITIVE_INFINITY;\n var closestTriangle = -1;\n\n this._triangles.forEach(function (triangle, index) {\n var pointA = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[0]], _this5._vertices[triangle[1]], p);\n var pointB = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[1]], _this5._vertices[triangle[2]], p);\n var pointC = core_MathUtils.closestPointOnLine(_this5._vertices[triangle[2]], _this5._vertices[triangle[0]], p);\n var distA = core_MathUtils.distanceSquared(pointA, p);\n var distB = core_MathUtils.distanceSquared(pointB, p);\n var distC = core_MathUtils.distanceSquared(pointC, p);\n var localClosestPoint = pointC;\n var localMinDist = distC;\n\n if (distA < localMinDist) {\n localClosestPoint = pointA;\n localMinDist = distA;\n }\n\n if (distB < localMinDist) {\n localClosestPoint = pointB;\n localMinDist = distB;\n }\n\n if (localMinDist < globalMinDist) {\n globalMinDist = localMinDist;\n globalClosestPoint = Blend2dState_toConsumableArray(localClosestPoint);\n closestTriangle = index;\n }\n });\n\n this._setInfluenceTriangle(this._triangles[closestTriangle], globalClosestPoint);\n }\n /**\n * Determines the closest point on the line formed between the\n * two blend thresholds based on the current [x,y] blendValues and\n * then sets blend weights for the corresponding states.\n *\n * @param {Array.} p - Given [x,y] blendValue.\n *\n * @private\n */\n\n }, {\n key: "_setInfluenceClosestPointOnLine",\n value: function _setInfluenceClosestPointOnLine(p) {\n var closestPoint = core_MathUtils.closestPointOnLine(this._vertices[[0]], this._vertices[[1]], p);\n var distA = core_MathUtils.distanceSquared(this._vertices[0], closestPoint);\n var distB = core_MathUtils.distanceSquared(this._vertices[1], closestPoint);\n var weightA = distB / (distA + distB);\n var weightB = distA / (distA + distB);\n var thresholdA = this._thresholds[0];\n var thresholdB = this._thresholds[1];\n\n var stateA = this._states.get(thresholdA.name);\n\n var stateB = this._states.get(thresholdB.name);\n\n stateA.setWeight(weightA);\n stateB.setWeight(weightB);\n\n this._setPhaseLeadState([stateA, stateB], [thresholdA.phaseMatch, thresholdB.phaseMatch]);\n }\n /**\n * Sets a lead phase state if the conditions\n * for phase-matching are satisfied.\n *\n * @param {Array.} states - States to\n * check phase-matching criteria.\n * @param {Array.} phaseMatched - List of phase-match booleans.\n *\n * @private\n */\n\n }, {\n key: "_setPhaseLeadState",\n value: function _setPhaseLeadState(states, phaseMatched) {\n var _this6 = this;\n\n var max = 0;\n states.forEach(function (state, index) {\n if (phaseMatched[index] && state.weight > max) {\n _this6._phaseLeadState = state;\n max = state.weight;\n }\n });\n }\n }]);\n\n return Blend2dState;\n}(state_AbstractBlendState);\n\n/* harmony default export */ var state_Blend2dState = (Blend2dState_Blend2dState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationLayer.js\nfunction AnimationLayer_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationLayer_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationLayer_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationLayer_typeof(obj); }\n\nfunction AnimationLayer_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationLayer_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationLayer_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationLayer_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationLayer_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationLayer_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationLayer_get = Reflect.get; } else { AnimationLayer_get = function _get(target, property, receiver) { var base = AnimationLayer_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationLayer_get(target, property, receiver || target); }\n\nfunction AnimationLayer_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationLayer_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationLayer_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationLayer_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationLayer_setPrototypeOf(o, p) { AnimationLayer_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationLayer_setPrototypeOf(o, p); }\n\nfunction AnimationLayer_createSuper(Derived) { var hasNativeReflectConstruct = AnimationLayer_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationLayer_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationLayer_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationLayer_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationLayer_possibleConstructorReturn(self, call) { if (call && (AnimationLayer_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationLayer_assertThisInitialized(self); }\n\nfunction AnimationLayer_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationLayer_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; } }\n\nfunction AnimationLayer_getPrototypeOf(o) { AnimationLayer_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationLayer_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\n * Enum for types of {@link AnimationLayer} blending.\n *\n * @readonly\n * @enum {string}\n */\n\nvar LayerBlendModes = {\n Override: \'Override\',\n Additive: \'Additive\'\n};\n/**\n * The default blending mode {@link AnimationLayer}.\n *\n * @readonly\n * @type {string}\n */\n\nvar DefaultLayerBlendMode = \'Override\';\n/**\n * Checks if a given blendMode is present in the values of {@link LayerBlendModes}.\n * If it is, return the original value, otherwise return {@link DefaultLayerBlendMode}.\n *\n * @param {string} blendMode - The name of the type of blending.\n *\n * @returns {(string|DefaultLayerBlendMode)}\n */\n\nfunction validateBlendMode(blendMode) {\n if (Array.from(Object.values(LayerBlendModes)).includes(blendMode)) {\n return blendMode;\n } else {\n return DefaultLayerBlendMode;\n }\n}\n/**\n * Class for managing a set of animations where only one state can be active at\n * any given time.\n *\n * @implements AnimationPlayerInterface\n * @implements StateContainerInterface\n */\n\nvar AnimationLayer_AnimationLayer = /*#__PURE__*/function (_AnimationPlayerInter) {\n AnimationLayer_inherits(AnimationLayer, _AnimationPlayerInter);\n\n var _super = AnimationLayer_createSuper(AnimationLayer);\n\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation layer.\n * @param {string} options.name - Name of the layer. Names must be unique to the\n * animation feature that contains the layer.\n * @param {LayerBlendModes} [options.blendMode=DefaultLayerBlendMode] -\n * Type of blending to use for all states controlled by the layer.\n * @param {number} [options.weight=1] - The amount of influence the layer\'s current\n * animation has over the result for the host.\n * @param {number} [options.transitionTime=0] - The default amount of time to use when\n * playing and resuming animations.\n * @param {Function=} options.easingFn - The default easing function to use when\n * transitioning between animations and setting layer weight.\n */\n function AnimationLayer() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n AnimationLayer_classCallCheck(this, AnimationLayer);\n\n _this = _super.call(this, options);\n _this.name = options.name === undefined ? \'AnimationLayer\' : options.name;\n _this._blendMode = Array.from(Object.values(LayerBlendModes)).includes(options.blendMode) ? options.blendMode : DefaultLayerBlendMode;\n _this._promises = {\n weight: core_Deferred.resolve()\n };\n _this._weightPaused = false;\n _this.weight = typeof options.weight === \'number\' ? options.weight : 1;\n _this._internalWeight = _this._weight;\n return _this;\n }\n /**\n * Gets the type of blending used for states controlled by the layer.\n *\n * @readonly\n * @type {string}\n */\n\n\n AnimationLayer_createClass(AnimationLayer, [{\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n /**\n * Gets and sets the amount of influence the layer\'s current animation has over\n * the result for the host.\n *\n * @type {number}\n */\n\n }, {\n key: "weight",\n get: function get() {\n return this._weight;\n }\n /**\n * Gets whether or not the layer\'s weight value is currently being animated.\n *\n * @readonly\n * @type {boolean}\n */\n ,\n set: function set(weight) {\n this._weight = core_MathUtils.clamp(weight, 0, 1);\n }\n }, {\n key: "weightPending",\n get: function get() {\n return this._promises.weight && this._promises.weight.pending;\n }\n /**\n * Pause the current animation state and any interpolation happening on the layer\'s\n * weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n this._weightPaused = true;\n return this.pauseAnimation() || this.weightPending;\n }\n /**\n * Resume the current animation state and any interpolation happening on the layer\'s\n * weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n this._weightPaused = false;\n var isWeightActive = this.weightPending;\n\n if (this._currentState) {\n return this.resumeAnimation() || isWeightActive;\n } else {\n return isWeightActive;\n }\n }\n /**\n * Updates the user defined weight over time.\n *\n * @param {number} weight - The target weight value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target weight.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setWeight",\n value: function setWeight(weight) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.weightPending) {\n this._promises.weight.cancel();\n }\n\n weight = core_MathUtils.clamp(weight);\n this._promises.weight = animpack_AnimationUtils.interpolateProperty(this, \'weight\', weight, {\n seconds: seconds,\n easingFn: easingFn !== undefined ? easingFn : this._easingFn\n });\n return this._promises.weight;\n }\n /**\n * Pause any interpolation happening on the layer\'s weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "pauseWeight",\n value: function pauseWeight() {\n this._weightPaused = true;\n return this.weightPending;\n }\n /**\n * Resume any interpolation happening on the layer\'s weight property.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "resumeWeight",\n value: function resumeWeight() {\n this._weightPaused = false;\n return this.weightPending;\n }\n /**\n * Multiplies the user weight by a factor to determine the internal weight.\n *\n * @param {number} factor - 0-1 multiplier to apply to the user weight.\n */\n\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n this._internalWeight = this._weight * factor;\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\n * Returns the names of blend states in an animation.\n *\n * @param {string} animationName - Name of the animation.\n *\n * @returns {Array.} - Names of blend states.\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(animationName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getStateNames();\n }\n\n throw new Error("Cannot get blend names of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\n * Update the weight for a blend state of an animation.\n *\n * @param {string} animationName - Name of the animation containing the blend state\n * to update.\n * @param {string} blendName - Name of the blend state to update.\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\n * in the 0-1 range.\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\n * Default is zero and will set immediately.\n * @param {Function=} easingFn - Easing function to use while interpolating the new\n * weight. Default is Easing.Linear.InOut.\n *\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\n * the target value.\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(animationName, blendName, weight) {\n var seconds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var easingFn = arguments.length > 4 ? arguments[4] : undefined;\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.setBlendWeight(blendName, weight, seconds, easingFn);\n }\n\n throw new Error("Cannot set blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\n * Returns the weight for a blend state of an animation.\n *\n * @param {string} animationName - Name of the animation containing the blend state\n * to update.\n * @param {string} blendName - Name of the blend state to retrieve the weight of.\n *\n * @returns {number} - Weight of the blend state.\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(animationName, blendName) {\n var state = this.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". No animation exists with this name."));\n }\n\n if (state instanceof state_AbstractBlendState) {\n return state.getBlendWeight(blendName);\n }\n\n throw new Error("Cannot get blend weight of animation ".concat(animationName, " on layer ").concat(this.name, ". Animation is not an instance of AbstractBlendState."));\n }\n /**\n * Update any weight interpolators and the current animation.\n *\n * @param {number} deltaTime - Time in milliseconds since the last update.\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "update", this).call(this, deltaTime);\n\n if (!this._paused && !this._weightPaused) {\n this._promises.weight.execute(deltaTime);\n }\n }\n /**\n * Cancel any pending promises and discard states controlled by the layer.\n */\n\n }, {\n key: "discard",\n value: function discard() {\n AnimationLayer_get(AnimationLayer_getPrototypeOf(AnimationLayer.prototype), "discard", this).call(this);\n\n this.discardStates();\n\n this._promises.weight.cancel();\n\n delete this._promises;\n }\n }]);\n\n return AnimationLayer;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin()));\n\n/* harmony default export */ var animpack_AnimationLayer = (AnimationLayer_AnimationLayer);\n// CONCATENATED MODULE: ./src/core/animpack/state/SingleState.js\nfunction SingleState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { SingleState_typeof = function _typeof(obj) { return typeof obj; }; } else { SingleState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return SingleState_typeof(obj); }\n\nfunction SingleState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction SingleState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction SingleState_createClass(Constructor, protoProps, staticProps) { if (protoProps) SingleState_defineProperties(Constructor.prototype, protoProps); if (staticProps) SingleState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SingleState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) SingleState_setPrototypeOf(subClass, superClass); }\n\nfunction SingleState_setPrototypeOf(o, p) { SingleState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return SingleState_setPrototypeOf(o, p); }\n\nfunction SingleState_createSuper(Derived) { var hasNativeReflectConstruct = SingleState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = SingleState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = SingleState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return SingleState_possibleConstructorReturn(this, result); }; }\n\nfunction SingleState_possibleConstructorReturn(self, call) { if (call && (SingleState_typeof(call) === "object" || typeof call === "function")) { return call; } return SingleState_assertThisInitialized(self); }\n\nfunction SingleState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction SingleState_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; } }\n\nfunction SingleState_getPrototypeOf(o) { SingleState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return SingleState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\n * Class for playing a single animation clip.\n *\n * @extends AbstractState\n * @alias core/SingleState\n */\n\nvar SingleState_SingleState = /*#__PURE__*/function (_AbstractState) {\n SingleState_inherits(SingleState, _AbstractState);\n\n var _super = SingleState_createSuper(SingleState);\n\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation state.\n * @param {string=} options.name - Name for the animation state. Names must be\n * unique for the layer the state is applied to.\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\n * animation.\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\n * repeat before finishing.\n * @param {string} [options.blendMode=DefaultLayerBlendMode] - Type of\n * blending the animation should use.\n */\n function SingleState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n SingleState_classCallCheck(this, SingleState);\n\n _this = _super.call(this, options);\n _this._timeScale = options.timeScale !== undefined ? options.timeScale : 1;\n _this._promises.timeScale = core_Deferred.resolve();\n _this._loopCount = options.loopCount !== undefined ? options.loopCount : Infinity;\n _this._blendMode = validateBlendMode(options.blendMode);\n return _this;\n }\n /**\n * Gets and sets the normalized playing time of the current animation\n *\n * @type {number}\n */\n\n\n SingleState_createClass(SingleState, [{\n key: "normalizedTime",\n get: function get() {\n return 0;\n },\n set: function set(time) {}\n /**\n * Gets and sets the a factor to scale animation playback speed with.\n *\n * @type {number}\n */\n\n }, {\n key: "timeScale",\n get: function get() {\n return this._timeScale;\n },\n set: function set(timeScale) {\n this._timeScale = timeScale;\n }\n /**\n * Gets whether or not the timeScale is currently being animated.\n *\n * @readonly\n * @type {boolean}\n */\n\n }, {\n key: "timeScalePending",\n get: function get() {\n return this._promises.timeScale.pending;\n }\n /**\n * Updates the timeScale value over time.\n *\n * @param {number} weight - The target timeScale value.\n * @param {number} [seconds=0] - The amount of time it will take to reach the\n * target timeScale.\n * @param {Function=} easingFn - The easing function to use for interpolation.\n *\n * @returns {Deferred}\n */\n\n }, {\n key: "setTimeScale",\n value: function setTimeScale(timeScale) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n this._promises.timeScale.cancel();\n\n this._promises.timeScale = animpack_AnimationUtils.interpolateProperty(this, \'timeScale\', timeScale, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.timeScale;\n }\n /**\n * Gets and sets the number of times the animation will repeat before finishing.\n *\n * @type {number}\n */\n\n }, {\n key: "loopCount",\n get: function get() {\n return this._loopCount;\n },\n set: function set(loopCount) {\n this._loopCount = loopCount;\n }\n /**\n * Gets the type of blending used for the animation.\n *\n * @readonly\n * @type {string}\n */\n\n }, {\n key: "blendMode",\n get: function get() {\n return this._blendMode;\n }\n }]);\n\n return SingleState;\n}(state_AbstractState);\n\n/* harmony default export */ var state_SingleState = (SingleState_SingleState);\n// CONCATENATED MODULE: ./src/core/animpack/state/RandomAnimationState.js\nfunction RandomAnimationState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { RandomAnimationState_typeof = function _typeof(obj) { return typeof obj; }; } else { RandomAnimationState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return RandomAnimationState_typeof(obj); }\n\nfunction RandomAnimationState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction RandomAnimationState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction RandomAnimationState_createClass(Constructor, protoProps, staticProps) { if (protoProps) RandomAnimationState_defineProperties(Constructor.prototype, protoProps); if (staticProps) RandomAnimationState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction RandomAnimationState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { RandomAnimationState_get = Reflect.get; } else { RandomAnimationState_get = function _get(target, property, receiver) { var base = RandomAnimationState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return RandomAnimationState_get(target, property, receiver || target); }\n\nfunction RandomAnimationState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = RandomAnimationState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction RandomAnimationState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) RandomAnimationState_setPrototypeOf(subClass, superClass); }\n\nfunction RandomAnimationState_setPrototypeOf(o, p) { RandomAnimationState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return RandomAnimationState_setPrototypeOf(o, p); }\n\nfunction RandomAnimationState_createSuper(Derived) { var hasNativeReflectConstruct = RandomAnimationState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = RandomAnimationState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = RandomAnimationState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return RandomAnimationState_possibleConstructorReturn(this, result); }; }\n\nfunction RandomAnimationState_possibleConstructorReturn(self, call) { if (call && (RandomAnimationState_typeof(call) === "object" || typeof call === "function")) { return call; } return RandomAnimationState_assertThisInitialized(self); }\n\nfunction RandomAnimationState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction RandomAnimationState_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; } }\n\nfunction RandomAnimationState_getPrototypeOf(o) { RandomAnimationState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return RandomAnimationState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n/**\n * Class for playing random animations at random intervals within this state.\n *\n * @extends AbstractState\n * @implements AnimationPlayerInterface\n * @implements StateContainerInterface\n */\n\nvar RandomAnimationState_RandomAnimationState = /*#__PURE__*/function (_AnimationPlayerInter) {\n RandomAnimationState_inherits(RandomAnimationState, _AnimationPlayerInter);\n\n var _super = RandomAnimationState_createSuper(RandomAnimationState);\n\n /**\n * @constructor\n *\n * @param {Object} [options={}] - Options for the container state.\n * @param {number} [options.playInterval=3] - The base animation playback interval.\n * @param {Array.} [subStates=[]] - states to be randomly picked to play\n */\n function RandomAnimationState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var subStates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n RandomAnimationState_classCallCheck(this, RandomAnimationState);\n\n _this = _super.call(this, options);\n _this._playInterval = options.playInterval ? options.playInterval : 3;\n subStates.forEach(function (state) {\n _this.addState(state);\n });\n return _this;\n }\n /**\n * Gets and sets the base animation play interval\n *\n * @type {float}\n */\n\n\n RandomAnimationState_createClass(RandomAnimationState, [{\n key: "playInterval",\n get: function get() {\n return this._playInterval;\n },\n set: function set(playInterval) {\n this._playInterval = playInterval;\n }\n /**\n * Reset the internal timer for animation play interval\n *\n * @private\n */\n\n }, {\n key: "_resetTimer",\n value: function _resetTimer() {\n var _this2 = this;\n\n var playTimer = core_Utils.getRandomFloat(this._playInterval / 4, this._playInterval * 2);\n\n var onFinish = function onFinish() {\n _this2.playRandomAnimation(_this2._playCallbacks.onError);\n };\n\n this._promises.timer = core_Utils.wait(playTimer, {\n onFinish: onFinish\n });\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "updateInternalWeight", this).call(this, factor);\n\n if (this._currentState) {\n this._currentState.updateInternalWeight(this._internalWeight);\n }\n }\n /**\n * Pick a random animation and utilize AnimationPlayerInterface to play that animation\n *\n * @param {Function=} onError - Function to execute if the state encounters\n * an error during playback.\n */\n\n }, {\n key: "playRandomAnimation",\n value: function playRandomAnimation(onError) {\n this._resetTimer();\n\n var states = this.getStateNames();\n\n if (this._currentState) {\n states.splice(states.indexOf(this._currentState.name), 1);\n }\n\n var randomState = states[core_Utils.getRandomInt(0, states.length)];\n this.playAnimation(randomState, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n this.playRandomAnimation(onError);\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "pause",\n value: function pause() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "pause", this).call(this) && this.pauseAnimation();\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n if (this._currentState) {\n this.resumeAnimation(this._currentState.name, this._transitionTime, this._easingFn, undefined, onError, undefined);\n }\n\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "cancel", this).call(this) && this.cancelAnimation();\n }\n }, {\n key: "stop",\n value: function stop() {\n return RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "stop", this).call(this) && this.stopAnimation();\n }\n }, {\n key: "discard",\n value: function discard() {\n RandomAnimationState_get(RandomAnimationState_getPrototypeOf(RandomAnimationState.prototype), "discard", this).call(this);\n\n this.discardStates();\n }\n }]);\n\n return RandomAnimationState;\n}(animpack_AnimationPlayerInterface.Mixin(state_StateContainerInterface.Mixin(state_AbstractState)));\n\n/* harmony default export */ var state_RandomAnimationState = (RandomAnimationState_RandomAnimationState);\n// CONCATENATED MODULE: ./src/core/animpack/AnimationFeature.js\nfunction AnimationFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AnimationFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AnimationFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AnimationFeature_typeof(obj); }\n\nfunction AnimationFeature_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; }\n\nfunction AnimationFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AnimationFeature_ownKeys(Object(source), true).forEach(function (key) { AnimationFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AnimationFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AnimationFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AnimationFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AnimationFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AnimationFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AnimationFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AnimationFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AnimationFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AnimationFeature_get = Reflect.get; } else { AnimationFeature_get = function _get(target, property, receiver) { var base = AnimationFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AnimationFeature_get(target, property, receiver || target); }\n\nfunction AnimationFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AnimationFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AnimationFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AnimationFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AnimationFeature_setPrototypeOf(o, p) { AnimationFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AnimationFeature_setPrototypeOf(o, p); }\n\nfunction AnimationFeature_createSuper(Derived) { var hasNativeReflectConstruct = AnimationFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AnimationFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AnimationFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AnimationFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AnimationFeature_possibleConstructorReturn(self, call) { if (call && (AnimationFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AnimationFeature_assertThisInitialized(self); }\n\nfunction AnimationFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AnimationFeature_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; } }\n\nfunction AnimationFeature_getPrototypeOf(o) { AnimationFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AnimationFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n\n\n\n\n/**\r\n * Enum for animation state classes.\r\n *\r\n * @readonly\r\n * @enum {Class}\r\n */\n\nvar AnimationTypes = {\n single: state_SingleState,\n freeBlend: state_FreeBlendState,\n queue: state_QueueState,\n randomAnimation: state_RandomAnimationState,\n blend1d: state_Blend1dState,\n blend2d: state_Blend2dState\n};\n/**\r\n * Feature for managing animations on an object.\r\n *\r\n * @extends AbstractHostFeature\r\n * @alias core/AnimationFeature\r\n *\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.addLayer=onAddLayerEvent] - Message that is emitted after\r\n * [addLayer]{@link core/AnimationFeature#addLayer} has been successfully executed.\r\n * An object representing the name of the layer that was added and its index in\r\n * the layer stack with the signature {name: string, index: number} is supplied\r\n * as an argument to listener functions.\r\n * @property {string} [EVENTS.removeLayer=onRemoveLayerEvent] - Message that is\r\n * emitted after [removeLayer]{@link core/AnimationFeature#removeLayer} has been\r\n * successfully executed. An object representing the name of the layer that was\r\n * removed and its index in the layer stack with the signature {name: string, index: number}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.renameLayer=onRenameLayerEvent] - Message that is\r\n * emitted after [renameLayer]{@link core/AnimationFeature#renameLayer} has been\r\n * successfully executed. An object representing the original name of the layer\r\n * that was renamed and its updated name with the signature {oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.addAnimation=onAddAnimationEvent] - Message that is\r\n * emitted after [addAnimation]{@link core/AnimationFeature#addAnimation} has been\r\n * successfully executed. An object representing the name of the layer that the\r\n * animation was added to and the name of the animation that was added with the\r\n * signature {layerName: string, animationName: string} is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.removeAnimation=onRemovedAnimationEvent] - Message\r\n * that is emitted after [removeAnimation]{@link core/AnimationFeature#removeAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that the animation was removed from and the name of the animation that was removed\r\n * with the signature {layerName: string, animationName: string} is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.renameAnimation=onRenameAnimationEvent] - Message\r\n * that is emitted after [renameAnimation]{@link core/AnimationFeature#renameAnimation}\r\n * has been successfully executed. An object representing the name of the layer\r\n * that contains the animation that was renamed, the original name of the animation\r\n * that was renamed and its updated name with the signature {layerName: string, oldName: string, newName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link core/AnimationFeature#playAnimation}. An object representing\r\n * the name of the layer contains the animation that was played and the name of\r\n * the animation that was played with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link core/AnimationFeature#pauseAnimation}. An object representing\r\n * the name of the layer contains the animation that was paused and the name of\r\n * the animation that was paused with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link core/AnimationFeature#resumeAnimation}. An object representing\r\n * the name of the layer contains the animation that was resumed and the name of\r\n * the animation that was resumed with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link core/AnimationFeature#playAnimation}\r\n * or [resume]{@link core/AnimationFeature#resumeAnimation} are executed for a new speech.\r\n * An object representing the name of the layer contains the animation that was\r\n * interrupted and the name of the animation that was interrupted with the signature\r\n * {layerName: string, animationName: string} is supplied as an argument to listener\r\n * functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link core/AnimationFeature#stopAnimation} and when a speech reaches\r\n * the end of playback. An object representing\r\n * the name of the layer contains the animation that was stopped and the name of\r\n * the animation that was stopped with the signature {layerName: string, animationName: string}\r\n * is supplied as an argument to listener functions.\r\n */\n\nvar AnimationFeature_AnimationFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AnimationFeature_inherits(AnimationFeature, _AbstractHostFeature);\n\n var _super = AnimationFeature_createSuper(AnimationFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object that owns the feature.\r\n */\n function AnimationFeature(host) {\n var _this;\n\n AnimationFeature_classCallCheck(this, AnimationFeature);\n\n _this = _super.call(this, host);\n _this._layers = [];\n _this._layerMap = {};\n _this._paused = false;\n return _this;\n }\n /**\r\n * Make sure a supplied layer index is within the range of layers.\r\n *\r\n * @private\r\n *\r\n * @param {number} index\r\n * @param {boolean} [existing=true] - Whether the index represents and existing\r\n * layer or a new layer to be added.\r\n *\r\n * @returns {number=}\r\n */\n\n\n AnimationFeature_createClass(AnimationFeature, [{\n key: "_validateIndex",\n value: function _validateIndex(index) {\n var existing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n // Index is invalid if there are no layers and we\'re checking for an existing layer index\n if (this._layers.length === 0 && existing) {\n return undefined;\n }\n\n var lastIndex = existing ? this._layers.length - 1 : this._layers.length; // Count from the end of the array for negative indices\n\n if (index < 0) {\n index = lastIndex + index + 1;\n }\n\n if (index < 0 || index > lastIndex) {\n return undefined;\n } else {\n return index;\n }\n }\n /**\r\n * Re-evaluate internal weight values of layers starting from the top of the\r\n * stack. Override layers\' weights affect the values of all layers lower in the\r\n * stack.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_updateInternalWeights",\n value: function _updateInternalWeights() {\n var numLayers = this._layers.length;\n var weightMultiplier = 1; // Update internal weight values on layers in reverse order\n\n for (var i = numLayers - 1; i >= 0; i--) {\n var layer = this._layers[i];\n layer.updateInternalWeight(weightMultiplier); // If the layer is override, update the multiplier with the remainder of the full weight\n\n if (layer.blendMode === LayerBlendModes.Override && layer.currentState) {\n weightMultiplier *= 1 - layer.currentState.internalWeight;\n }\n }\n }\n /**\r\n * Return a new instance of a SingleState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the SingleState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n *\r\n * @returns {core/SingleState}\r\n */\n\n }, {\n key: "_createSingleState",\n value: function _createSingleState(options) {\n return new state_SingleState(options);\n }\n /**\r\n * Return a new instance of a FreeBlendState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the FreeBlendState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n *\r\n * @returns {FreeBlendState}\r\n */\n\n }, {\n key: "_createFreeBlendState",\n value: function _createFreeBlendState(options) {\n var _this2 = this;\n\n var _options$blendStateOp = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp === void 0 ? [] : _options$blendStateOp;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this2._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_FreeBlendState(options, blendStates);\n }\n /**\r\n * Return a new instance of a QueueState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the QueueState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {number=} options.transitionTime - The amount of time it takes to transition\r\n * between queued states.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.queueOptions] - Array of options used to create the\r\n * queue states for this container.\r\n *\r\n * @returns {QueueState}\r\n */\n\n }, {\n key: "_createQueueState",\n value: function _createQueueState(options) {\n var _this3 = this;\n\n var _options$queueOptions = options.queueOptions,\n queueOptions = _options$queueOptions === void 0 ? [] : _options$queueOptions;\n var queueStates = queueOptions.map(function (queueOption) {\n return _this3._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({\n transitionTime: options.transitionTime\n }, queueOption), {}, {\n blendMode: options.blendMode\n }));\n });\n return new state_QueueState(options, queueStates);\n }\n /**\r\n * Return a new instance of a Blend1dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.} [options.blendThresholds] - Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend1dState",\n value: function _createBlend1dState(options) {\n var _this4 = this;\n\n var _options$blendStateOp2 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp2 === void 0 ? [] : _options$blendStateOp2;\n var _options$blendThresho = options.blendThresholds,\n blendThresholds = _options$blendThresho === void 0 ? [] : _options$blendThresho;\n var _options$blendMatchPh = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh === void 0 ? [] : _options$blendMatchPh;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this4._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend1dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a Blend2dState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the Blend1dState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {weight} [options.weight=0] - The 0-1 amount of influence the state will have.\r\n * @param {timeScale} [options.timeScale=1] - Factor to scale the playback speed of the\r\n * animation.\r\n * @param {number} [options.loopCount=Infinity] - Number of times the animation should\r\n * repeat before finishing.\r\n * @param {string} [options.blendMode=LayerBlendModes[DefaultLayerBlendMode]] - Type of\r\n * blending the animation should use.\r\n * @param {Array.} [options.blendStateOptions] - Array of options used to create the\r\n * blend states for this container.\r\n * @param {Array.>} [options.blendThresholds] - Array of Array of numbers used to set the\r\n * thresholds for each blend state in this container.\r\n * @param {Array.} [options.blendMatchPhases=[]] - Optional array of booleans used to\r\n * set whether or not each blend state in this container will match phases.\r\n *\r\n * @returns {Blend1dState}\r\n */\n\n }, {\n key: "_createBlend2dState",\n value: function _createBlend2dState(options) {\n var _this5 = this;\n\n var _options$blendStateOp3 = options.blendStateOptions,\n blendStateOptions = _options$blendStateOp3 === void 0 ? [] : _options$blendStateOp3;\n var _options$blendThresho2 = options.blendThresholds,\n blendThresholds = _options$blendThresho2 === void 0 ? [] : _options$blendThresho2;\n var _options$blendMatchPh2 = options.blendMatchPhases,\n blendMatchPhases = _options$blendMatchPh2 === void 0 ? [] : _options$blendMatchPh2;\n var blendStates = [];\n blendStateOptions.forEach(function (blendOptions) {\n blendStates.push(_this5._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, blendOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_Blend2dState(options, blendStates, blendThresholds, blendMatchPhases);\n }\n /**\r\n * Return a new instance of a RandomAnimationState.\r\n *\r\n * @private\r\n *\r\n * @param {Object} options - Options to pass to the RandomAnimationState constructor.\r\n * @param {string=} options.name - Name for the animation state. Names must be\r\n * unique for the layer the state is applied to.\r\n * @param {number} [options.playInterval=3] - The base animation playback interval.\r\n * @param {Array.} [options.subStateOptions] - Array of options used to create the\r\n * sub states for this container.\r\n *\r\n * @returns {RandomAnimationState}\r\n */\n\n }, {\n key: "_createRandomAnimationState",\n value: function _createRandomAnimationState(options) {\n var _this6 = this;\n\n var _options$subStateOpti = options.subStateOptions,\n subStateOptions = _options$subStateOpti === void 0 ? [] : _options$subStateOpti;\n var subStates = [];\n subStateOptions.forEach(function (subStateOptions) {\n subStates.push(_this6._createSingleState(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, subStateOptions), {}, {\n blendMode: options.blendMode\n })));\n });\n return new state_RandomAnimationState(options, subStates);\n }\n /**\r\n * Make sure the layer with the given name exists and return a unique version\r\n * of the animation name supplied for that layer.\r\n *\r\n * @private\r\n *\r\n * @param {string} layerName - Name of the layer to check against.\r\n * @param {string} animationName - Name of the animation to validate.\r\n *\r\n * @returns {string} Validated animation name.\r\n */\n\n }, {\n key: "_validateNewAnimation",\n value: function _validateNewAnimation(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot add animation to layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the animationName is unique\n\n\n var name = core_Utils.getUniqueName(animationName, layer.getStateNames());\n\n if (name !== animationName) {\n console.warn("Animation name ".concat(animationName, " is not unique for layer ").concat(layer.name, ". Animation will be renamed to ").concat(name, "."));\n }\n\n return name;\n }\n /**\r\n * Gets whether or not all animations are paused.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "paused",\n get: function get() {\n return this._paused;\n }\n /**\r\n * Gets an array of names of animation layers.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "layers",\n get: function get() {\n return this._layers.map(function (layer) {\n return layer.name;\n });\n }\n /**\r\n * Create and store a new animation layer.\r\n *\r\n * @param {string} [name=\'NewLayer\'] - Name for the layer.\r\n * @param {Object} [options={}] - Options to pass to {@link AnimationLayer#constructor}\r\n * @param {index=} index - Index to insert the new layer at. If none is provided\r\n * it will be added to the end of the stack.\r\n *\r\n * @returns {number} Index of the new layer.\r\n */\n\n }, {\n key: "addLayer",\n value: function addLayer() {\n var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \'NewLayer\';\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var index = arguments.length > 2 ? arguments[2] : undefined;\n var numLayers = this._layers.length;\n var layerIndex = index; // Make sure the given index is within the range of layers\n\n if (index === undefined || index === -1) {\n layerIndex = this._layers.length;\n } else {\n layerIndex = this._validateIndex(index, false);\n\n if (layerIndex === undefined) {\n // Insert at the beginning if the user passed in a negative index\n if (index < 0) {\n layerIndex = 0;\n } // Otherwise append to the end\n else {\n layerIndex = this._layers.length;\n }\n\n console.warn("Index ".concat(index, " is invalid for host ").concat(this._host.id, ". New layer will be added at the closest valid index: ").concat(layerIndex, "."));\n }\n } // Make sure the layer name is unique\n\n\n var layerName = core_Utils.getUniqueName(name, Object.keys(this._layerMap));\n\n if (name !== layerName) {\n console.warn("Layer name ".concat(name, " is not unique. New layer will be added with the name ").concat(layerName, "."));\n }\n\n var layer = new animpack_AnimationLayer(AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, options), {}, {\n name: layerName\n }));\n this._layerMap[layerName] = layer;\n\n if (layerIndex === numLayers) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n } // Notify that a layer has been added to the feature\n\n\n var eventData = {\n name: layerName,\n index: layerIndex\n };\n this.emit(this.constructor.EVENTS.addLayer, eventData);\n return eventData;\n }\n /**\r\n * Remove an animation layer from the stack. Animations on this layer will no\r\n * longer be evaluated.\r\n *\r\n * @param {string} name - Name for the layer to remove.\r\n *\r\n * @returns {boolean} Whether or not removal was successful.\r\n */\n\n }, {\n key: "removeLayer",\n value: function removeLayer(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not remove layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n layer.discard();\n\n var index = this._layers.indexOf(layer);\n\n this._layers.splice(index, 1);\n\n delete this._layerMap[name]; // Notify that a layer has been removed from the feature\n\n this.emit(this.constructor.EVENTS.removeLayer, {\n name: name,\n index: index\n });\n return true;\n }\n /**\r\n * Re-order the layer stack so that the layer with the given name is positioned\r\n * at the given index.\r\n *\r\n * @param {string} name - Name of the layer to move.\r\n * @param {number} index - New index to position the layer at.\r\n *\r\n * @returns {number} The new index of the layer\r\n */\n\n }, {\n key: "moveLayer",\n value: function moveLayer(name, index) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the index falls in the range of existing layers\n\n\n var layerIndex = this._validateIndex(index, true);\n\n var lastIndex = this._layers.length - 1;\n\n if (layerIndex === undefined) {\n throw new Error("Cannot move layer ".concat(name, " from host ").concat(this._host.id, " to index ").concat(index, ". Index must be in the 0 - ").concat(lastIndex, " range."));\n }\n\n var currentIndex = this._layers.indexOf(layer);\n\n if (currentIndex === layerIndex) {\n return;\n } // Remove from the current position\n\n\n this._layers.splice(currentIndex, 1); // Insert at the new position\n\n\n if (layerIndex === lastIndex) {\n this._layers.push(layer);\n } else {\n this._layers.splice(layerIndex, 0, layer);\n }\n\n return layerIndex;\n }\n /**\r\n * Update the name of a layer. Names must be unique, if the new name is not\r\n * unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} currentName - Current name of the layer.\r\n * @param {string} newName - New name to set on the layer.\r\n *\r\n * @returns {string} The new name of the layer\r\n */\n\n }, {\n key: "renameLayer",\n value: function renameLayer(currentName, newName) {\n // Make sure the name is valid\n var layer = this._layerMap[currentName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename layer ".concat(currentName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n } // Make sure the layer name is unique\n\n\n var name = core_Utils.getUniqueName(newName, Object.keys(this._layerMap));\n\n if (name !== newName) {\n console.warn("Layer name ".concat(newName, " is not unique. Layer will be renamed to ").concat(name, "."));\n }\n\n delete this._layerMap[currentName];\n this._layerMap[name] = layer;\n layer.name = name; // Notify that a layer has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameLayer, {\n oldName: currentName,\n newName: name\n });\n return name;\n }\n /**\r\n * Return the weight of an animation layer.\r\n *\r\n * @param {string} name - Name of the layer to return weight from.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getLayerWeight",\n value: function getLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot get weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.weight;\n }\n /**\r\n * Update the weight of an animation layer.\r\n *\r\n * @param {string} name - The name of the layer to update.\r\n * @param {number} weight - The weight value to set on the layer. This number\r\n * should be in the 0-1 range.\r\n * @param {number=} seconds - The number of seconds it should take to reach the\r\n * new weight. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while interpolating\r\n * the weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} A promise that will resolve once the layer\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setLayerWeight",\n value: function setLayerWeight(name, weight, seconds, easingFn) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot set weight on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setWeight(weight, seconds, easingFn);\n }\n /**\r\n * Returns the names of blend states in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n *\r\n * @returns {Array.} - Names of blend states.\r\n */\n\n }, {\n key: "getAnimationBlendNames",\n value: function getAnimationBlendNames(layerName, animationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend names on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendNames(animationName);\n }\n /**\r\n * Update the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n * @param {number} weight - Weight value to set on the animation. This number shoudld be\r\n * in the 0-1 range.\r\n * @param {number=} seconds - Number of seconds it should take to reach the new weight.\r\n * Default is zero and will set immediately.\r\n * @param {Function=} easingFn - Easing function to use while interpolating the new\r\n * weight. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Promise that will resolve once the animation\'s weight reaches\r\n * the target value.\r\n */\n\n }, {\n key: "setAnimationBlendWeight",\n value: function setAnimationBlendWeight(layerName, animationName, blendName, weight, seconds, easingFn) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot set blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.setAnimationBlendWeight(animationName, blendName, weight, seconds, easingFn);\n }\n /**\r\n * Returns the weight for a blend state in an animation in a layer.\r\n *\r\n * @param {string} layerName - Name of the layer containing the animation containing\r\n * the blend state to update.\r\n * @param {string} animationName - Name of the animation containing the blend state\r\n * to update.\r\n * @param {string} blendName - Name of the blend state to update.\r\n *\r\n * @returns {number} - Weight of the blend state.\r\n */\n\n }, {\n key: "getAnimationBlendWeight",\n value: function getAnimationBlendWeight(layerName, animationName, blendName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot get blend weight on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getAnimationBlendWeight(animationName, blendName);\n }\n /**\r\n * Pause weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation to pause.\r\n */\n\n }, {\n key: "pauseLayerWeight",\n value: function pauseLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pauseWeight();\n }\n /**\r\n * Resume weight interpolation animation on a layer with the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value.\r\n */\n\n }, {\n key: "resumeLayerWeight",\n value: function resumeLayerWeight(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume weight interpolation on layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resumeWeight();\n }\n /**\r\n * Pause current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animation to pause.\r\n */\n\n }, {\n key: "pauseLayer",\n value: function pauseLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n throw new Error("Cannot pause layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.pause();\n }\n /**\r\n * Resume current animation and weight interpolation animation on a layer with\r\n * the given name.\r\n *\r\n * @param {string} name - Name of the layer to resume.\r\n *\r\n * @returns {Deferred} - Resolves once the layer\'s weight reaches its target value\r\n * and it\'s current animation finishes playing.\r\n */\n\n }, {\n key: "resumeLayer",\n value: function resumeLayer(name) {\n // Make sure the name is valid\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n var e = "Cannot resume layer ".concat(name, " from host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n return layer.resume();\n }\n /**\r\n * Return whether or not the animation layer with the given name is currently\r\n * transitioning between animations.\r\n *\r\n * @param {string} layerName - Name of the layer to check.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getTransitioning",\n value: function getTransitioning(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get transitioning on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.isTransitioning;\n }\n /**\r\n * Return an array of the names of all states the layer with the given name controls.\r\n *\r\n * @param {string} layerName - Name of the layer to search.\r\n *\r\n * @returns {Array.}\r\n */\n\n }, {\n key: "getAnimations",\n value: function getAnimations(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animations on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.getStateNames();\n }\n /**\r\n * Return the name of the state currently active on the layer with the given name.\r\n * Return null if there is no current animation for the layer.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {(string|null)}\r\n */\n\n }, {\n key: "getCurrentAnimation",\n value: function getCurrentAnimation(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get current animation on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentAnimation;\n }\n /**\r\n * Return whether or not a layer with the given name is currently playing an\r\n * animation and that animation is paused.\r\n *\r\n * @param {string} layerName - Name of the layer.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "getPaused",\n value: function getPaused(layerName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get paused on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n return layer.currentState && layer.currentState.paused;\n }\n /**\r\n * Return the type name of the given animation. @see AnimationTypes.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation to check.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "getAnimationType",\n value: function getAnimationType(layerName, animationName) {\n // Make sure the layerName is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Get animation type on layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var state = layer.getState(animationName);\n\n if (state === undefined) {\n throw new Error("Get animation type for animation ".concat(animationName, " on layer ").concat(layerName, " from host ").concat(this._host.id, ". No animation exists with this name."));\n }\n\n var constructor = state.constructor;\n return Object.keys(AnimationTypes).find(function (typeName) {\n return AnimationTypes[typeName] === constructor;\n });\n }\n /**\r\n * Add a new animation to an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to add the animation to.\r\n * @param {string} animationName - Name to use when calling the animation.\r\n * @param {Object=} options - Options to pass to the constructor for the new\r\n * SingleState animation.\r\n *\r\n * @returns {string} - The name of the animation that was added\r\n */\n\n }, {\n key: "addAnimation",\n value: function addAnimation(layerName, animationName) {\n var animationType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : AnimationTypes.single;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n options.name = this._validateNewAnimation(layerName, animationName); // Make sure the animation type is valid\n\n if (!Object.values(AnimationTypes).includes(animationType)) {\n throw new Error("Cannot add animation ".concat(animationName, " to layer ").concat(layerName, " on host ").concat(this._host.id, ". Invalid animation type."));\n }\n\n var layer = this._layerMap[layerName];\n options.blendMode = layer.blendMode;\n options.transitionTime = layer.transitionTime;\n var state = this["_create".concat(animationType.name)](options);\n var name = layer.addState(state); // Notify that an animation has been added to the feature\n\n this.emit(this.constructor.EVENTS.addAnimation, {\n layerName: layerName,\n animationName: name\n });\n return name;\n }\n /**\r\n * Remove an animation from an animation layer.\r\n *\r\n * @param {string} layerName - Name of the layer to remove the animation from.\r\n * @param {string} name - Name of the animation to remove.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "removeAnimation",\n value: function removeAnimation(layerName, animationName) {\n // Make sure the name is valid\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot remove animation from layer ".concat(layerName, " from host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var removed = layer.removeState(animationName); // Notify that an animation has been removed from the feature\n\n if (removed === true) {\n this.emit(this.constructor.EVENTS.removeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }\n\n return removed;\n }\n /**\r\n * Update the name of an animation. Names must be unique on each layer, if the new\r\n * name is not unique it will have trailing numbers appended until it is unique.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation that\r\n * will be renamed,\r\n * @param {string} currentAnimationName - Current name of the animation.\r\n * @param {string} newAnimationName - New name to set on the animation.\r\n *\r\n * @returns {string} - The new name of the animation\r\n */\n\n }, {\n key: "renameAnimation",\n value: function renameAnimation(layerName, currentAnimationName, newAnimationName) {\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n throw new Error("Cannot rename animation ".concat(currentAnimationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name."));\n }\n\n var name = layer.renameState(currentAnimationName, newAnimationName); // Notify that an animation has been renamed on the feature\n\n this.emit(this.constructor.EVENTS.renameAnimation, {\n layerName: layerName,\n oldName: currentAnimationName,\n newName: name\n });\n return name;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from the beginning.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string} animationName - Name of the animation state to play.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "playAnimation",\n value: function playAnimation(layerName, animationName, seconds, easingFn) {\n var _this7 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that a new animation has begun\n\n\n this.emit(this.constructor.EVENTS.playAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.playAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this7.emit(_this7.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this7.emit(_this7.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref) {\n var name = _ref.name,\n canAdvance = _ref.canAdvance,\n isQueueEnd = _ref.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this7.emit(_this7.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Play the next animation in the queue of a QueueState animation.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the queue animation.\r\n * @param {string=} animationName - Name of the animation queue animation. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the queue animation if it\'s not already currently playing. Default is zero\r\n * and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * to the queue animation if it isn\'t already playing. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the last animation in the queue finishes\r\n * playing.\r\n */\n\n }, {\n key: "playNextAnimation",\n value: function playNextAnimation(layerName, animationName, transitionTime, easingFn) {\n var _this8 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n }\n\n if (animationName === undefined) {\n animationName = layer.currentAnimation;\n }\n\n var animation = layer.getState(layer.currentAnimation);\n\n if (animation === null) {\n var _e = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". No animation exists with name ").concat(animationName, ".");\n\n return core_Deferred.reject(_e);\n } else if (this.getAnimationType(layerName, animationName) !== \'queue\') {\n var _e2 = "Cannot play next animation on layer ".concat(layerName, " for host ").concat(this._host.id, ". ").concat(animationName, " is not a queue state.");\n\n return core_Deferred.reject(_e2);\n }\n\n var onNext = function onNext(_ref2) {\n var name = _ref2.name,\n canAdvance = _ref2.canAdvance,\n isQueueEnd = _ref2.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this8.emit(_this8.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n }; // Make the queue animation current if it wasn\'t already\n\n\n if (layer.currentAnimation === null) {\n layer.resumeAnimation(animation.name, transitionTime, easingFn, undefined, undefined, undefined, onNext);\n }\n\n return animation.next(onNext, true);\n }\n /**\r\n * Pause the current animation on a layer.\r\n *\r\n * @param {string} name - Name of the layer to pause.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully paused.\r\n */\n\n }, {\n key: "pauseAnimation",\n value: function pauseAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not pause animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n var paused = layer.pauseAnimation(); // Notify that an animation was paused\n\n if (paused) {\n var animationName = layer.currentAnimation;\n this.emit(this.constructor.EVENTS.pauseAnimation, {\n layerName: name,\n animationName: animationName\n });\n }\n\n return paused;\n }\n /**\r\n * Pause the currently playing animation and play a new animation from where it\r\n * last left off.\r\n *\r\n * @param {string} layerName - Name of the layer that contains the animation.\r\n * @param {string=} animationName - Name of the animation state to resume. Defaults\r\n * to the name of the current animation for the layer.\r\n * @param {number=} seconds - The number of seconds it should take to transition\r\n * to the new animation. Default is zero and will set immediately.\r\n * @param {Function=} easingFn - The easing function to use while transitioning\r\n * between animations. Default is Easing.Linear.InOut.\r\n *\r\n * @returns {Deferred} - Resolves once the animation reaches the end of its\r\n * timeline. Looping animations can only resolve if they are interrupted or\r\n * manually stopped.\r\n */\n\n }, {\n key: "resumeAnimation",\n value: function resumeAnimation(layerName, animationName, seconds, easingFn) {\n var _this9 = this;\n\n var layer = this._layerMap[layerName];\n\n if (layer === undefined) {\n var e = "Cannot resume animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". No layer exists with this name.");\n return core_Deferred.reject(e);\n } // Notify that an animation was resumed\n\n\n this.emit(this.constructor.EVENTS.resumeAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n return layer.resumeAnimation(animationName, seconds, easingFn, function () {\n // Notify that an animation has stopped\n _this9.emit(_this9.constructor.EVENTS.stopAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, undefined, function () {\n // Notify that an animation has been interrupted\n _this9.emit(_this9.constructor.EVENTS.interruptAnimation, {\n layerName: layerName,\n animationName: animationName\n });\n }, function (_ref3) {\n var name = _ref3.name,\n canAdvance = _ref3.canAdvance,\n isQueueEnd = _ref3.isQueueEnd;\n\n if (layer.currentAnimation === animationName) {\n // Notify that a new animation has begun\n _this9.emit(_this9.constructor.EVENTS.playNextAnimation, {\n layerName: layerName,\n animationName: animationName,\n nextQueuedAnimation: name,\n canAdvance: canAdvance,\n isQueueEnd: isQueueEnd\n });\n }\n });\n }\n /**\r\n * Stop the current animation on a layer. Stop rewinds the animation to the\r\n * beginning and prevents it from progressing forward.\r\n *\r\n * @param {string} name - Name of the layer that contains the animation.\r\n *\r\n * @returns {boolean} Whether or not an animation was successfully stopped.\r\n */\n\n }, {\n key: "stopAnimation",\n value: function stopAnimation(name) {\n var layer = this._layerMap[name];\n\n if (layer === undefined) {\n console.warn("Did not stop animation on layer ".concat(name, " for host ").concat(this._host.id, ". No layer exists with this name."));\n return false;\n }\n\n return layer.stopAnimation();\n }\n /**\r\n * Pause current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to pause.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n this._paused = true;\n var paused = false;\n\n this._layers.forEach(function (l) {\n if (l.pause()) {\n paused = true;\n }\n });\n\n return paused;\n }\n /**\r\n * Resume current animation and weight interpolation animation on all layers.\r\n * @returns {boolean} - Whether or not there was an existing interpolation or\r\n * current animations to resume.\r\n */\n\n }, {\n key: "resume",\n value: function resume() {\n this._paused = false;\n var resumed = false;\n\n this._layers.forEach(function (l) {\n if (l.resume()) {\n resumed = true;\n }\n });\n\n return resumed;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see AnimationFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this10 = this;\n\n /**\r\n * @inner\r\n * @namespace AnimationFeature\r\n */\n var api = AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#paused\r\n */\n paused: {\n get: function get() {\n return _this10.paused;\n }\n },\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @see core/AnimationFeature#layers\r\n */\n layers: {\n get: function get() {\n return _this10.layers;\n }\n }\n });\n Object.assign(api, {\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addLayer\r\n */\n addLayer: this.addLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeLayer\r\n */\n removeLayer: this.removeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#moveLayer\r\n */\n moveLayer: this.moveLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameLayer\r\n */\n renameLayer: this.renameLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getLayerWeight\r\n */\n getLayerWeight: this.getLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setLayerWeight\r\n */\n setLayerWeight: this.setLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayerWeight\r\n */\n pauseLayerWeight: this.pauseLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayerWeight\r\n */\n resumeLayerWeight: this.resumeLayerWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseLayer\r\n */\n pauseLayer: this.pauseLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeLayer\r\n */\n resumeLayer: this.resumeLayer.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getTransitioning\r\n */\n getTransitioning: this.getTransitioning.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimations\r\n */\n getAnimations: this.getAnimations.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getCurrentAnimation\r\n */\n getCurrentAnimation: this.getCurrentAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getPaused\r\n */\n getPaused: this.getPaused.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationType\r\n */\n getAnimationType: this.getAnimationType.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#addAnimation\r\n */\n addAnimation: this.addAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#removeAnimation\r\n */\n removeAnimation: this.removeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#renameAnimation\r\n */\n renameAnimation: this.renameAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendNames\r\n */\n getAnimationBlendNames: this.getAnimationBlendNames.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#getAnimationBlendWeight\r\n */\n getAnimationBlendWeight: this.getAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#setAnimationBlendWeight\r\n */\n setAnimationBlendWeight: this.setAnimationBlendWeight.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playAnimation\r\n */\n playAnimation: this.playAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#playNextAnimation\r\n */\n playNextAnimation: this.playNextAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pauseAnimation\r\n */\n pauseAnimation: this.pauseAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resumeAnimation\r\n */\n resumeAnimation: this.resumeAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#stopAnimation\r\n */\n stopAnimation: this.stopAnimation.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof AnimationFeature\r\n * @instance\r\n * @method\r\n * @see core/AnimationFeature#resume\r\n */\n resume: this.resume.bind(this)\n });\n }\n /**\r\n * Update each animation layer.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._layers.length) {\n return;\n }\n\n if (this._paused) {\n deltaTime = 0;\n } // Re-evaluate internal weights for layers\n\n\n this._updateInternalWeights(); // Update layers\n\n\n this._layers.forEach(function (layer) {\n layer.update(deltaTime);\n });\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "update", this).call(this, deltaTime);\n }\n }, {\n key: "discard",\n value: function discard() {\n this._layers.forEach(function (layer) {\n layer.discard();\n });\n\n delete this._layers;\n delete this._layerMap;\n\n AnimationFeature_get(AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "discard", this).call(this);\n }\n }]);\n\n return AnimationFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperty(AnimationFeature_AnimationFeature, \'EVENTS\', {\n value: AnimationFeature_objectSpread(AnimationFeature_objectSpread({}, Object.getPrototypeOf(core_AbstractHostFeature).EVENTS), {}, {\n addLayer: \'onAddLayerEvent\',\n removeLayer: \'onRemoveLayerEvent\',\n renameLayer: \'onRenameLayerEvent\',\n addAnimation: \'onAddAnimationEvent\',\n removeAnimation: \'onRemovedAnimationEvent\',\n renameAnimation: \'onRenameAnimationEvent\',\n playAnimation: \'onPlayEvent\',\n playNextAnimation: \'onNextEvent\',\n pauseAnimation: \'onPauseEvent\',\n resumeAnimation: \'onResumeEvent\',\n interruptAnimation: \'onInterruptEvent\',\n stopAnimation: \'onStopEvent\'\n })\n});\n/* harmony default export */ var animpack_AnimationFeature = (AnimationFeature_AnimationFeature);\n// CONCATENATED MODULE: ./src/core/PointOfInterestFeature.js\nfunction PointOfInterestFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { PointOfInterestFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { PointOfInterestFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return PointOfInterestFeature_typeof(obj); }\n\nfunction PointOfInterestFeature_slicedToArray(arr, i) { return PointOfInterestFeature_arrayWithHoles(arr) || PointOfInterestFeature_iterableToArrayLimit(arr, i) || PointOfInterestFeature_unsupportedIterableToArray(arr, i) || PointOfInterestFeature_nonIterableRest(); }\n\nfunction PointOfInterestFeature_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction PointOfInterestFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction PointOfInterestFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction PointOfInterestFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction PointOfInterestFeature_toConsumableArray(arr) { return PointOfInterestFeature_arrayWithoutHoles(arr) || PointOfInterestFeature_iterableToArray(arr) || PointOfInterestFeature_unsupportedIterableToArray(arr) || PointOfInterestFeature_nonIterableSpread(); }\n\nfunction PointOfInterestFeature_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction PointOfInterestFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return PointOfInterestFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return PointOfInterestFeature_arrayLikeToArray(o, minLen); }\n\nfunction PointOfInterestFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction PointOfInterestFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return PointOfInterestFeature_arrayLikeToArray(arr); }\n\nfunction PointOfInterestFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction PointOfInterestFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction PointOfInterestFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction PointOfInterestFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) PointOfInterestFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) PointOfInterestFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction PointOfInterestFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { PointOfInterestFeature_get = Reflect.get; } else { PointOfInterestFeature_get = function _get(target, property, receiver) { var base = PointOfInterestFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return PointOfInterestFeature_get(target, property, receiver || target); }\n\nfunction PointOfInterestFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = PointOfInterestFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction PointOfInterestFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) PointOfInterestFeature_setPrototypeOf(subClass, superClass); }\n\nfunction PointOfInterestFeature_setPrototypeOf(o, p) { PointOfInterestFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return PointOfInterestFeature_setPrototypeOf(o, p); }\n\nfunction PointOfInterestFeature_createSuper(Derived) { var hasNativeReflectConstruct = PointOfInterestFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = PointOfInterestFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = PointOfInterestFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return PointOfInterestFeature_possibleConstructorReturn(this, result); }; }\n\nfunction PointOfInterestFeature_possibleConstructorReturn(self, call) { if (call && (PointOfInterestFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return PointOfInterestFeature_assertThisInitialized(self); }\n\nfunction PointOfInterestFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction PointOfInterestFeature_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; } }\n\nfunction PointOfInterestFeature_getPrototypeOf(o) { PointOfInterestFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return PointOfInterestFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/* eslint-disable no-underscore-dangle */\n\n/* eslint-disable no-unused-vars */\n\n\n\n\n\n\n\n/**\n * Enum for axis directions.\n *\n * @readonly\n * @enum {Class}\n */\n\nvar AxisMap = {\n PositiveX: [1, 0, 0],\n NegativeX: [-1, 0, 0],\n PositiveY: [0, 1, 0],\n NegativeY: [0, -1, 0],\n PositiveZ: [0, 0, 1],\n NegativeZ: [0, 0, -1]\n};\nvar FaceTargetTypes = {\n EyeCenter: 0,\n EyeLeft: 1,\n EyeRight: 2,\n Mouth: 3\n}; // Average distance between pupils is .064m, golden ratio says that the distance\n// from center of the pupils to the center of the mouth should be about the same.\n\nvar FaceVectors = [[0, 0, 0], [-.032, 0, 0], [.032, 0, 0], [0, -.064, 0]]; // Time ranges to use when choosing a new random wait time between saccades\n\nvar MicroSaccadeWaitRanges = {\n "default": [0.8, 1.75],\n postMacro: [0.6, 1.3125]\n};\nvar MacroSaccadeWaitRanges = {\n "default": [5.0, 8.0],\n mouthTarget: [0.2, 0.75],\n // Look away from a mouth target the fastest\n eyeTarget: [1.5, 4.0]\n}; // Minimum angle in degrees the eye direction must change to trigger a blink animation\n\nvar BlinkThreshold = 35; // Maximum number of milliseconds to use for calculating look speed\n\nvar MaxDelta = 100 / 3;\n/**\n * PointOfInterest controls the gaze direction of the host. Given one or more\n * animations of type Blend2dState, it calculates the angles between the lookTracker\n * object (generally a joint in the host\'s skeleton) and the lookTarget (the object\n * the host should look at) and drives the managed Blend2dStates\' X and Y blend\n * values using the result. You can optionally add saccadic movement to any managed\n * animation to help make the host\'s eyes appear alive when focused on the same\n * point for exteded periods of time. If blink animations are specified, a blink\n * will be played during large changes in gaze direction.\n *\n * @extends AbstractHostFeature\n * @alias core/PointOfInterestFeature\n * @implements SSMLSpeechmarkInterface\n * @implements ManagedAnimationLayerInterface\n */\n\nvar PointOfInterestFeature_PointOfInterestFeature = /*#__PURE__*/function (_AbstractHostFeature$) {\n PointOfInterestFeature_inherits(PointOfInterestFeature, _AbstractHostFeature$);\n\n var _super = PointOfInterestFeature_createSuper(PointOfInterestFeature);\n\n /**\n * @constructor\n *\n * @param {core/HostObject} host - Host that owns the feature.\n * @param {Object=} options - Options for the feature.\n * @param {Object=} target - 3D transformation node that the host should try to\n * look at.\n * @param {Object} options.lookTracker - 3D transformation node that represents\n * the direction the host is currently looking during animation.\n * @param {Object=} options.scene - Engine-specific scene object that contains\n * the host. This object must be defined if using \'setTargetByName\' or \'SetTargetById\'\n * methods.\n * @param {Object=} lookOptions - Options for the look animation layers.\n * @param {number} [lookOptions.blendTime=0.1] - Default amount of time it will\n * take to manipulate the weights of the look layers.\n * @param {number} [lookOptions.easingFn=Quadratic.InOut] - Default easing function\n * to use when manipulating look layer weights.\n * @param {Array.} [lookOptions.layers=[]] - An array of layer options\n * objects to register as look layers.\n * @param {Object=} blinkOptions - Options for the blink animation layers.\n * @param {number} [blinkOptions.blendTime=0.075] - Default amount of time it\n * will take to manipulate the weights of the blink layers.\n * @param {number} [blinkOptions.easingFn=Quadratic.InOut] - Default easing function\n * to use when manipulating blink layer weights.\n * @param {Array.} [blinkOptions.layers=[]] - An array of layer options\n * objects to register as blink layers.\n */\n function PointOfInterestFeature(host) {\n var _this;\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n target = _ref.target,\n lookTracker = _ref.lookTracker,\n scene = _ref.scene;\n\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref2$blendTime = _ref2.blendTime,\n lookBlendTime = _ref2$blendTime === void 0 ? 0.1 : _ref2$blendTime,\n _ref2$easingFn = _ref2.easingFn,\n lookEasingFn = _ref2$easingFn === void 0 ? Quadratic.InOut : _ref2$easingFn,\n _ref2$layers = _ref2.layers,\n lookLayers = _ref2$layers === void 0 ? [] : _ref2$layers;\n\n var _ref3 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref3$blendTime = _ref3.blendTime,\n blinkBlendTime = _ref3$blendTime === void 0 ? 0.075 : _ref3$blendTime,\n _ref3$easingFn = _ref3.easingFn,\n blinkEasingFn = _ref3$easingFn === void 0 ? Quadratic.InOut : _ref3$easingFn,\n _ref3$layers = _ref3.layers,\n blinkLayers = _ref3$layers === void 0 ? [] : _ref3$layers;\n\n PointOfInterestFeature_classCallCheck(this, PointOfInterestFeature);\n\n _this = _super.call(this, host);\n\n if (!_this.constructor._validateTransformObject(lookTracker)) {\n throw new Error("Cannot initialize PointOfInterestFeature on host ".concat(_this._host.id, ". LookTracker must be defined as a valid transformation object."));\n }\n\n _this._lookTracker = lookTracker;\n _this._scene = scene;\n _this._target = target || null;\n _this._prevTargetPos = [0, 0, 0];\n _this._isTargetMoving = false;\n _this._lookLayers = _this._lookLayers || {};\n _this._trackingConfigs = _this._trackingConfigs || [];\n _this._blinkLayers = _this._blinkLayers || {}; // Register the look layers\n\n lookLayers.forEach(function (_ref4) {\n var name = _ref4.name,\n animation = _ref4.animation,\n maxSpeed = _ref4.maxSpeed,\n reference = _ref4.reference,\n forwardAxis = _ref4.forwardAxis,\n hasSaccade = _ref4.hasSaccade,\n blendTime = _ref4.blendTime,\n easingFn = _ref4.easingFn;\n\n _this.registerLookLayer(name, {\n animation: animation,\n maxSpeed: maxSpeed,\n reference: reference,\n forwardAxis: forwardAxis,\n hasSaccade: hasSaccade,\n blendTime: blendTime !== undefined ? blendTime : lookBlendTime,\n easingFn: easingFn !== undefined ? easingFn : lookEasingFn\n });\n }); // Register the blink layers\n\n blinkLayers.forEach(function (_ref5) {\n var name = _ref5.name,\n animation = _ref5.animation,\n blendTime = _ref5.blendTime,\n easingFn = _ref5.easingFn;\n\n _this.registerBlinkLayer(name, {\n animation: animation,\n blendTime: blendTime !== undefined ? blendTime : blinkBlendTime,\n easingFn: easingFn !== undefined ? easingFn : blinkEasingFn\n });\n });\n return _this;\n }\n /**\n * Gets and sets the target object the host should look at.\n *\n * @type {Object|null}\n */\n\n\n PointOfInterestFeature_createClass(PointOfInterestFeature, [{\n key: "target",\n get: function get() {\n return this._target;\n },\n set: function set(target) {\n this._target = target || null;\n }\n /**\n * Return a vector representing the global position of an object. Should be\n * overloaded for each rendering engine implementation.\n *\n * @private\n *\n * @param {any} _obj - Engine-specific 3D transform object.\n *\n * @returns {Array.} - An array consisting of three numbers representing\n * x, y and z coordinates.\n */\n\n }, {\n key: "_onLayerAdded",\n value: function _onLayerAdded(_ref6) {\n var name = _ref6.name;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onLayerAdded", this).call(this, {\n name: name\n }); // Validate the look animation\n\n\n if (this._lookLayers[name] !== undefined) {\n this._registerLookAnimation(name, this._lookLayers[name]);\n }\n }\n }, {\n key: "_onAnimationAdded",\n value: function _onAnimationAdded(_ref7) {\n var layerName = _ref7.layerName,\n animationName = _ref7.animationName;\n this._lookLayers = this._lookLayers || {};\n this._blinkLayers = this._blinkLayers || {};\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "_onAnimationAdded", this).call(this, {\n layerName: layerName\n }); // Validate the look animation\n\n\n if (this._lookLayers[layerName] === animationName) {\n this._registerLookAnimation(layerName, animationName);\n }\n }\n /**\n * Ensure that registered look animations are Blend2dStates.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that contains the look animation.\n * @param {string} animationName - Name of the animation.\n */\n\n }, {\n key: "_registerLookAnimation",\n value: function _registerLookAnimation(layerName, animationName) {\n if (this._managedLayers[layerName].animations[animationName].isActive) {\n if (AnimationTypes[this._host.AnimationFeature.getAnimationType(layerName, animationName)] !== AnimationTypes.blend2d) {\n // Warn and deactivate if the registered state is not blend2d\n console.warn("Cannot register Point of Interest look animation ".concat(animationName, " on layer ").concat(layerName, " for host ").concat(this._host.id, ". Look animations must be of type \'blend2d\'."));\n this._managedLayers[layerName].animations[animationName].isActive = false;\n }\n }\n }\n /**\n * Check if the given object is not of an engine-specific type. Should\n * be overloaded for each rendering engine implementation.\n *\n * @private\n *\n * @param {any} obj - Object to validate.\n *\n * @returns {boolean}\n */\n\n }, {\n key: "_addTrackingConfig",\n value:\n /**\n * Check if the given configuration object has already been stored as a tracking\n * config. If it has, return the stored configuration. Otherwise, store and\n * return it.\n *\n * @private\n *\n * @param {Object} config - Object containing tracker, reference and forwardAxis\n * properties.\n *\n * @returns {Object}\n */\n function _addTrackingConfig(config) {\n var trackingConfig = this._trackingConfigs.find(function (c) {\n return c.reference === config.reference && c.forwardAxis === config.forwardAxis;\n });\n\n if (trackingConfig) {\n return trackingConfig;\n } else {\n config.angles = {\n h: 0,\n v: 0\n };\n config.prevAngles = {\n h: 0,\n v: 0\n };\n\n this._trackingConfigs.push(config);\n\n return config;\n }\n }\n /**\n * Return the distance between the look tracker and the look target.\n *\n * @private\n *\n * @returns {number}\n */\n\n }, {\n key: "_getTargetDistance",\n value: function _getTargetDistance() {\n // Find the vector between the global positions of tracker and target\n var sourcePosition = this.constructor._getWorldPosition(this._lookTracker);\n\n var targetPosition = this.constructor._getWorldPosition(this._target);\n\n var lookVector = [targetPosition[0] - sourcePosition[0], targetPosition[1] - sourcePosition[1], targetPosition[2] - sourcePosition[2]];\n return core_MathUtils.getVectorMagnitude(lookVector);\n }\n /**\n * Reset all stored tracking angles to 0.\n *\n * @private\n */\n\n }, {\n key: "_resetLookAngles",\n value: function _resetLookAngles() {\n this._trackingConfigs.forEach(function (_ref8) {\n var angles = _ref8.angles;\n angles.h = 0;\n angles.v = 0;\n });\n }\n /**\n * Store the difference in horizontal and vertical rotation for the tracker\'s\n * reference rotation and the direction of the target from the tracker.\n *\n * @private\n */\n\n }, {\n key: "_setLookAngles",\n value: function _setLookAngles() {\n var _this2 = this;\n\n // Get the current positions of the tracker and target objects\n var targetPos = this.constructor._getWorldPosition(this._target);\n\n var trackerPos = this.constructor._getWorldPosition(this._lookTracker); // Check if the target has moved\n\n\n this._isTargetMoving = core_MathUtils.getVectorMagnitude([targetPos[0] - this._prevTargetPos[0], targetPos[1] - this._prevTargetPos[1], targetPos[2] - this._prevTargetPos[2]]) > 0;\n Object.assign(this._prevTargetPos, targetPos); // Calculate the horizontal and vertical angles to rotate to the target\n\n var targetSpherical = core_MathUtils.cartesianToSpherical(targetPos[0] - trackerPos[0], targetPos[1] - trackerPos[1], targetPos[2] - trackerPos[2]);\n\n var targetAngles = this.constructor._sphericalToBlendValue(targetSpherical[1], targetSpherical[2]); // Calculate angles relative to the reference objects\n\n\n this._trackingConfigs.forEach(function (_ref9) {\n var reference = _ref9.reference,\n forwardAxis = _ref9.forwardAxis,\n angles = _ref9.angles;\n\n // Calculate the horizontal and vertical angles to rotate to the direction of the tracker\n var refDirection = _this2.constructor._getObjectDirection(reference, forwardAxis);\n\n var refSpherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(refDirection));\n\n var refAngles = _this2.constructor._sphericalToBlendValue(refSpherical[1], refSpherical[2]); // Store the difference\n\n\n angles.h = targetAngles.h - refAngles.h;\n angles.v = targetAngles.v - refAngles.v;\n });\n }\n /**\n * Return the horizontal and vertical angles it would require to simulate looking\n * at the given type of face target\n *\n * @private\n *\n * @param {number} targetType - Integer representing the FaceTargetType.\n *\n * @returns {Object}- An object with signature {r: number, h: number, v: number}\n * where \'r\' represents radius, h represents the horizontal/azimuthal angle and\n * v represents the vertical/polar angle.\n */\n\n }, {\n key: "_getFaceTargetAngles",\n value: function _getFaceTargetAngles(targetType) {\n // No offset when the target is the center of the eyes\n if (targetType === 0) {\n return {\n h: 0,\n v: 0\n };\n } // Build a vector to the face target type using the current distance to the target\n\n\n var distance = this._getTargetDistance(this._lookTracker);\n\n var faceVector = PointOfInterestFeature_toConsumableArray(FaceVectors[targetType]);\n\n faceVector[2] = distance;\n var spherical = core_MathUtils.cartesianToSpherical.apply(core_MathUtils, PointOfInterestFeature_toConsumableArray(faceVector)); // Make sure values are clamped within the range of motion of the human eye, in case the target is very close\n\n var blendValues = this.constructor._sphericalToBlendValue(spherical[1], spherical[2]);\n\n blendValues.h = core_MathUtils.clamp(blendValues.h, -35, 35);\n blendValues.v = core_MathUtils.clamp(blendValues.v, -25, 30);\n return blendValues;\n }\n /**\n * Updated the stored speed and duration variables for a layer based on the\n * change in horizontal and vertical angles of the tracker.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer to store values on.\n * @param {number} h - Change in horizontal angle, in degrees.\n * @param {number} v - Change in vertical angle, in degrees.\n */\n\n }, {\n key: "_updateLayerSpeed",\n value: function _updateLayerSpeed(layerName, h, v) {\n var layer = this._managedLayers[layerName]; // From "Realistic Avatar and head Animation Using a Neurobiological Model of Visual Attention", Itti, Dhavale, Pighin\n\n layer.maxHSpeed = 473 * (1 - Math.exp(-h / 7.8));\n layer.maxVSpeed = 473 * (1 - Math.exp(-v / 7.8)); // From "Eyes Alive", Lee, Badler\n\n var D0 = 0.025;\n var d = 0.00235;\n layer.hDuration = D0 + d * h;\n layer.vDuration = D0 + d * v;\n }\n /**\n * Set the microSaccade object with new randomized values.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n */\n\n }, {\n key: "_setMicroSaccade",\n value: function _setMicroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var microSaccade = layer.microSaccade;\n\n if (this._target) {\n // Micro movements should be smaller when focused on a target\n microSaccade.h = core_Utils.getRandomFloat(.01, .15);\n microSaccade.v = core_Utils.getRandomFloat(.01, .15);\n } else {\n // Microsaccades. Encyclopedia of Neuroscience. (2009) Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-29678-2_3492\n microSaccade.h = core_Utils.getRandomFloat(.01, .3);\n microSaccade.v = core_Utils.getRandomFloat(.01, .3);\n }\n\n this._updateLayerSpeed(layerName, microSaccade.h, microSaccade.v); // Restart the timer\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n }\n /**\n * Set the macroSaccade object with new randomized values.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n */\n\n }, {\n key: "_setMacroSaccade",\n value: function _setMacroSaccade(layerName) {\n var layer = this._managedLayers[layerName];\n var macroSaccade = layer.macroSaccade;\n var macroSaccadeWaitRange; // Increase random value range when not focused on a target\n\n if (!this._target) {\n macroSaccadeWaitRange = MacroSaccadeWaitRanges["default"]; // Normal human horizontal eye rotation limit is about 35 degrees\n\n var hLimit = core_Utils.getRandomFloat(.143, .286);\n var hFactor = core_Utils.getRandomFloat(-hLimit, hLimit);\n macroSaccade.h = hFactor * 35; // Normal human vertical eye rotation limit is about 25 degrees upward and 30 degrees downward\n\n var vLimit = core_Utils.getRandomFloat(.093, .186);\n var vFactor = core_Utils.getRandomFloat(-vLimit, vLimit);\n macroSaccade.v = vFactor > 0 ? vFactor * 25 : vFactor * 30;\n } // Pick a new face target\n else {\n // Social triangle - saccade between eyes and mouth, weighted to look at eyes more often\n switch (layer.saccadeTarget) {\n case 1:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeRight : FaceTargetTypes.Mouth;\n break;\n\n case 2:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.75 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.Mouth;\n break;\n\n case 3:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.mouthTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n\n case 0:\n default:\n macroSaccadeWaitRange = MacroSaccadeWaitRanges.eyeTarget;\n layer.saccadeTarget = Math.random() < 0.5 ? FaceTargetTypes.EyeLeft : FaceTargetTypes.EyeRight;\n break;\n }\n\n var _this$_getFaceTargetA = this._getFaceTargetAngles(layer.saccadeTarget),\n h = _this$_getFaceTargetA.h,\n v = _this$_getFaceTargetA.v;\n\n macroSaccade.h = h;\n macroSaccade.v = v;\n }\n\n this._updateLayerSpeed(layerName, macroSaccade.h, macroSaccade.v); // Restart the timers\n\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges.postMacro)));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n /**\n * Start a new wait timer that will set a new micro saccade movement when it\n * resolves.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\n * will be triggered.\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\n * will be triggered.\n */\n\n }, {\n key: "_initializeMicroTimer",\n value: function _initializeMicroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this3 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.microSaccadeTimer) {\n layer.microSaccadeTimer.cancel();\n }\n\n layer.microSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this3._setMicroSaccade(layerName);\n }\n });\n }\n /**\n * Start a new wait timer that will set a new macro saccade movement when it\n * resolves.\n *\n * @private\n *\n * @param {string} layerName - Name of the layer that owns the saccade motion.\n * @param {number} minWaitTime - Minimum number of seconds before a new saccade\n * will be triggered.\n * @param {number} maxWaitTime - Maximum number of seconds before a new saccade\n * will be triggered.\n */\n\n }, {\n key: "_initializeMacroTimer",\n value: function _initializeMacroTimer(layerName, minWaitTime, maxWaitTime) {\n var _this4 = this;\n\n var layer = this._managedLayers[layerName];\n var waitTime = core_Utils.getRandomFloat(minWaitTime, maxWaitTime);\n\n if (layer.macroSaccadeTimer) {\n layer.macroSaccadeTimer.cancel();\n }\n\n layer.macroSaccadeTimer = core_Utils.wait(waitTime, {\n onFinish: function onFinish() {\n _this4._setMacroSaccade(layerName);\n }\n });\n }\n /**\n * Sets a new target to look at.\n *\n * @param {Object|null} target - The new target to look at.\n */\n\n }, {\n key: "setTarget",\n value: function setTarget(target) {\n this.target = target;\n }\n /**\n * Finds an object given its name and sets it as the new target to look at.\n * Should be overloaded for each rendering engine implementation.\n *\n * @param {string} target - Name to search for.\n */\n\n }, {\n key: "setTargetByName",\n value: function setTargetByName(name) {\n if (!name) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using name ".concat(name, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\n * Finds an object given its id and sets it as the new target to look at.\n * Should be overloaded for each rendering engine implementation.\n *\n * @param {string|number} target - Id to search for.\n */\n\n }, {\n key: "setTargetById",\n value: function setTargetById(id) {\n if (!id) {\n this._target = null;\n }\n\n if (!this._scene) {\n throw new Error("Cannot set PointOfInterestFeature target using id ".concat(id, " on host ").concat(this._host.id, ". Scene must be defined."));\n }\n }\n /**\n * Start keeping track of an animation layer that owns a blend2d animation with\n * blendWeights corresponding to horizontal and vertical look angles.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation = \'look\'] - Name of the animation on the\n * layer whose blendWeights will be driven based on the angle between the lookTracker\n * and the lookTarget. This animation must be of type blend2d.\n * @param {number} [options.maxSpeed = 25] - The maximum speed at which the blend2d\n * blendWeights can be manipulated.\n * @param {string} [options.forwardAxis = \'PositiveZ\'] - Axis pointing from the\n * front of the lookReference object. Valid options are \'PositiveX\', \'NegativeX\',\n * \'PositiveY\', \'NegativeY\', \'PositiveZ\', \'NegativeZ\'.\n * @param {Object=} options.lookReference - 3D transformation node that the lookTracker\n * rotation limits should be calculated relative to. Defaults to the host owner.\n * @param {number} [options.hasSaccade = false] - Whether or not to include\n * saccadic motion onto the blendWeight animation. This should only be set to\n * true for blend2d animations representing eye animation.\n * @param {number=} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating layer weight.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating layer weight.\n */\n\n }, {\n key: "registerLookLayer",\n value: function registerLookLayer(layerName) {\n var _ref10 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref10$animation = _ref10.animation,\n animation = _ref10$animation === void 0 ? \'look\' : _ref10$animation,\n _ref10$maxSpeed = _ref10.maxSpeed,\n maxSpeed = _ref10$maxSpeed === void 0 ? 25 : _ref10$maxSpeed,\n reference = _ref10.reference,\n _ref10$forwardAxis = _ref10.forwardAxis,\n forwardAxis = _ref10$forwardAxis === void 0 ? \'PositiveZ\' : _ref10$forwardAxis,\n _ref10$hasSaccade = _ref10.hasSaccade,\n hasSaccade = _ref10$hasSaccade === void 0 ? false : _ref10$hasSaccade,\n _ref10$blendTime = _ref10.blendTime,\n blendTime = _ref10$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref10$blendTime,\n easingFn = _ref10.easingFn;\n\n // Validate reference object\n reference = reference || this._host.owner;\n\n if (!this.constructor._validateTransformObject(reference)) {\n throw new Error("Cannot initialize register look layer ".concat(layerName, " for PointOfInterestFeature on host ").concat(this._host.id, ". Reference must be defined as a valid transformation object."));\n } // Find vector associated with axis string\n\n\n forwardAxis = AxisMap[forwardAxis] !== undefined ? AxisMap[forwardAxis] : AxisMap.PositiveZ; // Store tracking configuration\n\n var trackingConfig = this._addTrackingConfig({\n reference: reference,\n forwardAxis: forwardAxis\n }); // Register the layer and animation\n\n\n this.registerLayer(layerName, {\n trackingConfig: trackingConfig,\n maxSpeed: maxSpeed,\n maxHSpeed: undefined,\n maxVSpeed: undefined,\n hDuration: undefined,\n vDuration: undefined,\n hVelocity: [0, 0],\n vVelocity: [0, 0],\n hasSaccade: hasSaccade,\n blendTime: blendTime,\n easingFn: easingFn,\n microSaccade: {\n h: 0,\n v: 0\n },\n macroSaccade: {\n h: 0,\n v: 0\n },\n saccadeTarget: FaceTargetTypes.EyeCenter,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._lookLayers[layerName] = animation; // Validate the look animation\n\n this._registerLookAnimation(layerName, animation); // Initialize saccade timers\n\n\n if (hasSaccade) {\n var macroSaccadeWaitRange = this._target ? MacroSaccadeWaitRanges.eyeTarget : MacroSaccadeWaitRanges["default"];\n\n this._initializeMicroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(MicroSaccadeWaitRanges["default"])));\n\n this._initializeMacroTimer.apply(this, [layerName].concat(PointOfInterestFeature_toConsumableArray(macroSaccadeWaitRange)));\n }\n }\n /**\n * Start keeping track of an animation layer that owns a blink animation. Blink\n * animations can be of any type, but if it is of type randomAnimation then a\n * it will be randomized each time a blink is called.\n *\n * @param {string} layerName - Name of the layer to keep track of.\n * @param {Object=} options - Options for the layer.\n * @param {string} [options.animation = \'blink\'] - Name of the blink animation\n * on the layer.\n * @param {number} [options.blendTime=[PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime]{@link PointOfInterestFeature#DEFAULT_LAYER_OPTIONS#blendTime}] -\n * Default amount of time to use when manipulating the layer\'s weight.\n * @param {Function=} options.easingFn - Default easing function to use when\n * manipulating the layer\'s weight.\n */\n\n }, {\n key: "registerBlinkLayer",\n value: function registerBlinkLayer(layerName) {\n var _ref11 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref11$animation = _ref11.animation,\n animation = _ref11$animation === void 0 ? \'blink\' : _ref11$animation,\n _ref11$blendTime = _ref11.blendTime,\n blendTime = _ref11$blendTime === void 0 ? PointOfInterestFeature.DEFAULT_LAYER_OPTIONS.blendTime : _ref11$blendTime,\n easingFn = _ref11.easingFn;\n\n // Register the layer and animation\n this.registerLayer(layerName, {\n blendTime: blendTime,\n easingFn: easingFn,\n animations: PointOfInterestFeature_defineProperty({}, animation, {})\n });\n this._blinkLayers[layerName] = animation;\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n var _this5 = this;\n\n PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "update", this).call(this, deltaTime); // Update the look angles\n\n\n if (this._target) {\n this._setLookAngles();\n } else {\n this._resetLookAngles();\n }\n\n var deltaSeconds = Math.min(deltaTime, MaxDelta) / 1000;\n var triggerBlink = false; // Set look blend values\n\n Object.entries(this._lookLayers).forEach(function (_ref12) {\n var _ref13 = PointOfInterestFeature_slicedToArray(_ref12, 2),\n layerName = _ref13[0],\n animName = _ref13[1];\n\n var options = _this5._managedLayers[layerName]; // Increment the saccade timers\n\n if (options.isActive && options.hasSaccade) {\n options.microSaccadeTimer.execute(deltaTime);\n options.macroSaccadeTimer.execute(deltaTime);\n } // Set the blend values\n\n\n if (options.animations[animName].isActive) {\n var currentH = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'X\');\n\n var currentV = _this5._host.AnimationFeature.getAnimationBlendWeight(layerName, animName, \'Y\');\n\n var targetH = options.trackingConfig.angles.h;\n var targetV = options.trackingConfig.angles.v; // Check if the look angle has changed enough to trigger a blink\n\n if (_this5._isTargetMoving && !triggerBlink) {\n var prevTargetH = options.trackingConfig.prevAngles.h;\n var prevTargetV = options.trackingConfig.prevAngles.v;\n var changeAmount = core_MathUtils.toDegrees(core_MathUtils.getAngleBetween([prevTargetH, prevTargetV], [targetH, targetV]));\n\n if (changeAmount >= BlinkThreshold) {\n triggerBlink = true;\n }\n }\n\n options.trackingConfig.prevAngles.h = targetH;\n options.trackingConfig.prevAngles.v = targetV; // Add in the saccade movement\n\n if (options.hasSaccade) {\n core_MathUtils.dampValue(0, options.macroSaccade.h + options.macroSaccade.h, options.hVelocity, options.hDuration, options.maxHSpeed);\n targetH += options.hVelocity[0];\n core_MathUtils.dampValue(0, options.macroSaccade.v + options.macroSaccade.v, options.vVelocity, options.vDuration, options.maxVSpeed);\n targetV += options.vVelocity[0];\n } // Clamp to max speed\n\n\n var factor = core_MathUtils.clamp(deltaSeconds * options.maxSpeed, 0, 1);\n targetH = core_MathUtils.lerp(currentH, targetH, factor);\n targetV = core_MathUtils.lerp(currentV, targetV, factor); // Update the blend values\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'X\', targetH);\n\n _this5._host.AnimationFeature.setAnimationBlendWeight(layerName, animName, \'Y\', targetV);\n }\n });\n\n if (!triggerBlink || !this._isTargetMoving) {\n return;\n } // Execute blink\n\n\n Object.entries(this._blinkLayers).forEach(function (_ref14) {\n var _ref15 = PointOfInterestFeature_slicedToArray(_ref14, 2),\n layerName = _ref15[0],\n animName = _ref15[1];\n\n var animation = _this5._managedLayers[layerName].animations[animName];\n\n if (animation.isActive) {\n _this5._host.AnimationFeature.playAnimation(layerName, animName);\n }\n });\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n /**\n * @inner\n * @namespace PointOfInterestFeature\n */\n var api = PointOfInterestFeature_get(PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @see core/PointOfInterestFeature#target\n */\n target: {\n get: function get() {\n return _this6.target;\n },\n set: function set(target) {\n _this6.target = target;\n }\n }\n });\n Object.assign(api, {\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#registerLookLayer\n */\n registerLookLayer: this.registerLookLayer.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#registerBlinkLayer\n */\n registerBlinkLayer: this.registerBlinkLayer.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#setTarget\n */\n setTarget: this.setTarget.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#setTargetByName\n */\n setTargetByName: this.setTargetByName.bind(this),\n\n /**\n * @memberof PointOfInterestFeature\n * @instance\n * @method\n * @see core/PointOfInterestFeature#setTargetById\n */\n setTargetById: this.setTargetById.bind(this)\n });\n return api;\n }\n }], [{\n key: "_getWorldPosition",\n value: function _getWorldPosition(obj) {\n return [0, 0, 0];\n }\n /**\n * Return a matrix representing the global transformation matrix of an object.\n * Should be overloaded for each rendering engine implementation.\n *\n * @private\n *\n * @param {any} obj - Engine-specific 3D transform object.\n *\n * @returns {Array.} - An array consisting of 16 numbers representing\n * the 3d transformation.\n */\n\n }, {\n key: "_getWorldMatrix",\n value: function _getWorldMatrix(obj) {\n return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n }\n /**\n * Rotate the given local direction vector by the object\'s world rotation matrix.\n *\n * @private\n *\n * @param {any} obj - Engine-specific 3D transform object.\n * @param {Array.} forwardVector - Unit vector representing the local\n * forward direction of the object.\n *\n * @returns {Array.}\n */\n\n }, {\n key: "_getObjectDirection",\n value: function _getObjectDirection(obj) {\n var forwardVector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : AxisMap.PositiveZ;\n var rotation = core_MathUtils.getRotationMatrix(this._getWorldMatrix(obj));\n return core_MathUtils.rotateVector(forwardVector, rotation);\n }\n /**\n * Calculate horizontal and vertical look angles in degrees given spherical theta\n * and phi angles in radians.\n *\n * @param {number} theta - Vertical/polar angle in radians where 0 points directly\n * along positive Y axis.\n * @param {number} phi - Horizontal/azimuthal angle in radians.\n *\n * @returns {Object} - An object with the signature {h: number, v: number} where\n * h represents horizontal rotation in degrees and v represents vertical rotation\n * in degrees.\n */\n\n }, {\n key: "_sphericalToBlendValue",\n value: function _sphericalToBlendValue(theta, phi) {\n var h = core_MathUtils.toDegrees(phi); // Offset the vertical angle so 0 is pointing forward instead of up\n\n var v = core_MathUtils.toDegrees(theta) - 90; // Convert vertical angle to -180, 180 range\n\n return {\n h: h,\n v: v\n };\n }\n }, {\n key: "_validateTransformObject",\n value: function _validateTransformObject(obj) {\n return obj instanceof Object;\n }\n }]);\n\n return PointOfInterestFeature;\n}(core_AbstractHostFeature.mix(awspack_SSMLSpeechmarkInterface.Mixin, animpack_ManagedAnimationLayerInterface.Mixin));\n\n/* harmony default export */ var core_PointOfInterestFeature = (PointOfInterestFeature_PointOfInterestFeature);\n\n// CONCATENATED MODULE: ./src/three.js/PointOfInterestFeature.js\nfunction three_js_PointOfInterestFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { three_js_PointOfInterestFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { three_js_PointOfInterestFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return three_js_PointOfInterestFeature_typeof(obj); }\n\nfunction three_js_PointOfInterestFeature_toConsumableArray(arr) { return three_js_PointOfInterestFeature_arrayWithoutHoles(arr) || three_js_PointOfInterestFeature_iterableToArray(arr) || three_js_PointOfInterestFeature_unsupportedIterableToArray(arr) || three_js_PointOfInterestFeature_nonIterableSpread(); }\n\nfunction three_js_PointOfInterestFeature_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction three_js_PointOfInterestFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return three_js_PointOfInterestFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return three_js_PointOfInterestFeature_arrayLikeToArray(o, minLen); }\n\nfunction three_js_PointOfInterestFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction three_js_PointOfInterestFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return three_js_PointOfInterestFeature_arrayLikeToArray(arr); }\n\nfunction three_js_PointOfInterestFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction three_js_PointOfInterestFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction three_js_PointOfInterestFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction three_js_PointOfInterestFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) three_js_PointOfInterestFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) three_js_PointOfInterestFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction three_js_PointOfInterestFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { three_js_PointOfInterestFeature_get = Reflect.get; } else { three_js_PointOfInterestFeature_get = function _get(target, property, receiver) { var base = three_js_PointOfInterestFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return three_js_PointOfInterestFeature_get(target, property, receiver || target); }\n\nfunction three_js_PointOfInterestFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = three_js_PointOfInterestFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction three_js_PointOfInterestFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) three_js_PointOfInterestFeature_setPrototypeOf(subClass, superClass); }\n\nfunction three_js_PointOfInterestFeature_setPrototypeOf(o, p) { three_js_PointOfInterestFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return three_js_PointOfInterestFeature_setPrototypeOf(o, p); }\n\nfunction three_js_PointOfInterestFeature_createSuper(Derived) { var hasNativeReflectConstruct = three_js_PointOfInterestFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = three_js_PointOfInterestFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = three_js_PointOfInterestFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return three_js_PointOfInterestFeature_possibleConstructorReturn(this, result); }; }\n\nfunction three_js_PointOfInterestFeature_possibleConstructorReturn(self, call) { if (call && (three_js_PointOfInterestFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return three_js_PointOfInterestFeature_assertThisInitialized(self); }\n\nfunction three_js_PointOfInterestFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction three_js_PointOfInterestFeature_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; } }\n\nfunction three_js_PointOfInterestFeature_getPrototypeOf(o) { three_js_PointOfInterestFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return three_js_PointOfInterestFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * @extends core/PointOfInterestFeature\n * @alias three.js/PointOfInterestFeature\n */\n\nvar three_js_PointOfInterestFeature_PointOfInterestFeature = /*#__PURE__*/function (_CorePointOfInterestF) {\n three_js_PointOfInterestFeature_inherits(PointOfInterestFeature, _CorePointOfInterestF);\n\n var _super = three_js_PointOfInterestFeature_createSuper(PointOfInterestFeature);\n\n function PointOfInterestFeature() {\n three_js_PointOfInterestFeature_classCallCheck(this, PointOfInterestFeature);\n\n return _super.apply(this, arguments);\n }\n\n three_js_PointOfInterestFeature_createClass(PointOfInterestFeature, [{\n key: "_validateTransformObject",\n value: function _validateTransformObject(obj) {\n return obj instanceof THREE.Object3D;\n }\n }, {\n key: "setTargetByName",\n value: function setTargetByName(name) {\n three_js_PointOfInterestFeature_get(three_js_PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "setTargetByName", this).call(this, name);\n\n if (!name) {\n return;\n }\n\n this.target = this._scene.getObjectByName(name);\n }\n }, {\n key: "setTargetById",\n value: function setTargetById(id) {\n three_js_PointOfInterestFeature_get(three_js_PointOfInterestFeature_getPrototypeOf(PointOfInterestFeature.prototype), "setTargetByName", this).call(this, id);\n\n if (!id) {\n return;\n }\n\n this.target = this._scene.getObjectById(id);\n }\n }], [{\n key: "_getWorldPosition",\n value: function _getWorldPosition(obj) {\n obj.updateWorldMatrix(true, false);\n return obj.matrixWorld.elements.slice(12, 15);\n }\n }, {\n key: "_getWorldMatrix",\n value: function _getWorldMatrix(obj) {\n obj.updateWorldMatrix(true, false);\n return three_js_PointOfInterestFeature_toConsumableArray(obj.matrixWorld.elements);\n }\n }]);\n\n return PointOfInterestFeature;\n}(core_PointOfInterestFeature);\n\n/* harmony default export */ var three_js_PointOfInterestFeature = (three_js_PointOfInterestFeature_PointOfInterestFeature);\n\n// CONCATENATED MODULE: ./src/three.js/HostEnvironment.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n// eslint-disable-next-line import/prefer-default-export\nvar env = \'three\';\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechUtils.js\nfunction TextToSpeechUtils_toConsumableArray(arr) { return TextToSpeechUtils_arrayWithoutHoles(arr) || TextToSpeechUtils_iterableToArray(arr) || TextToSpeechUtils_unsupportedIterableToArray(arr) || TextToSpeechUtils_nonIterableSpread(); }\n\nfunction TextToSpeechUtils_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction TextToSpeechUtils_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction TextToSpeechUtils_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return TextToSpeechUtils_arrayLikeToArray(arr); }\n\nfunction TextToSpeechUtils_slicedToArray(arr, i) { return TextToSpeechUtils_arrayWithHoles(arr) || TextToSpeechUtils_iterableToArrayLimit(arr, i) || TextToSpeechUtils_unsupportedIterableToArray(arr, i) || TextToSpeechUtils_nonIterableRest(); }\n\nfunction TextToSpeechUtils_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction TextToSpeechUtils_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return TextToSpeechUtils_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return TextToSpeechUtils_arrayLikeToArray(o, minLen); }\n\nfunction TextToSpeechUtils_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction TextToSpeechUtils_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction TextToSpeechUtils_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction TextToSpeechUtils_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechUtils_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechUtils_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechUtils_typeof(obj); }\n\nfunction TextToSpeechUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechUtils_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\n * A collection of useful text-to-speech functions.\n *\n * @hideconstructor\n */\n\nvar TextToSpeechUtils_TextToSpeechUtils = /*#__PURE__*/function () {\n function TextToSpeechUtils() {\n TextToSpeechUtils_classCallCheck(this, TextToSpeechUtils);\n }\n\n TextToSpeechUtils_createClass(TextToSpeechUtils, null, [{\n key: "autoGenerateSSMLMarks",\n value:\n /**\n * Returns a new string with SSML marks inserted based on\n * matches between the input string and the input map. The\n * word matches are case-insensitive. Words within existing\n * SSML tags will not be affected. Input text will be surrounded\n * by tags if needed.\n *\n * @param {string} text - Input string.\n * @param {object} map - Input object that maps mark keys\n * to arrays of words. Example:\n *\n * {\n * \'mark:sad\' : [\'sad\', \'blue\', \'down\'],\n * \'mark:happy\' : [\'joy\', \'glad\', \'great\'],\n * \'mark:no\' : [\'no\', \'nah\', \'nay\', \'sure\']\n * }\n * @param {Array.} [randomMarks = []] - If there are sentences that don\'t\n * match any words from the map object, marks from this array will be randomly\n * chosen and inserted.\n *\n * @returns {string} - Updated input string.\n */\n function autoGenerateSSMLMarks(text, map) {\n var _this = this;\n\n var randomMarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (TextToSpeechUtils_typeof(map) !== \'object\' || map === null) {\n throw new Error("Cannot generate SSML marks for text \\"".concat(text, "\\" because map is not an object."));\n } // process the input map into an internal format\n\n\n var internalMap = this._processInputMap(map);\n\n var speakTags = [\'\', \'\'];\n var ssmlMarkRegex = //;\n var ssmlTagRegex = /<[^>]*>/g; // Identify any existing SSML tags\n\n var existingTags = [];\n var result = ssmlTagRegex.exec(text);\n\n while (result !== null) {\n existingTags.push({\n start: result.index,\n end: result.index + result[0].length,\n text: result[0]\n });\n result = ssmlTagRegex.exec(text);\n }\n\n var chunks = [];\n var index = 0;\n var ssmlMarkResult;\n var duplicateMarkToCheck = [];\n existingTags.forEach(function (existingTag) {\n var substr = text.slice(index, existingTag.start);\n\n if (substr !== \'\') {\n // auto-mark non-tag text\n chunks.push(_this._insertMarks(substr, internalMap, duplicateMarkToCheck));\n duplicateMarkToCheck = [];\n }\n\n ssmlMarkResult = ssmlMarkRegex.exec(existingTag.text);\n\n if (ssmlMarkResult !== null) {\n var markText = ssmlMarkResult[1];\n duplicateMarkToCheck.push(markText);\n } else if (!speakTags.includes(existingTag.text)) {\n chunks.push(existingTag.text);\n } // advance the index\n\n\n index = existingTag.end;\n });\n chunks.push(this._insertMarks(text.slice(index), internalMap, duplicateMarkToCheck));\n var markedText = chunks.join(\'\');\n\n if (randomMarks && randomMarks.length > 0) {\n // add random marks to any unmarked sentences\n markedText = this.addMarksToUnmarkedSentences(markedText, randomMarks);\n }\n\n return TextToSpeechUtils.validateText(markedText);\n }\n /**\n * Returns a new string with a random SSML mark inserted at each sentence that\n * does not already contain an SSML mark.\n *\n * @param {string} text - Input string.\n * @param {Array.} marks - Any array of random SSML marks to choose from\n * when modifying the text.\n *\n * @returns {string}\n */\n\n }, {\n key: "addMarksToUnmarkedSentences",\n value: function addMarksToUnmarkedSentences(text, marks) {\n if (!marks || marks.length === 0) return text;\n var ssmlMarkRegex = //g;\n var ssmlTagRegex = /<[^>]*>/g; // Find the indices of any marks in the text\n\n var markIndices = [];\n var markResult = ssmlMarkRegex.exec(text);\n\n while (markResult !== null) {\n markIndices.push(markResult.index);\n markResult = ssmlMarkRegex.exec(text);\n } // Find all SSML tags in the text\n\n\n var existingTags = [];\n var ssmlResult = ssmlTagRegex.exec(text);\n\n while (ssmlResult !== null) {\n existingTags.push({\n start: ssmlResult.index,\n end: ssmlResult.index + ssmlResult[0].length,\n text: ssmlResult[0]\n });\n ssmlResult = ssmlTagRegex.exec(text);\n } // Create a copy of the text with all SSML marks replaces with whitespace\n\n\n var cleanedText = text.slice();\n existingTags.forEach(function (existingSsml) {\n var whitespace = new Array(existingSsml.text.length + 1).join(\' \');\n cleanedText = [cleanedText.slice(0, existingSsml.start), whitespace, cleanedText.slice(existingSsml.end)].join(\'\');\n });\n\n var sentenceEndIndices = this._getSentenceEnds(cleanedText); // Only insert random marks into sentences that don\'t already have any\n\n\n var prevIndex = 0;\n var targetIndices = sentenceEndIndices.filter(function (index) {\n var containsMark = markIndices.findIndex(function (markIndex) {\n return prevIndex <= markIndex && index > markIndex;\n }) !== -1;\n prevIndex = index;\n return !containsMark;\n });\n\n var randomMarkedText = this._insertRandomMarksAt(text, targetIndices, marks);\n\n return randomMarkedText;\n }\n /**\n * Generate a version of given text that is enclosed by Polly ssml speak tags.\n *\n * @param {string} text - The text to validate.\n *\n * @returns {string} - Updated input string.\n */\n\n }, {\n key: "validateText",\n value: function validateText(text) {\n if (!text) {\n text = \'\';\n } else {\n text = text.replace(/(^\\s*<\\s*speak\\s*)>\\s*|(^\\s*)/, \'\').replace(/(\\s*<\\s*\\/\\s*speak\\s*>\\s*$|\\s*$)/, \'\');\n }\n\n return text;\n }\n /**\n * Parse an input string and insert SSML marks based on\n * word matches in a map.\n *\n * @private\n *\n * @param {string} text - Input string.\n * @param {Array.} [indices = []] - An array of indices in the text input\n * where random marks should be inserted.\n * @param {Array.} [marks = []] - An array of mark strings to choose\n * from when inserting random marks.\n *\n * @returns {string} - Updated input string.\n */\n\n }, {\n key: "_insertRandomMarksAt",\n value: function _insertRandomMarksAt(text) {\n var indices = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var marks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n if (!marks || marks.length === 0 || !indices || indices.length === 0) {\n return text;\n }\n\n var offset = 0;\n indices.forEach(function (index) {\n var randomMark = "");\n text = [text.slice(0, index + offset), randomMark, text.slice(index + offset)].join(\'\');\n offset += randomMark.length;\n });\n return text;\n }\n /**\n * Parses a string of text and returns an array containing the indices\n * of the last character in a sentence that is not in the following list:\n * (\'.\', \'?\', \'!\')\n *\n * @private\n *\n * @param {string} text - Text to process for end of sentence\n * indices.\n *\n * @returns {Array.} - Array of end of sentence indices.\n */\n\n }, {\n key: "_getSentenceEnds",\n value: function _getSentenceEnds(text) {\n var sentenceRegex = /[^.!?]+[.!?]+/g;\n var endSentenceRegex = /[.!?]+/;\n var result = sentenceRegex.exec(text);\n var sentenceEnds = [];\n\n while (result !== null) {\n // find the last non-punctuation character\n var punctResult = endSentenceRegex.exec(result[0]);\n sentenceEnds.push(result.index + result[0].length - punctResult[0].length);\n result = sentenceRegex.exec(text);\n }\n\n return sentenceEnds;\n }\n /**\n * Parse an input string and insert SSML marks based on\n * word matches in a map.\n *\n * @private\n *\n * @param {string} text - Input string.\n * @param {Map} map - Mapping of words to mark values that\n * will be inserted as the value for a mark\'s \'name\' attribute.\n * @param {Array} duplicatesToCheck - A list of mark values to check for duplicate against the first word\n *\n * @returns {string} - Updated input string.\n */\n\n }, {\n key: "_insertMarks",\n value: function _insertMarks(text, map, duplicatesToCheck) {\n if (text === \'\') return text;\n var wordRegex = /\\w+|\\s+|[^\\s\\w]+/g;\n var lowerCaseWord;\n var checkDuplicate = true;\n var markedWords = text.match(wordRegex).map(function (word) {\n lowerCaseWord = word.toLowerCase();\n\n if (map.has(lowerCaseWord)) {\n var marks = map.get(lowerCaseWord).map(function (mark) {\n if (checkDuplicate) {\n checkDuplicate = false;\n return duplicatesToCheck.includes(mark) ? \'\' : "");\n } else {\n return "");\n }\n });\n return "".concat(marks.join(\'\')).concat(word);\n } else {\n checkDuplicate = false;\n return word;\n }\n });\n var existingMarks = duplicatesToCheck.map(function (mark) {\n return "");\n });\n return "".concat(existingMarks.join(\'\')).concat(markedWords.join(\'\'));\n }\n /**\n * Processes an input object for mapping an array\n * of words to specific mark keys. Converts the input\n * map into a Map with a more efficient format for\n * performing mark injection.\n *\n * @private\n *\n * @param {object} map - Input object that maps mark keys\n * to arrays of words.\n *\n * @returns {Map} - Map for internal use.\n */\n\n }, {\n key: "_processInputMap",\n value: function _processInputMap(map) {\n var internalMap = new Map();\n var list = [];\n Object.entries(map).forEach(function (_ref) {\n var _ref2 = TextToSpeechUtils_slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n\n if (!Array.isArray(value)) {\n throw new Error("Cannot generate SSML marks from map \\"".concat(map, "\\" because value for key \'").concat(key, "\' is not an array."));\n }\n\n value.forEach(function (word) {\n var lowerCaseWord = word.toLowerCase();\n list = internalMap.get(lowerCaseWord);\n\n if (list !== undefined && !list.includes(key)) {\n internalMap.set(lowerCaseWord, [].concat(TextToSpeechUtils_toConsumableArray(list), [key]));\n } else {\n internalMap.set(lowerCaseWord, [key]);\n }\n });\n });\n return internalMap;\n }\n }]);\n\n return TextToSpeechUtils;\n}();\n\n/* harmony default export */ var awspack_TextToSpeechUtils = (TextToSpeechUtils_TextToSpeechUtils);\n// CONCATENATED MODULE: ./src/core/awspack/AbstractSpeech.js\nfunction AbstractSpeech_toConsumableArray(arr) { return AbstractSpeech_arrayWithoutHoles(arr) || AbstractSpeech_iterableToArray(arr) || AbstractSpeech_unsupportedIterableToArray(arr) || AbstractSpeech_nonIterableSpread(); }\n\nfunction AbstractSpeech_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction AbstractSpeech_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractSpeech_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractSpeech_arrayLikeToArray(o, minLen); }\n\nfunction AbstractSpeech_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractSpeech_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractSpeech_arrayLikeToArray(arr); }\n\nfunction AbstractSpeech_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractSpeech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractSpeech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractSpeech_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractSpeech_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractSpeech_defineProperties(Constructor, staticProps); return Constructor; }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Class that can play back audio generated by AWS Polly and synchronized emit\r\n * speechmark messages.\r\n *\r\n * @abstract\r\n */\n\nvar AbstractSpeech_AbstractSpeech = /*#__PURE__*/function () {\n /**\r\n * @constructor\r\n *\r\n * @param {core/TextToSpeechFeature} speaker - The feature that owns the Speech and\r\n * will emit speechmark messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n */\n function AbstractSpeech(speaker, text) {\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n AbstractSpeech_classCallCheck(this, AbstractSpeech);\n\n this._speaker = speaker;\n this._text = text;\n this._speechmarks = speechmarks;\n this._speechmarkOffset = 0;\n\n this._reset();\n }\n /**\r\n * Reset tracking properties.\r\n *\r\n * @private\r\n *\r\n * @param {number} [currentTime=0] - Time to use for _startTime.\r\n */\n\n\n AbstractSpeech_createClass(AbstractSpeech, [{\n key: "_reset",\n value: function _reset() {\n var currentTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this._startTime = currentTime;\n this._localTime = 0;\n this._pauseTime = 0;\n this._playing = false;\n this._markIter = this._speechmarks.values();\n\n var _this$_markIter$next = this._markIter.next(),\n value = _this$_markIter$next.value,\n done = _this$_markIter$next.done;\n\n this._currentMark = value;\n this._endTime = this._speechmarks.length ? this._speechmarks[this._speechmarks.length - 1].time : 0;\n this._done = done;\n this._promise = null;\n }\n /**\r\n * Create a new promise that will stop playback and emit messages for this speech.\r\n *\r\n * @param {Function=} onFinish - Funciton to execute once the speech stops.\r\n * @param {onError=} onError - Function to execute if the speech encounters an\r\n * error.\r\n * @param {Function=} onInterrupt - Function to execute if the speech is canceled.\r\n *\r\n * @returns {Deferred}\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_createPromise",\n value: function _createPromise(onFinish, onError, onInterrupt) {\n var _this = this;\n\n var onResolve = function onResolve(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n if (typeof onFinish === \'function\') {\n onFinish(value);\n }\n };\n\n var onReject = function onReject(e) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.stop, _this);\n\n console.error("".concat(_this.constructor.name, " encountered an unexpected error: ").concat(e));\n\n if (typeof onError === \'function\') {\n onError(e);\n }\n };\n\n var onCancel = function onCancel(value) {\n _this._playing = false;\n\n _this._speaker.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n _this._speaker.constructor.emit(_this._speaker.constructor.EVENTS.interrupt, _this);\n\n if (typeof onInterrupt === \'function\') {\n onInterrupt(value);\n }\n };\n\n this._promise = new core_Deferred(undefined, onResolve, onReject, onCancel);\n return this._promise;\n }\n /**\r\n * Return whether or not the speech has reached it\'s end.\r\n *\r\n * @private\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._done && this._localTime >= this._endTime;\n }\n /**\r\n * Gets the playback state of the audio.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "playing",\n get: function get() {\n return this._playing;\n }\n /**\r\n * Gets the text of the speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n\n }, {\n key: "text",\n get: function get() {\n return this._text;\n }\n /**\r\n * Gets a shallow copy of the speechmarks array for the speech.\r\n *\r\n * @readonly\r\n * @type {Array.}\r\n */\n\n }, {\n key: "speechmarks",\n get: function get() {\n return AbstractSpeech_toConsumableArray(this._speechmarks);\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset / 1000;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset * 1000; // Store as milliseconds\n }\n /**\r\n * Emit speechmark messages as they are encountered in sync with audio.\r\n *\r\n * @param {number} currentTime - Current global time when update was called.\r\n */\n\n }, {\n key: "update",\n value: function update(currentTime) {\n if (!this._playing) {\n return;\n } // Update local audio time\n\n\n this._localTime = currentTime - this._startTime;\n\n if (!this._done) {\n // Emit speechmark messages for marks up to the current time\n while (!this._done && this._currentMark.time + this._speechmarkOffset <= this._localTime) {\n this._speaker.emit(this._speaker.constructor.EVENTS[this._currentMark.type], {\n speech: this,\n mark: this._currentMark\n });\n\n var _this$_markIter$next2 = this._markIter.next(),\n value = _this$_markIter$next2.value,\n done = _this$_markIter$next2.done;\n\n this._currentMark = value;\n this._done = done;\n }\n } // End playback\n\n\n if (this._checkFinished()) {\n this.stop();\n\n this._reset();\n }\n }\n /**\r\n * Play the speech from the beginning.\r\n *\r\n * @param {number} currentTime - Current global time when play was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._reset(currentTime);\n\n this._playing = true;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.play, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.play, this);\n\n return this._createPromise(onFinish, onError, onInterrupt);\n }\n /**\r\n * Pause the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when pause was called.\r\n */\n\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._playing = false;\n this._pauseTime = currentTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.pause, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.pause, this);\n }\n /**\r\n * Resume the speech at the current time.\r\n *\r\n * @param {number} currentTime - Current global time when resume was called.\r\n * @param {Function=} onFinish - Optional function to execute once the speech\r\n * promise resolves.\r\n * @param {Function=} onError - Optional function to execute if the speech\r\n * encounters and error during playback.\r\n * @param {Function=} onInterrupt - Optional function to execute if the speech\r\n * is canceled.\r\n *\r\n * @returns {Deferred} Resolves once the speech reaches the end of playback.\r\n */\n\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n // Play from the beginning if the speech hasn\'t played yet\n if (!this._promise) {\n this._reset(currentTime);\n\n this._createPromise(onFinish, onError, onInterrupt);\n }\n\n this._playing = true;\n this._startTime += currentTime - this._pauseTime;\n\n this._speaker.emit(this._speaker.constructor.EVENTS.resume, this);\n\n this._speaker.constructor.emit(this._speaker.constructor.EVENTS.resume, this);\n\n return this._promise;\n }\n /**\r\n * Cancels playback of the speech at the current time. Cancel the speech promise.\r\n */\n\n }, {\n key: "cancel",\n value: function cancel() {\n if (this._promise) {\n this._promise.cancel();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n /**\r\n * Stop the speech and reset time to the beginning. Resolve the speech promise.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._promise) {\n this._promise.resolve();\n\n this._promise = null;\n }\n\n this._playing = false;\n }\n }]);\n\n return AbstractSpeech;\n}();\n\n/* harmony default export */ var awspack_AbstractSpeech = (AbstractSpeech_AbstractSpeech);\n// CONCATENATED MODULE: ./src/core/awspack/Speech.js\nfunction Speech_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Speech_typeof = function _typeof(obj) { return typeof obj; }; } else { Speech_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Speech_typeof(obj); }\n\nfunction Speech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction Speech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction Speech_createClass(Constructor, protoProps, staticProps) { if (protoProps) Speech_defineProperties(Constructor.prototype, protoProps); if (staticProps) Speech_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction Speech_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { Speech_get = Reflect.get; } else { Speech_get = function _get(target, property, receiver) { var base = Speech_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return Speech_get(target, property, receiver || target); }\n\nfunction Speech_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = Speech_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction Speech_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Speech_setPrototypeOf(subClass, superClass); }\n\nfunction Speech_setPrototypeOf(o, p) { Speech_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Speech_setPrototypeOf(o, p); }\n\nfunction Speech_createSuper(Derived) { var hasNativeReflectConstruct = Speech_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Speech_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Speech_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Speech_possibleConstructorReturn(this, result); }; }\n\nfunction Speech_possibleConstructorReturn(self, call) { if (call && (Speech_typeof(call) === "object" || typeof call === "function")) { return call; } return Speech_assertThisInitialized(self); }\n\nfunction Speech_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction Speech_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; } }\n\nfunction Speech_getPrototypeOf(o) { Speech_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Speech_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * The built-in class for asynchronous Promises.\r\n * @external Audio\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement/Audio\r\n */\n\n/**\r\n * @extends AbstractSpeech\r\n * @alias core/Speech\r\n */\n\nvar Speech = /*#__PURE__*/function (_AbstractSpeech) {\n Speech_inherits(Speech, _AbstractSpeech);\n\n var _super = Speech_createSuper(Speech);\n\n /**\r\n * @constructor\r\n *\r\n * @param {TextToSpeech} speaker - The owner of the Speech that will emit speechmark\r\n * messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} [speechmarks=[]] - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n * @param {Object} audioConfig - Object containing audio and url.\r\n * @param {external:Audio} audioConfig.audio - Playable audio object.\r\n */\n function Speech(speaker, text) {\n var _this;\n\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var audioConfig = arguments.length > 3 ? arguments[3] : undefined;\n\n Speech_classCallCheck(this, Speech);\n\n _this = _super.call(this, speaker, text, speechmarks);\n _this._audio = audioConfig.audio; // Keep track of whether the audio has finished playing through\n\n _this._audio.onended = function () {\n _this._audioFinished = true;\n };\n\n _this._audioFinished = true;\n return _this;\n }\n\n Speech_createClass(Speech, [{\n key: "_checkFinished",\n value: function _checkFinished() {\n return this._audioFinished && Speech_get(Speech_getPrototypeOf(Speech.prototype), "_checkFinished", this).call(this);\n }\n /**\r\n * Gets the playable audio for the speech.\r\n *\r\n * @readonly\r\n * @type {external:Audio}\r\n */\n\n }, {\n key: "audio",\n get: function get() {\n return this._audio;\n }\n /**\r\n * Gets the audio volume for the speech.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._audio.volume;\n }\n /**\r\n * Sets the audio volume for the speech.\r\n */\n ,\n set: function set(volume) {\n this._audio.volume = volume;\n }\n /**\r\n * Set the audio\'s current local time and play it.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_playAudio",\n value: function _playAudio() {\n var _this2 = this;\n\n if (this._speechmarkOffset < 0) {\n this._audio.currentTime = this._speechmarkOffset;\n setTimeout(function () {\n if (_this2._playing) {\n _this2._audio.currentTime = (_this2._localTime + _this2._speechmarkOffset) / 1000;\n\n _this2._audio.play();\n }\n }, -this._speechmarkOffset);\n } else {\n this._audio.currentTime = 0;\n\n this._audio.play();\n }\n }\n /**\r\n * Pause the audio once it is playable.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_pauseAudio",\n value: function _pauseAudio() {\n var _this3 = this;\n\n this._audio.play().then(function () {\n if (!_this3._playing) {\n _this3._audio.pause();\n }\n });\n }\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._playAudio();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "play", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "pause",\n value: function pause(currentTime) {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "pause", this).call(this, currentTime);\n }\n }, {\n key: "resume",\n value: function resume(currentTime, onFinish, onError, onInterrupt) {\n this._audioFinished = false;\n\n this._audio.play();\n\n return Speech_get(Speech_getPrototypeOf(Speech.prototype), "resume", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n this._pauseAudio();\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n this._pauseAudio();\n\n this._audio.currentTime = 0;\n\n Speech_get(Speech_getPrototypeOf(Speech.prototype), "stop", this).call(this);\n }\n }]);\n\n return Speech;\n}(awspack_AbstractSpeech);\n\n/* harmony default export */ var awspack_Speech = (Speech);\n// CONCATENATED MODULE: ./src/three.js/awspack/Speech.js\nfunction awspack_Speech_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { awspack_Speech_typeof = function _typeof(obj) { return typeof obj; }; } else { awspack_Speech_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return awspack_Speech_typeof(obj); }\n\nfunction awspack_Speech_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction awspack_Speech_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction awspack_Speech_createClass(Constructor, protoProps, staticProps) { if (protoProps) awspack_Speech_defineProperties(Constructor.prototype, protoProps); if (staticProps) awspack_Speech_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction awspack_Speech_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { awspack_Speech_get = Reflect.get; } else { awspack_Speech_get = function _get(target, property, receiver) { var base = awspack_Speech_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return awspack_Speech_get(target, property, receiver || target); }\n\nfunction awspack_Speech_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = awspack_Speech_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction awspack_Speech_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) awspack_Speech_setPrototypeOf(subClass, superClass); }\n\nfunction awspack_Speech_setPrototypeOf(o, p) { awspack_Speech_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return awspack_Speech_setPrototypeOf(o, p); }\n\nfunction awspack_Speech_createSuper(Derived) { var hasNativeReflectConstruct = awspack_Speech_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = awspack_Speech_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = awspack_Speech_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return awspack_Speech_possibleConstructorReturn(this, result); }; }\n\nfunction awspack_Speech_possibleConstructorReturn(self, call) { if (call && (awspack_Speech_typeof(call) === "object" || typeof call === "function")) { return call; } return awspack_Speech_assertThisInitialized(self); }\n\nfunction awspack_Speech_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction awspack_Speech_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; } }\n\nfunction awspack_Speech_getPrototypeOf(o) { awspack_Speech_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return awspack_Speech_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Threejs Audio object\r\n * @external "THREE.Audio"\r\n * @see https://threejs.org/docs/#api/en/audio/Audio\r\n */\n\n/**\r\n * Threejs PositionalAudio object\r\n * @external "THREE.PositionalAudio"\r\n * @see https://threejs.org/docs/#api/en/audio/PositionalAudio\r\n */\n\n/**\r\n * @extends core/Speech\r\n * @alias three.js/Speech\r\n */\n\nvar Speech_Speech = /*#__PURE__*/function (_CoreSpeech) {\n awspack_Speech_inherits(Speech, _CoreSpeech);\n\n var _super = awspack_Speech_createSuper(Speech);\n\n /**\r\n * @constructor\r\n *\r\n * @param {three.js/TextToSpeechFeature} speaker - The owner of the Speech that\r\n * will emit speechmark messages.\r\n * @param {string} text - The text of the speech.\r\n * @param {Array.} speechmarks - An array of speechmark objects representing\r\n * the text and timing of the speech.\r\n * @param {Object} audioConfig - Object containing audio and url.\r\n * @param {external:Audio} audioConfig.audio - Playable audio object.\r\n * @param {(external:"THREE.Audio"|external:"THREE.PositionalAudio")} audioConfig.threeAudio -\r\n * Three.js audio object.\r\n */\n function Speech(textToSpeech, text) {\n var _this;\n\n var speechmarks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var audioConfig = arguments.length > 3 ? arguments[3] : undefined;\n\n awspack_Speech_classCallCheck(this, Speech);\n\n _this = _super.call(this, textToSpeech, text, speechmarks, audioConfig);\n _this._threeAudio = audioConfig.threeAudio;\n return _this;\n }\n /**\r\n * Gets the Three.js audio object for the speech.\r\n *\r\n * @readonly\r\n * @type {(external:"THREE.Audio"|external:"THREE.PositionalAudio")}\r\n */\n\n\n awspack_Speech_createClass(Speech, [{\n key: "audio",\n get: function get() {\n return this._threeAudio;\n }\n }, {\n key: "_pauseAudio",\n value: function _pauseAudio() {\n this._audio.pause();\n }\n }, {\n key: "play",\n value: function play(currentTime, onFinish, onError, onInterrupt) {\n // Re-connect the Audio element to stop playback\n this._threeAudio.disconnect();\n\n this._threeAudio.connect();\n\n return awspack_Speech_get(awspack_Speech_getPrototypeOf(Speech.prototype), "play", this).call(this, currentTime, onFinish, onError, onInterrupt);\n }\n }]);\n\n return Speech;\n}(awspack_Speech);\n\n/* harmony default export */ var three_js_awspack_Speech = (Speech_Speech);\n// CONCATENATED MODULE: ./src/core/awspack/AbstractTextToSpeechFeature.js\nfunction AbstractTextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { AbstractTextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return AbstractTextToSpeechFeature_typeof(obj); }\n\nfunction AbstractTextToSpeechFeature_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; }\n\nfunction AbstractTextToSpeechFeature_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { AbstractTextToSpeechFeature_ownKeys(Object(source), true).forEach(function (key) { AbstractTextToSpeechFeature_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { AbstractTextToSpeechFeature_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction AbstractTextToSpeechFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction AbstractTextToSpeechFeature_slicedToArray(arr, i) { return AbstractTextToSpeechFeature_arrayWithHoles(arr) || AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr, i) || AbstractTextToSpeechFeature_nonIterableRest(); }\n\nfunction AbstractTextToSpeechFeature_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction AbstractTextToSpeechFeature_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction AbstractTextToSpeechFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction AbstractTextToSpeechFeature_toConsumableArray(arr) { return AbstractTextToSpeechFeature_arrayWithoutHoles(arr) || AbstractTextToSpeechFeature_iterableToArray(arr) || AbstractTextToSpeechFeature_unsupportedIterableToArray(arr) || AbstractTextToSpeechFeature_nonIterableSpread(); }\n\nfunction AbstractTextToSpeechFeature_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\n\nfunction AbstractTextToSpeechFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return AbstractTextToSpeechFeature_arrayLikeToArray(o, minLen); }\n\nfunction AbstractTextToSpeechFeature_iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction AbstractTextToSpeechFeature_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return AbstractTextToSpeechFeature_arrayLikeToArray(arr); }\n\nfunction AbstractTextToSpeechFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction AbstractTextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction AbstractTextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction AbstractTextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) AbstractTextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) AbstractTextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction AbstractTextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { AbstractTextToSpeechFeature_get = Reflect.get; } else { AbstractTextToSpeechFeature_get = function _get(target, property, receiver) { var base = AbstractTextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return AbstractTextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction AbstractTextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = AbstractTextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction AbstractTextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) AbstractTextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction AbstractTextToSpeechFeature_setPrototypeOf(o, p) { AbstractTextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return AbstractTextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction AbstractTextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = AbstractTextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = AbstractTextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = AbstractTextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return AbstractTextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction AbstractTextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (AbstractTextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return AbstractTextToSpeechFeature_assertThisInitialized(self); }\n\nfunction AbstractTextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction AbstractTextToSpeechFeature_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; } }\n\nfunction AbstractTextToSpeechFeature_getPrototypeOf(o) { AbstractTextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return AbstractTextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n\n\n\n/**\r\n * The Amazon Polly service object.\r\n * @external Polly\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly.html\r\n */\n\n/**\r\n * The presigner object that can be used to generate presigned urls for the Polly service.\r\n * @external Presigner\r\n * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Polly/Presigner.html\r\n */\n// Available options for Polly\n\nvar engines = [\'standard\', \'neural\'];\nvar audioFormats = [\'mp3\', \'ogg_vorbis\', \'pcm\'];\nvar speechmarkTypes = [\'sentence\', \'ssml\', \'viseme\', \'word\'];\nvar sampleRates = {\n mp3: {\n rates: [\'8000\', \'16000\', \'22050\', \'24000\'],\n defaults: {\n standard: \'2050\',\n neural: \'2400\'\n }\n },\n pcm: {\n rates: [\'8000\', \'16000\'],\n defaults: {\n standard: \'1600\',\n neural: \'1600\'\n }\n }\n};\nsampleRates.ogg_vorbis = sampleRates.mp3;\nvar awsVersion;\n/**\r\n * Base class for turning text input into playable audio. There should be one instance\r\n * per speaker, each instance can play only one piece of text at a time.\r\n *\r\n * @extends AbstractHostFeature\r\n * @abstract\r\n *\r\n * @property {(number|undefined)} AWS_VERSION - Gets the version of AWS SDK being\r\n * used. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n * @property {string} [POLLY_MIN_NEURAL_VERSION=\'2.503\'] - Gets the minimum version\r\n * of the AWS SDK that is necessary to use neural voices with AWS Polly.\r\n * @property {Object} POLLY_DEFAULTS - Default values to use with calls to {@link external:Polly}.\r\n * @property {string} [POLLY_DEFAULTS.Engine=\'standard\']\r\n * @property {Array.} [POLLY_DEFAULTS.LexiconNames=[]]\r\n * @property {string} [POLLY_DEFAULTS.OutputFormat=\'mp3\']\r\n * @property {string} [POLLY_DEFAULTS.SampleRate=\'22050\']\r\n * @property {string} [POLLY_DEFAULTS.Text=\'\']\r\n * @property {string} [POLLY_DEFAULTS.TextType=\'ssml\']\r\n * @property {string} [POLLY_DEFAULTS.VoiceId=\'Amy\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageCode=\'en-GB\']\r\n * @property {string} [POLLY_DEFAULTS.LanguageName=\'British English\']\r\n * @property {Array.} [POLLY_VOICES=[]] - An array of voices available in\r\n * Polly. Will be empty until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/voicelist.html}\r\n * for a full list of available voices.\r\n * @property {Object} [POLLY_LANGUAGES={}] - An object that maps language names\r\n * to language codes that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} [POLLY_LANGUAGE_CODES={}] - An object that maps language codes\r\n * to language names that are available in Polly. Will be empty until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed. See [Polly Documentation]{@link https://docs.aws.amazon.com/polly/latest/dg/SupportedLanguage.html}\r\n * for a full list of available languages and corresponding codes.\r\n * @property {Object} EVENTS - Built-in messages that the feature emits. When the\r\n * feature is added to a {@link core/HostObject}, event names will be prefixed by the\r\n * name of the feature class + \'.\'.\r\n * @property {string} [EVENTS.ready=onReadyEvent] - Message that is emitted after\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService} has been\r\n * successfully executed.\r\n * @property {string} [EVENTS.play=onPlayEvent] - Message that is emitted after\r\n * each call to [play]{@link AbstractTextToSpeechFeature#play}. The speech that was played\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.pause=onPauseEvent] - Message that is emitted after\r\n * each call to [pause]{@link AbstractTextToSpeechFeature#pause}. The speech that was paused\r\n * is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.resume=onResumeEvent] - Message that is emitted after\r\n * each call to [resume]{@link AbstractTextToSpeechFeature#resume}. The speech that was\r\n * resumed is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.interrupt=onInterruptEvent] - Message that is emitted\r\n * if there is a current speech in progress and [play]{@link AbstractTextToSpeechFeature#play}\r\n * or [resume]{@link AbstractTextToSpeechFeature#resume} are executed for a new speech.\r\n * The speech that was interrupted is supplied as an argument to listener functions.\r\n * @property {string} [EVENTS.stop=onStopEvent] - Message that is emitted after\r\n * each call to [stop]{@link AbstractTextToSpeechFeature#stop} and when a speech reaches\r\n * the end of playback. The speech that was stopped is supplied as an argument\r\n * to listener functions.\r\n * @property {string} [EVENTS.sentence=onSentenceEvent] - Message that is emitted\r\n * each time a sentence speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The sentence speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.word=onWordEvent] - Message that is emitted\r\n * each time a word speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The word speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.viseme=onVisemeEvent] - Message that is emitted\r\n * each time a viseme speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The viseme speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {string} [EVENTS.ssml=onSsmlEvent] - Message that is emitted\r\n * each time a ssml speechmark is encountered whose timestamp matches up with\r\n * the speech audio\'s current time. The ssml speechmark object is supplied as\r\n * an argument to listener functions.\r\n * @property {Object} SERVICES - AWS services that are necessary for the feature\r\n * to function.\r\n * @property {external:Polly} SERVICES.polly - The Polly service that is used\r\n * to synthesize speechmarks. Will be undefined until [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed\r\n * @property {external:Presigner} SERVICES.presigner - The Polly Presigner\r\n * object that is used to synthesize speech audio. Will be undefined until\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}\r\n * has been successfully executed.\r\n */\n\nvar AbstractTextToSpeechFeature_AbstractTextToSpeechFeature = /*#__PURE__*/function (_AbstractHostFeature) {\n AbstractTextToSpeechFeature_inherits(AbstractTextToSpeechFeature, _AbstractHostFeature);\n\n var _super = AbstractTextToSpeechFeature_createSuper(AbstractTextToSpeechFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {core/HostObject} host - Host object managing the feature.\r\n * @param {Object=} options - Options that will be sent to Polly for each speech.\r\n * @param {string=} options.voice - The name of the Polly voice to use for all speech.\r\n * @param {string=} options.engine - The name of the Polly engine to use for all speech.\r\n * @param {string=} options.language - The name of the language to use for all speech.\r\n * @param {audioFormat} [options.audioFormat=\'mp3\'] - The format to use for generated\r\n * audio for all speeches.\r\n * @param {string=} options.sampleRate - The sample rate for audio files for all\r\n * speeches.\r\n * @param {number} [options.speechmarkOffset=0] - Amount of time in seconds to\r\n * offset speechmark event emission from the audio.\r\n * @param {number} [options.minEndMarkDuration=.05] - The minimum amount of time\r\n * in seconds that the last speechmark of each type in a speech can have its\r\n * duration property set to.\r\n * @param {number} [options.volume=1] - The default volume to play speech audio\r\n * with.\r\n */\n function AbstractTextToSpeechFeature(host) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n voice: undefined,\n engine: undefined,\n language: undefined,\n audioFormat: \'mp3\',\n sampleRate: undefined,\n speechmarkOffset: 0,\n minEndMarkDuration: 0.05,\n volume: 1\n };\n\n AbstractTextToSpeechFeature_classCallCheck(this, AbstractTextToSpeechFeature);\n\n _this = _super.call(this, host);\n _this._speechCache = {};\n _this._currentSpeech = null;\n _this._currentPromise = null;\n _this._isValidated = false;\n _this.speechmarkOffset = Number.isNaN(Number(options.speechmarkOffset)) ? 0 : Number(options.speechmarkOffset);\n _this.minEndMarkDuration = Number.isNaN(Number(options.minEndMarkDuration)) ? 0 : Number(options.minEndMarkDuration);\n _this.volume = Number.isNaN(Number(options.volume)) ? 1 : Number(options.volume);\n _this._promises = {\n volume: core_Deferred.resolve()\n };\n _this._volumePaused = false; // Set default options for each speech\n\n _this._voice = options.voice || _this.constructor.POLLY_DEFAULTS.VoiceId;\n _this._language = options.language || _this.constructor.POLLY_DEFAULTS.LanguageName;\n _this._engine = engines.includes(options.engine) ? options.engine : _this.constructor.POLLY_DEFAULTS.Engine;\n _this._audioFormat = audioFormats.includes(options.audioFormat) ? options.audioFormat : _this.constructor.POLLY_DEFAULTS.OutputFormat;\n _this._sampleRate = sampleRates[_this._audioFormat].rates.includes(options.sampleRate) ? options.sampleRate : _this.constructor.POLLY_DEFAULTS.SampleRate;\n return _this;\n }\n /**\r\n * Store Polly, Presigner and AWS SDK Version for use across all instances.\r\n *\r\n * @param {external:Polly} polly - Polly instance to use to generate speechmarks.\r\n * @param {external:Presigner} presigner - Presigner instance to use to generate\r\n * audio URLs.\r\n * @param {string} version - Version of the AWS SDK to use to validate voice options.\r\n */\n\n\n AbstractTextToSpeechFeature_createClass(AbstractTextToSpeechFeature, [{\n key: "currentSpeech",\n get:\n /**\r\n * Gets the text of the currently playing speech.\r\n *\r\n * @readonly\r\n * @type {string}\r\n */\n function get() {\n if (this._currentSpeech) {\n return this._currentSpeech.text;\n } else {\n return null;\n }\n }\n /**\r\n * Gets and sets the number of seconds to offset speechmark emission.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "speechmarkOffset",\n get: function get() {\n return this._speechmarkOffset;\n },\n set: function set(offset) {\n this._speechmarkOffset = offset;\n\n if (this._currentSpeech) {\n this._currentSpeech.speechmarkOffset = offset;\n }\n }\n /**\r\n * Gets and sets the The minimum amount of time in seconds that the last\r\n * speechmark of each type in a speech can have its duration property set to.\r\n *\r\n * @type number\r\n */\n\n }, {\n key: "minEndMarkDuration",\n get: function get() {\n return this._minEndMarkDuration / 1000;\n },\n set: function set(duration) {\n this._minEndMarkDuration = duration * 1000;\n }\n /**\r\n * Appends the Sumerian Hosts custom user-agent to a string if it is not\r\n * already present.\r\n *\r\n * @private\r\n *\r\n * @param {string} currentUserAgent - String to append to if needed.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateEngine",\n value:\n /**\r\n * Checks if a given engine type is compatible with the AWS SDK version. If it\r\n * is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n function _validateEngine(engine) {\n // Default to the standard engine if neural is not available for this version\n if (engine === undefined || this.constructor.AWS_VERSION < this.constructor.POLLY_MIN_NEURAL_VERSION) {\n engine = this.constructor.POLLY_DEFAULTS.Engine;\n }\n\n return engine;\n }\n /**\r\n * Checks if a given audio format type is compatible with Polly. If it is, return\r\n * the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateFormat",\n value: function _validateFormat(format) {\n if (format === undefined || !audioFormats.includes(format)) {\n format = this.constructor.POLLY_DEFAULTS.OutputFormat;\n }\n\n return format;\n }\n /**\r\n * Checks if a given audio sampling rate is compatible with the current audio\r\n * format. If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateRate",\n value: function _validateRate(rate) {\n // Use default if specified sample rate is not valid for the audio format\n if (rate === undefined || !sampleRates[this._audioFormat].rates.includes(rate)) {\n rate = sampleRates[this._audioFormat].defaults[this._engine];\n }\n\n return rate;\n }\n /**\r\n * Checks if a given Polly voice id is compatible with the current Polly engine.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateVoice",\n value: function _validateVoice(voiceId) {\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === voiceId;\n }); // Use the default voice if the voice isn\'t supported by the engine\n\n if (voice === undefined || !voice.SupportedEngines.includes(this._engine)) {\n voiceId = this.constructor.POLLY_DEFAULTS.VoiceId;\n }\n\n return voiceId;\n }\n /**\r\n * Checks if a given Polly language is compatible with the current Polly voice.\r\n * If it is, return the original value. Otherwise return a default.\r\n *\r\n * @private\r\n *\r\n * @param {string} engine - The type of Polly voice engine to validate.\r\n *\r\n * @returns {string}\r\n */\n\n }, {\n key: "_validateLanguage",\n value: function _validateLanguage(language) {\n var _this2 = this;\n\n var voice = this.constructor.POLLY_VOICES.find(function (v) {\n return v.Id === _this2._voice;\n });\n var languageCode = this.constructor.POLLY_LANGUAGES[language]; // Find the languages available for the current voice\n\n var availableCodes = [voice.LanguageCode];\n\n if (voice.AdditionalLanguageCodes) {\n availableCodes.push.apply(availableCodes, AbstractTextToSpeechFeature_toConsumableArray(voice.AdditionalLanguageCodes));\n } // If the current voice doesn\'t support the language, use its default\n\n\n if (!availableCodes.includes(languageCode)) {\n language = this.constructor.POLLY_LANGUAGE_CODES[voice.LanguageCode];\n }\n\n return language;\n }\n /**\r\n * Validate the current Polly options to make sure they are compatible with each\r\n * other.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_validate",\n value: function _validate() {\n // Validate speech parameters\n this._engine = this._validateEngine(this._engine);\n this._audioFormat = this._validateFormat(this._audioFormat);\n this._sampleRate = this._validateRate(this._sampleRate);\n this._voice = this._validateVoice(this._voice);\n this._language = this._validateLanguage(this._language);\n this._isValidated = true;\n }\n /**\r\n * Return an object containing parameters compatible with Polly.synthesizeSpeech.\r\n *\r\n * @private\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_getConfig",\n value: function _getConfig() {\n // Make sure parameters have been validated\n if (this.constructor.isReady && !this._isValidated) {\n this._validate();\n } // Create a config object compatible with Polly\n\n\n return {\n Engine: this._engine,\n OutputFormat: this._audioFormat,\n SampleRate: this._sampleRate,\n VoiceId: this._voice,\n LanguageCode: this.constructor.POLLY_LANGUAGES[this._language]\n };\n }\n /**\r\n * Update Polly parameters with options from a given config. All stored speeches\r\n * will be updated to use the new parameters, unless the speech text is contained\r\n * in the \'skipSpeeches\' parameter.\r\n *\r\n * @private\r\n *\r\n * @param {Object} config - Polly parameter options to overwrite.\r\n * @param {Array.} skipSpeeches - Text of any speeches that should not\r\n * have parameters updated.\r\n *\r\n * @returns {Object}\r\n */\n\n }, {\n key: "_updateConfig",\n value: function _updateConfig(config) {\n var _this3 = this;\n\n var skipSpeeches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n var currentConfig = this._getConfig();\n\n if (!config) {\n return currentConfig;\n }\n\n this._isValidated = false;\n var currentConfigStr = JSON.stringify(currentConfig); // Update options\n\n if (config.Engine) {\n this._engine = config.Engine;\n }\n\n if (config.audioFormat) {\n this._audioFormat = config.audioFormat;\n }\n\n if (config.SampleRate) {\n this._sampleRate = config.SampleRate;\n }\n\n if (config.VoiceId) {\n this._voice = config.VoiceId;\n }\n\n if (config.Language) {\n this._language = config.Language;\n } // Validate the config\n\n\n var validConfig = this._getConfig(); // Exit if nothing has changed\n\n\n var configStr = JSON.stringify(validConfig);\n\n if (currentConfigStr === configStr) {\n this._isValidated = true;\n return validConfig;\n } // Update all cached configs\n\n\n Object.entries(this._speechCache).forEach(function (_ref) {\n var _ref2 = AbstractTextToSpeechFeature_slicedToArray(_ref, 2),\n text = _ref2[0],\n speech = _ref2[1];\n\n // Check if this is a skipped speech\n if (skipSpeeches.includes(text)) {\n return;\n }\n\n var speechConfigStr = JSON.stringify(speech.config); // Update the speech with new parameters\n\n if (speechConfigStr !== configStr) {\n _this3._updateSpeech(text, validConfig);\n }\n });\n return validConfig;\n }\n /**\r\n * Update an existing speech, or add a new speech with new Polly parameters with\r\n * options from a given config.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the speech to update.\r\n * @param {Object} config - Polly parameter options to update.\r\n * @param {boolean} [force=false] - Whether to force the speech to be updated\r\n * if no parameters have changes.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_updateSpeech",\n value: function _updateSpeech(text, config) {\n var _this4 = this;\n\n var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var speech = this._speechCache[text] || {}; // Exit if nothing has changed and force is false\n\n if (!force && config !== undefined && speech.config && JSON.stringify(config) === JSON.stringify(speech.config)) {\n return speech;\n } // Create separate parameters for audio and speechmark generation\n\n\n var audioParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, config), {}, {\n Text: text,\n TextType: \'ssml\'\n });\n\n var speechmarkParams = AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, audioParams), {}, {\n OutputFormat: \'json\',\n SpeechMarkTypes: speechmarkTypes\n }); // Generate audio and speechmarks\n\n\n speech.config = config;\n speech.promise = Promise.all([this._synthesizeSpeechmarks(speechmarkParams), this._synthesizeAudio(audioParams)]).then(function (results) {\n return _this4._createSpeech.apply(_this4, [text].concat(AbstractTextToSpeechFeature_toConsumableArray(results)));\n });\n this._speechCache[text] = speech;\n return speech;\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new awspack_AbstractSpeech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Create presigned URL of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an object containing the audio URL.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this5 = this;\n\n return new core_Deferred(function (resolve, reject) {\n _this5.constructor.SERVICES.presigner.getSynthesizeSpeechUrl(params, function (error, url) {\n if (!error) {\n resolve({\n url: url\n });\n } else {\n reject(error);\n }\n });\n });\n }\n /**\r\n * Retrieves and parses speechmarks for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Deferred} Resolves with an array of speechmark objects\r\n */\n\n }, {\n key: "_synthesizeSpeechmarks",\n value: function _synthesizeSpeechmarks(params) {\n var _this6 = this;\n\n return this.constructor.SERVICES.polly.synthesizeSpeech(params).promise().then(function (result) {\n // Convert charcodes to string\n var jsonString = JSON.stringify(result.AudioStream);\n var json = JSON.parse(jsonString);\n var dataStr = json.data.map(function (c) {\n return String.fromCharCode(c);\n }).join(\'\');\n var markTypes = {\n sentence: [],\n word: [],\n viseme: [],\n ssml: []\n };\n var endMarkTypes = {\n sentence: null,\n word: null,\n viseme: null,\n ssml: null\n }; // Split by enclosing {} to create speechmark objects\n\n var speechMarks = AbstractTextToSpeechFeature_toConsumableArray(dataStr.matchAll(/\\{.*?\\}(?=\\n|$)/gm)).map(function (match) {\n var mark = JSON.parse(match[0]); // Set the duration of the last speechmark stored matching this one\'s type\n\n var numMarks = markTypes[mark.type].length;\n\n if (numMarks > 0) {\n var lastMark = markTypes[mark.type][numMarks - 1];\n lastMark.duration = mark.time - lastMark.time;\n }\n\n markTypes[mark.type].push(mark);\n endMarkTypes[mark.type] = mark;\n return mark;\n }); // Find the time of the latest speechmark\n\n\n var endTimes = [];\n\n if (endMarkTypes.sentence) {\n endTimes.push(endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endTimes.push(endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endTimes.push(endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endTimes.push(endMarkTypes.ssml.time);\n }\n\n var endTime = Math.max.apply(Math, endTimes); // Calculate duration for the ending speechMarks of each type\n\n if (endMarkTypes.sentence) {\n endMarkTypes.sentence.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.sentence.time);\n }\n\n if (endMarkTypes.word) {\n endMarkTypes.word.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.word.time);\n }\n\n if (endMarkTypes.viseme) {\n endMarkTypes.viseme.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.viseme.time);\n }\n\n if (endMarkTypes.ssml) {\n endMarkTypes.ssml.duration = Math.max(_this6._minEndMarkDuration, endTime - endMarkTypes.ssml.time);\n }\n\n return speechMarks;\n });\n }\n /**\r\n * Returns a Speech object that has the given text.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text content of the Speech.\r\n * @param {Object=} config - Options to update the Speech with.\r\n *\r\n * @returns {Deferred} Resolves with Speech or null;\r\n */\n\n }, {\n key: "_getSpeech",\n value: function _getSpeech(text, config) {\n // Make sure AWS services exist\n if (!this.constructor.isReady) {\n var e = \'AWS services have not been initialized.\';\n return core_Deferred.reject(e);\n } // Make sure its possible to generate speeches\n\n\n if (!text) {\n var _e2 = \'Cannot play a speech with no text.\';\n return core_Deferred.reject(_e2);\n } // Update the speech with options\n\n\n text = awspack_TextToSpeechUtils.validateText(text);\n config = this._updateConfig(config, text);\n return this._updateSpeech(text, config).promise;\n }\n /**\r\n * Adds a namespace to the host with the name of the feature to contain properties\r\n * and methods from the feature that users of the host need access to.\r\n *\r\n * @see TextToSpeechFeature\r\n */\n\n }, {\n key: "installApi",\n value: function installApi() {\n var _this7 = this;\n\n /**\r\n * @inner\r\n * @namespace TextToSpeechFeature\r\n */\n var api = AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.assign(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#play\r\n */\n play: this.play.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pause\r\n */\n pause: this.pause.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resume\r\n */\n resume: this.resume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#stop\r\n */\n stop: this.stop.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#getVolume\r\n */\n getVolume: this.getVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#setVolume\r\n */\n setVolume: this.setVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#pauseVolume\r\n */\n pauseVolume: this.pauseVolume.bind(this),\n\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @method\r\n * @see AbstractTextToSpeechFeature#resumeVolume\r\n */\n resumeVolume: this.resumeVolume.bind(this)\n });\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see AbstractTextToSpeechFeature#speechmarkOffset\r\n */\n speechmarkOffset: {\n get: function get() {\n return _this7.speechmarkOffset;\n },\n set: function set(offset) {\n _this7.speechmarkOffset = offset;\n }\n }\n });\n return api;\n }\n /**\r\n * Gets and sets the volume used for all audio clips played by the speaker.\r\n *\r\n * @type {number}\r\n */\n\n }, {\n key: "volume",\n get: function get() {\n return this._volume;\n }\n /**\r\n * Gets whether or not the speaker\'s volume value is currently being tweened.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n ,\n set: function set(volume) {\n this._volume = core_MathUtils.clamp(volume);\n }\n }, {\n key: "volumePending",\n get: function get() {\n return this._promises.volume && this._promises.volume.pending;\n }\n /**\r\n * Gets the volume used for all audio clips played by the speaker.\r\n *\r\n * @returns {number}\r\n */\n\n }, {\n key: "getVolume",\n value: function getVolume() {\n return this.volume;\n }\n /**\r\n * Updates the volume used for all audio clips played by the speaker over time.\r\n *\r\n * @param {number} volume - Target volume value.\r\n * @param {number} [seconds=0] - Amount of time it will take to reach the target\r\n * volume.\r\n * @param {Function=} easingFn - Easing function used for interpolation.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "setVolume",\n value: function setVolume(volume) {\n var seconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var easingFn = arguments.length > 2 ? arguments[2] : undefined;\n\n if (this.volumePending) {\n this._promises.volume.cancel();\n }\n\n volume = core_MathUtils.clamp(volume);\n this._promises.volume = animpack_AnimationUtils.interpolateProperty(this, \'volume\', volume, {\n seconds: seconds,\n easingFn: easingFn\n });\n return this._promises.volume;\n }\n /**\r\n * Pause interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "pauseVolume",\n value: function pauseVolume() {\n this._volumePaused = true;\n return this.volumePending;\n }\n /**\r\n * Resume any interpolation happening on the speaker\'s volume property.\r\n *\r\n * @returns {boolean}\r\n */\n\n }, {\n key: "resumeVolume",\n value: function resumeVolume() {\n this._volumePaused = false;\n return this.volumePending;\n }\n /**\r\n * Update the currently playing speech.\r\n *\r\n * @param {number} deltaTime - Time since the last update.\r\n */\n\n }, {\n key: "update",\n value: function update(deltaTime) {\n if (!this._volumePaused) {\n this._promises.volume.execute(deltaTime);\n }\n\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.volume = this._volume;\n\n this._currentSpeech.update(this._host.now);\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "update", this).call(this, deltaTime);\n }\n }\n /**\r\n * Set the current speech to a new asset and update the speech\'s speechmark\r\n * offset value to match that of the feature.\r\n *\r\n * @private\r\n *\r\n * @param {AbstractSpeech} speech - Speech to set as current.\r\n */\n\n }, {\n key: "_setCurrentSpeech",\n value: function _setCurrentSpeech(speech) {\n speech.speechmarkOffset = this._speechmarkOffset;\n this._currentSpeech = speech;\n }\n /**\r\n * Create a promise that will play/resume a speech with the given text after\r\n * the audio context attempts to resume and speech audio is retrieved from Polly.\r\n *\r\n * @private\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n * @param {string} [playMethod = \'play\'] - Method to execute on the resulting\r\n * Speech object. Valid options are \'play\' and \'resume\'.\r\n */\n\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this8 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n\n // If no text is provided, try to use the current speech\n if (text === undefined && playMethod === \'resume\' && this._currentSpeech) {\n text = this._currentSpeech.text;\n }\n\n var currentPromise = this._currentPromise || {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise;\n\n this._getSpeech(text, config).then(function (speech) {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } else if (_this8._currentPromise !== currentPromise) {\n // Cancel if another call to play has already been made\n currentPromise.play.cancel();\n return;\n } // Reset current speech when the speech ends\n\n\n var onFinish = function onFinish() {\n _this8._currentSpeech = null;\n _this8._currentPromise = null;\n }; // Cancel the currently playing speech\n\n\n if (_this8._currentSpeech && _this8._currentSpeech.playing) {\n if (playMethod === \'play\') {\n _this8._currentSpeech.cancel();\n } else if (playMethod === \'resume\' && _this8._currentSpeech.audio !== speech.audio) {\n _this8._currentSpeech.cancel();\n }\n }\n\n _this8._setCurrentSpeech(speech); // Play the speech\n\n\n currentPromise.speech = speech[playMethod](_this8._host.now, onFinish, onFinish, onFinish);\n currentPromise.speech.then(function () {\n if (currentPromise.speech.resolved) {\n currentPromise.play.resolve();\n } else {\n currentPromise.play.cancel();\n }\n })["catch"](function (error) {\n currentPromise.play.reject(error);\n });\n })["catch"](function (e) {\n e = "Cannot ".concat(playMethod, " speech ").concat(text, " on host ").concat(_this8.host.id, ". ").concat(e);\n currentPromise.play.reject(e);\n });\n\n return currentPromise.play;\n }\n /**\r\n * Stop any speeches currently playing and play a new speech from the beginning.\r\n *\r\n * @param {string} text - The text of the new speech to play.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n /**\r\n * If a speech is currently playing, pause it at the current time.\r\n */\n\n }, {\n key: "pause",\n value: function pause() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.pause(this._host.now);\n } else {\n console.warn("Cannot pause speech on host ".concat(this.host.id, ". No speech is currently playing"));\n }\n }\n /**\r\n * Stop any speeches currently playing and resume a new speech from the current\r\n * time.\r\n *\r\n * @param {string=} text - The text of the new speech to play. If undefined and\r\n * there is a current speech that is paused, the current speech will be resumed.\r\n * @param {Object=} config - Optional parameters for the speech.\r\n *\r\n * @returns {Deferred}\r\n */\n\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n /**\r\n * If a speech is currently playing, stop playback and reset time.\r\n */\n\n }, {\n key: "stop",\n value: function stop() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n\n this._currentSpeech = null;\n } else {\n console.warn("Cannot stop speech on host ".concat(this.host.id, ". No speech is currently playing."));\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n if (this._currentSpeech && this._currentSpeech.playing) {\n this._currentSpeech.stop();\n }\n\n delete this._speechCache;\n\n AbstractTextToSpeechFeature_get(AbstractTextToSpeechFeature_getPrototypeOf(AbstractTextToSpeechFeature.prototype), "discard", this).call(this);\n }\n }], [{\n key: "initializeService",\n value: function initializeService(polly, presigner, version) {\n var _this9 = this;\n\n // Make sure all were defined\n if (polly === undefined || presigner === undefined || version === undefined) {\n throw new Error(\'Cannot initialize TextToSpeech feature. All arguments must be defined.\');\n } // Add sumerian hosts user-agent\n\n\n if (polly.config) {\n polly.config.customUserAgent = this._withCustomUserAgent(polly.config.customUserAgent);\n }\n\n if (presigner.service && presigner.service.config) {\n presigner.service.config.customUserAgent = this._withCustomUserAgent(presigner.service.config.customUserAgent);\n }\n\n this._isReady = false; // Store parameters\n\n this.SERVICES.polly = polly;\n this.SERVICES.presigner = presigner;\n awsVersion = version; // Clear the current polly objects\n\n var availableVoices = this.POLLY_VOICES;\n availableVoices.length = 0;\n var availableLanguages = this.POLLY_LANGUAGES;\n Object.keys(availableLanguages).forEach(function (name) {\n delete availableLanguages[name];\n });\n var availableLanguageCodes = this.POLLY_LANGUAGE_CODES;\n Object.keys(availableLanguageCodes).forEach(function (name) {\n delete availableLanguageCodes[name];\n }); // Re-populate according to version\n\n var minNeuralSdk = this.POLLY_MIN_NEURAL_VERSION;\n return this.SERVICES.polly.describeVoices().promise().then(function (response) {\n var allCodes = {};\n response.Voices.forEach(function (voice) {\n if (voice.SupportedEngines.includes(\'standard\') || version >= minNeuralSdk) {\n availableVoices.push(voice);\n }\n\n availableVoices.forEach(function (voice) {\n availableLanguages[voice.LanguageName] = voice.LanguageCode;\n allCodes[voice.LanguageCode] = voice.LanguageName;\n });\n });\n Object.entries(availableLanguages).forEach(function (_ref3) {\n var _ref4 = AbstractTextToSpeechFeature_slicedToArray(_ref3, 2),\n name = _ref4[0],\n code = _ref4[1];\n\n availableLanguageCodes[code] = name;\n }); // Notify that we\'re ready to generate speeches\n\n _this9._isReady = true;\n\n _this9.emit(_this9.EVENTS.ready);\n });\n }\n /**\r\n * Indicates whether or not the class is capable of generating speech audio. Polly,\r\n * Presigner and AWS SDK version number must have been defined using\r\n * [initializeService]{@link AbstractTextToSpeechFeature.initializeService}.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "isReady",\n get: function get() {\n return this._isReady;\n }\n }, {\n key: "_withCustomUserAgent",\n value: function _withCustomUserAgent(currentUserAgent) {\n var sumerianHostsUserAgent = \'request-source/SumerianHosts\';\n\n if (currentUserAgent == null) {\n return sumerianHostsUserAgent;\n }\n\n if (currentUserAgent.indexOf(sumerianHostsUserAgent) !== -1) {\n return currentUserAgent;\n }\n\n return currentUserAgent.concat(\' \', sumerianHostsUserAgent);\n }\n }]);\n\n return AbstractTextToSpeechFeature;\n}(core_AbstractHostFeature);\n\nObject.defineProperties(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature, {\n AWS_VERSION: {\n get: function get() {\n return awsVersion;\n }\n },\n POLLY_MIN_NEURAL_VERSION: {\n value: \'2.503\',\n writable: false\n },\n POLLY_DEFAULTS: {\n value: {\n Engine: \'standard\',\n LexiconNames: [],\n OutputFormat: \'mp3\',\n SampleRate: \'22050\',\n Text: \'\',\n TextType: \'ssml\',\n VoiceId: \'Amy\',\n LanguageCode: \'en-GB\',\n LanguageName: \'British English\'\n },\n writable: false\n },\n POLLY_VOICES: {\n value: [],\n writable: false\n },\n POLLY_LANGUAGES: {\n value: {},\n writable: false\n },\n POLLY_LANGUAGE_CODES: {\n value: {},\n writable: false\n },\n _isReady: {\n value: false,\n writable: true\n },\n EVENTS: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).EVENTS), {}, {\n ready: \'onReadyEvent\',\n play: \'onPlayEvent\',\n pause: \'onPauseEvent\',\n resume: \'onResumeEvent\',\n interrupt: \'onInterruptEvent\',\n stop: \'onStopEvent\',\n sentence: \'onSentenceEvent\',\n word: \'onWordEvent\',\n viseme: \'onVisemeEvent\',\n ssml: \'onSsmlEvent\'\n })\n },\n SERVICES: {\n value: AbstractTextToSpeechFeature_objectSpread(AbstractTextToSpeechFeature_objectSpread({}, Object.getPrototypeOf(AbstractTextToSpeechFeature_AbstractTextToSpeechFeature).SERVICES), {}, {\n polly: undefined,\n presigner: undefined\n })\n }\n});\n/* harmony default export */ var awspack_AbstractTextToSpeechFeature = (AbstractTextToSpeechFeature_AbstractTextToSpeechFeature);\n// CONCATENATED MODULE: ./src/core/awspack/TextToSpeechFeature.js\nfunction TextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { TextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TextToSpeechFeature_typeof(obj); }\n\nfunction TextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction TextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction TextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) TextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) TextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction TextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { TextToSpeechFeature_get = Reflect.get; } else { TextToSpeechFeature_get = function _get(target, property, receiver) { var base = TextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return TextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction TextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = TextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction TextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) TextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction TextToSpeechFeature_setPrototypeOf(o, p) { TextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return TextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction TextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = TextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = TextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = TextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return TextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction TextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (TextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return TextToSpeechFeature_assertThisInitialized(self); }\n\nfunction TextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction TextToSpeechFeature_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; } }\n\nfunction TextToSpeechFeature_getPrototypeOf(o) { TextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return TextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @extends AbstractTextToSpeechFeature\r\n * @alias core/TextToSpeechFeature\r\n */\n\nvar TextToSpeechFeature_TextToSpeechFeature = /*#__PURE__*/function (_AbstractTextToSpeech) {\n TextToSpeechFeature_inherits(TextToSpeechFeature, _AbstractTextToSpeech);\n\n var _super = TextToSpeechFeature_createSuper(TextToSpeechFeature);\n\n function TextToSpeechFeature() {\n var _this;\n\n TextToSpeechFeature_classCallCheck(this, TextToSpeechFeature);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n _this._enabled = false;\n\n _this._setAudioContext();\n\n _this._observeAudioContext();\n\n return _this;\n }\n /**\r\n * Store the audio context that will be used to ensure audio can be played.\r\n *\r\n * @private\r\n */\n\n\n TextToSpeechFeature_createClass(TextToSpeechFeature, [{\n key: "_setAudioContext",\n value: function _setAudioContext() {\n this._audioContext = new AudioContext();\n }\n /**\r\n * Listen for state changes on the audio context to determine whether the feature\r\n * is enabled.\r\n *\r\n * @private\r\n */\n\n }, {\n key: "_observeAudioContext",\n value: function _observeAudioContext() {\n var _this2 = this;\n\n if (this._audioContext) {\n this._audioContext.onstatechange = function () {\n if (_this2._audioContext.state === \'running\') {\n _this2._enabled = true;\n } else {\n _this2._enabled = false;\n console.warn(\'The audio context is not running. Speech will not be able to be played until it is resumed. Use the "TextToSpeechFeature.resumeAudio" method to try to resume it after a user gesture.\');\n }\n };\n\n this._audioContext.onstatechange();\n }\n }\n /**\r\n * Create an Audio object of speech audio for the given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Promise} Resolves with an object containing the audio URL and Audio\r\n * object.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this3 = this;\n\n return TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_synthesizeAudio", this).call(this, params).then(function (result) {\n var url = result.url; // Create an Audio object that points to the presigned url\n\n var audio = new Audio(url);\n audio.loop = _this3.loop;\n audio.crossOrigin = \'anonymous\';\n audio.preload = \'auto\';\n result.audio = audio;\n return new Promise(function (resolve) {\n // Resolve once the minimum amount is loaded\n audio.addEventListener(\'canplaythrough\', function () {\n resolve(result);\n }); // Start loading the audio\n\n document.body.appendChild(audio);\n audio.load();\n });\n });\n }\n /**\r\n * Create a new Speech object for the speaker.\r\n *\r\n * @private\r\n *\r\n * @param {TextToSpeech} speaker - The TextToSpeech instance that will own the speech.\r\n * @param {string} text - Text of the speech.\r\n * @param {Object} speechmarks - Speechmarks for the speech.\r\n * @param {Object} audioConfig - Audio for the speech.\r\n *\r\n * @returns {AbstractSpeech}\r\n */\n\n }, {\n key: "_createSpeech",\n value: function _createSpeech(text, speechmarks, audioConfig) {\n return new three_js_awspack_Speech(this, text, speechmarks, audioConfig);\n }\n /**\r\n * Gets whether or not the audio context is running and speech can be played.\r\n *\r\n * @readonly\r\n * @type {boolean}\r\n */\n\n }, {\n key: "enabled",\n get: function get() {\n return this._enabled;\n }\n /**\r\n * Try to resume the audio context. This will be automatically executed each time\r\n * speech is played or resumed. If using manually, it should be called after a\r\n * user interaction occurs.\r\n *\r\n * @returns {Deferred} - Resolves once the audio context has resumed.\r\n */\n\n }, {\n key: "resumeAudio",\n value: function resumeAudio() {\n var _this4 = this;\n\n var promise = new core_Deferred(function (resolve, reject) {\n _this4._audioContext.resume().then(function () {\n _this4._enabled = true;\n resolve();\n })["catch"](function (e) {\n _this4._enabled = false;\n reject(e);\n });\n });\n return promise;\n }\n }, {\n key: "_startSpeech",\n value: function _startSpeech(text, config) {\n var _this5 = this;\n\n var playMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \'play\';\n var currentPromise = {\n play: new core_Deferred(undefined, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }, function () {\n currentPromise.speech.cancel();\n }),\n speech: new core_Deferred()\n };\n this._currentPromise = currentPromise; // Try to start the audio context\n\n this.resumeAudio().then(function () {\n // Exit if the promise is no longer pending because of user interaction\n if (!currentPromise.play.pending) {\n return;\n } // Cancel if another call to play has already been made\n else if (_this5._currentPromise !== currentPromise) {\n currentPromise.play.cancel();\n return;\n } // The audio context is running so the speech can be played\n\n\n if (_this5._enabled) {\n TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_startSpeech", _this5).call(_this5, text, config, playMethod);\n } // Reject if the audio context is not running\n else {\n currentPromise.reject(new Error("Cannot ".concat(playMethod, " speech on host ").concat(_this5._host.id, ". The audio context is not running. Use the \\"TextToSpeechFeature.resumeAudio\\" method to try to resume it after a user gesture.")));\n }\n });\n return currentPromise.play;\n }\n }, {\n key: "play",\n value: function play(text, config) {\n return this._startSpeech(text, config, \'play\');\n }\n }, {\n key: "resume",\n value: function resume(text, config) {\n return this._startSpeech(text, config, \'resume\');\n }\n }, {\n key: "installApi",\n value: function installApi() {\n var _this6 = this;\n\n var api = TextToSpeechFeature_get(TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "installApi", this).call(this);\n\n Object.defineProperties(api, {\n /**\r\n * @memberof TextToSpeechFeature\r\n * @instance\r\n * @see core/TextToSpeechFeature#enabled\r\n */\n enabled: {\n get: function get() {\n return _this6._enabled;\n }\n }\n });\n return api;\n }\n }]);\n\n return TextToSpeechFeature;\n}(awspack_AbstractTextToSpeechFeature);\n\n/* harmony default export */ var awspack_TextToSpeechFeature = (TextToSpeechFeature_TextToSpeechFeature);\n// CONCATENATED MODULE: ./src/three.js/awspack/TextToSpeechFeature.js\nfunction awspack_TextToSpeechFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { awspack_TextToSpeechFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { awspack_TextToSpeechFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return awspack_TextToSpeechFeature_typeof(obj); }\n\nfunction awspack_TextToSpeechFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction awspack_TextToSpeechFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction awspack_TextToSpeechFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) awspack_TextToSpeechFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) awspack_TextToSpeechFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction awspack_TextToSpeechFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { awspack_TextToSpeechFeature_get = Reflect.get; } else { awspack_TextToSpeechFeature_get = function _get(target, property, receiver) { var base = awspack_TextToSpeechFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return awspack_TextToSpeechFeature_get(target, property, receiver || target); }\n\nfunction awspack_TextToSpeechFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = awspack_TextToSpeechFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction awspack_TextToSpeechFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) awspack_TextToSpeechFeature_setPrototypeOf(subClass, superClass); }\n\nfunction awspack_TextToSpeechFeature_setPrototypeOf(o, p) { awspack_TextToSpeechFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return awspack_TextToSpeechFeature_setPrototypeOf(o, p); }\n\nfunction awspack_TextToSpeechFeature_createSuper(Derived) { var hasNativeReflectConstruct = awspack_TextToSpeechFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = awspack_TextToSpeechFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = awspack_TextToSpeechFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return awspack_TextToSpeechFeature_possibleConstructorReturn(this, result); }; }\n\nfunction awspack_TextToSpeechFeature_possibleConstructorReturn(self, call) { if (call && (awspack_TextToSpeechFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return awspack_TextToSpeechFeature_assertThisInitialized(self); }\n\nfunction awspack_TextToSpeechFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction awspack_TextToSpeechFeature_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; } }\n\nfunction awspack_TextToSpeechFeature_getPrototypeOf(o) { awspack_TextToSpeechFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return awspack_TextToSpeechFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * Threejs PositionalAudio object\r\n * @external "THREE.AudioListener"\r\n * @see https://threejs.org/docs/#api/en/audio/AudioListener\r\n */\n\n/**\r\n * Threejs Audio object\r\n * @external "THREE.Object3D"\r\n * @see https://threejs.org/docs/#api/en/core/Object3D\r\n */\n\n/**\r\n * @extends core/TextToSpeechFeature\r\n * @alias three.js/TextToSpeechFeature\r\n */\n\nvar awspack_TextToSpeechFeature_TextToSpeechFeature = /*#__PURE__*/function (_CoreTextToSpeechFeat) {\n awspack_TextToSpeechFeature_inherits(TextToSpeechFeature, _CoreTextToSpeechFeat);\n\n var _super = awspack_TextToSpeechFeature_createSuper(TextToSpeechFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {three/HostObject} host - Host object managing the feature.\r\n * @param {Object=} options - Options that will be sent to Polly for each speech.\r\n * @param {external:"THREE.AudioListener"} options.listener - Three audio listener to use with\r\n * audio.\r\n * @param {external:"THREE.Object3D"=} options.attachTo - Optional object to attach the speech\r\n * audio to.\r\n */\n function TextToSpeechFeature(host) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n voice: undefined,\n engine: undefined,\n language: undefined,\n audioFormat: \'mp3\',\n sampleRate: undefined,\n listener: undefined,\n attachTo: undefined\n };\n\n awspack_TextToSpeechFeature_classCallCheck(this, TextToSpeechFeature);\n\n _this = _super.call(this, host, options);\n _this._listener = options.listener;\n _this._attachTo = options.attachTo || host.owner;\n\n _this._setAudioContext();\n\n _this._observeAudioContext();\n\n return _this;\n }\n\n awspack_TextToSpeechFeature_createClass(TextToSpeechFeature, [{\n key: "_setAudioContext",\n value: function _setAudioContext() {\n if (this._listener) {\n this._audioContext = this._listener.context;\n }\n }\n /**\r\n * Create an Audio object and Three.js audio object of speech audio for the\r\n * given speech text.\r\n *\r\n * @private\r\n *\r\n * @param {Object} params - Parameters object compatible with Polly.synthesizeSpeech.\r\n *\r\n * @returns {Promise} Resolves with an object containing the audio URL and Audio\r\n * objects.\r\n */\n\n }, {\n key: "_synthesizeAudio",\n value: function _synthesizeAudio(params) {\n var _this2 = this;\n\n return awspack_TextToSpeechFeature_get(awspack_TextToSpeechFeature_getPrototypeOf(TextToSpeechFeature.prototype), "_synthesizeAudio", this).call(this, params).then(function (result) {\n if (_this2._attachTo !== undefined) {\n // Create positional audio if there\'s an attach point\n result.threeAudio = new THREE.PositionalAudio(_this2._listener);\n\n _this2._attachTo.add(result.threeAudio);\n } else {\n // Create non-positional audio\n result.threeAudio = new THREE.Audio(_this2._listener);\n } // Set Audio object as the source\n\n\n result.threeAudio.setMediaElementSource(result.audio);\n return result;\n });\n }\n }]);\n\n return TextToSpeechFeature;\n}(awspack_TextToSpeechFeature);\n\n/* harmony default export */ var three_js_awspack_TextToSpeechFeature = (awspack_TextToSpeechFeature_TextToSpeechFeature);\n// CONCATENATED MODULE: ./src/three.js/awspack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n\n/**\r\n * @module three/awspack\r\n */\n\n/* harmony default export */ var awspack = ({\n /**\r\n * @see three.js/TextToSpeechFeature\r\n */\n TextToSpeechFeature: three_js_awspack_TextToSpeechFeature,\n\n /**\r\n * @see core/TextToSpeechUtils\r\n */\n TextToSpeechUtils: awspack_TextToSpeechUtils,\n\n /**\r\n * @see three.js/Speech\r\n */\n Speech: three_js_awspack_Speech\n});\n// CONCATENATED MODULE: ./src/three.js/animpack/state/SingleState.js\nfunction state_SingleState_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { state_SingleState_typeof = function _typeof(obj) { return typeof obj; }; } else { state_SingleState_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return state_SingleState_typeof(obj); }\n\nfunction state_SingleState_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction state_SingleState_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction state_SingleState_createClass(Constructor, protoProps, staticProps) { if (protoProps) state_SingleState_defineProperties(Constructor.prototype, protoProps); if (staticProps) state_SingleState_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction SingleState_set(target, property, value, receiver) { if (typeof Reflect !== "undefined" && Reflect.set) { SingleState_set = Reflect.set; } else { SingleState_set = function set(target, property, value, receiver) { var base = SingleState_superPropBase(target, property); var desc; if (base) { desc = Object.getOwnPropertyDescriptor(base, property); if (desc.set) { desc.set.call(receiver, value); return true; } else if (!desc.writable) { return false; } } desc = Object.getOwnPropertyDescriptor(receiver, property); if (desc) { if (!desc.writable) { return false; } desc.value = value; Object.defineProperty(receiver, property, desc); } else { SingleState_defineProperty(receiver, property, value); } return true; }; } return SingleState_set(target, property, value, receiver); }\n\nfunction _set(target, property, value, receiver, isStrict) { var s = SingleState_set(target, property, value, receiver || target); if (!s && isStrict) { throw new Error(\'failed to set property\'); } return value; }\n\nfunction SingleState_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction SingleState_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { SingleState_get = Reflect.get; } else { SingleState_get = function _get(target, property, receiver) { var base = SingleState_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return SingleState_get(target, property, receiver || target); }\n\nfunction SingleState_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = state_SingleState_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction state_SingleState_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) state_SingleState_setPrototypeOf(subClass, superClass); }\n\nfunction state_SingleState_setPrototypeOf(o, p) { state_SingleState_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return state_SingleState_setPrototypeOf(o, p); }\n\nfunction state_SingleState_createSuper(Derived) { var hasNativeReflectConstruct = state_SingleState_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = state_SingleState_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = state_SingleState_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return state_SingleState_possibleConstructorReturn(this, result); }; }\n\nfunction state_SingleState_possibleConstructorReturn(self, call) { if (call && (state_SingleState_typeof(call) === "object" || typeof call === "function")) { return call; } return state_SingleState_assertThisInitialized(self); }\n\nfunction state_SingleState_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction state_SingleState_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; } }\n\nfunction state_SingleState_getPrototypeOf(o) { state_SingleState_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return state_SingleState_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\n * Threejs AnimationAction object\n * @external "THREE.AnimationAction"\n * @see https://threejs.org/docs/#api/en/animation/AnimationAction\n */\n\nvar threeBlendModes = {\n Override: THREE.NormalAnimationBlendMode,\n Additive: THREE.AdditiveAnimationBlendMode\n};\n/**\n * @extends core/SingleState\n * @alias three.js/SingleState\n */\n\nvar state_SingleState_SingleState = /*#__PURE__*/function (_CoreSingleState) {\n state_SingleState_inherits(SingleState, _CoreSingleState);\n\n var _super = state_SingleState_createSuper(SingleState);\n\n /**\n * @constructor\n *\n * @param {Object=} options - Options for the animation state.\n * @param {external:"THREE.AnimationAction"} threeAction - Animation action that controls\n * playback of the clip.\n */\n function SingleState() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var threeAction = arguments.length > 1 ? arguments[1] : undefined;\n\n state_SingleState_classCallCheck(this, SingleState);\n\n _this = _super.call(this, options); // Callback to catch THREE animation action completion\n\n _this._onFinishedEvent = function (_ref) {\n var type = _ref.type,\n action = _ref.action;\n\n // Exit if this isn\'t the finish event for this animation\n if (type !== \'finished\' || action !== _this.threeAction) {\n return;\n }\n\n _this._promises.play.resolve(); // Stop evaluating interpolators if they have already completed\n\n\n if (!_this.weightPending && !_this.timeScalePending) {\n _this._paused = true;\n }\n };\n\n _this._threeAction = threeAction;\n _this._threeAction.clampWhenFinished = true; // Hold the last frame on completion\n\n _this._threeAction.enabled = false;\n _this._threeAction.loop = _this._loopCount === 1 ? THREE.LoopOnce : THREE.LoopRepeat;\n _this._threeAction.paused = _this._paused;\n _this._threeAction.repetitions = _this._loopCount;\n _this._threeAction.timeScale = _this._timeScale;\n _this._threeAction.weight = _this._internalWeight;\n _this._threeAction.blendMode = threeBlendModes[_this._blendMode]; // Start listening for animation finished events\n\n _this._threeAction.getMixer().addEventListener(\'finished\', _this._onFinishedEvent);\n\n return _this;\n }\n /**\n * Gets the THREE.AnimationAction object.\n *\n * @readonly\n * @type {external:"THREE.AnimationAction"}\n */\n\n\n state_SingleState_createClass(SingleState, [{\n key: "threeAction",\n get: function get() {\n return this._threeAction;\n }\n }, {\n key: "normalizedTime",\n get: function get() {\n if (this._threeAction.time && this._threeAction.getClip() && this._threeAction.getClip().duration) {\n return this._threeAction.time / this._threeAction.getClip().duration;\n }\n\n return 0;\n },\n set: function set(time) {\n time = core_MathUtils.clamp(time);\n this._threeAction.time = this._threeAction.getClip().duration * time;\n }\n }, {\n key: "weight",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "weight", this);\n },\n set: function set(weight) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "weight", weight, this, true);\n\n this._threeAction.enabled = true;\n }\n }, {\n key: "updateInternalWeight",\n value: function updateInternalWeight(factor) {\n SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "updateInternalWeight", this).call(this, factor);\n\n this._threeAction.setEffectiveWeight(this._internalWeight);\n }\n }, {\n key: "timeScale",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "timeScale", this);\n },\n set: function set(timeScale) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "timeScale", timeScale, this, true);\n\n this._threeAction.timeScale = timeScale;\n }\n }, {\n key: "loopCount",\n get: function get() {\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "loopCount", this);\n },\n set: function set(loopCount) {\n _set(state_SingleState_getPrototypeOf(SingleState.prototype), "loopCount", loopCount, this, true);\n\n this._threeAction.loop = loopCount === 1 ? THREE.LoopOnce : THREE.LoopRepeat;\n this._threeAction.repetitions = loopCount;\n }\n }, {\n key: "play",\n value: function play(onFinish, onError, onCancel) {\n // Restart animation\n this._threeAction.reset();\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "play", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "pause",\n value: function pause() {\n // Make sure animation has influence\n this._threeAction.paused = true;\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "pause", this).call(this);\n }\n }, {\n key: "resume",\n value: function resume(onFinish, onError, onCancel) {\n // Make sure the animation can play and has influence\n this._threeAction.paused = false;\n this._threeAction.enabled = true;\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "resume", this).call(this, onFinish, onError, onCancel);\n }\n }, {\n key: "cancel",\n value: function cancel() {\n // Stop animation playback\n this._threeAction.paused = true;\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "cancel", this).call(this);\n }\n }, {\n key: "stop",\n value: function stop() {\n // Restart and pause the animation\n this._threeAction.reset();\n\n this._threeAction.paused = true;\n\n this._threeAction.play();\n\n return SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "stop", this).call(this);\n }\n }, {\n key: "discard",\n value: function discard() {\n // Stop the animation from having influence\n this._threeAction.enabled = false; // Stop listening for finish events\n\n this._threeAction.getMixer().removeEventListener(\'finished\', this._onFinishedEvent);\n\n SingleState_get(state_SingleState_getPrototypeOf(SingleState.prototype), "discard", this).call(this);\n }\n }]);\n\n return SingleState;\n}(state_SingleState);\n\n/* harmony default export */ var animpack_state_SingleState = (state_SingleState_SingleState);\n// CONCATENATED MODULE: ./src/three.js/animpack/AnimationFeature.js\nfunction animpack_AnimationFeature_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { animpack_AnimationFeature_typeof = function _typeof(obj) { return typeof obj; }; } else { animpack_AnimationFeature_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return animpack_AnimationFeature_typeof(obj); }\n\nfunction animpack_AnimationFeature_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction animpack_AnimationFeature_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction animpack_AnimationFeature_createClass(Constructor, protoProps, staticProps) { if (protoProps) animpack_AnimationFeature_defineProperties(Constructor.prototype, protoProps); if (staticProps) animpack_AnimationFeature_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction animpack_AnimationFeature_get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { animpack_AnimationFeature_get = Reflect.get; } else { animpack_AnimationFeature_get = function _get(target, property, receiver) { var base = animpack_AnimationFeature_superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return animpack_AnimationFeature_get(target, property, receiver || target); }\n\nfunction animpack_AnimationFeature_superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = animpack_AnimationFeature_getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction animpack_AnimationFeature_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) animpack_AnimationFeature_setPrototypeOf(subClass, superClass); }\n\nfunction animpack_AnimationFeature_setPrototypeOf(o, p) { animpack_AnimationFeature_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return animpack_AnimationFeature_setPrototypeOf(o, p); }\n\nfunction animpack_AnimationFeature_createSuper(Derived) { var hasNativeReflectConstruct = animpack_AnimationFeature_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = animpack_AnimationFeature_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = animpack_AnimationFeature_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return animpack_AnimationFeature_possibleConstructorReturn(this, result); }; }\n\nfunction animpack_AnimationFeature_possibleConstructorReturn(self, call) { if (call && (animpack_AnimationFeature_typeof(call) === "object" || typeof call === "function")) { return call; } return animpack_AnimationFeature_assertThisInitialized(self); }\n\nfunction animpack_AnimationFeature_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); } return self; }\n\nfunction animpack_AnimationFeature_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; } }\n\nfunction animpack_AnimationFeature_getPrototypeOf(o) { animpack_AnimationFeature_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return animpack_AnimationFeature_getPrototypeOf(o); }\n\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n\n/**\r\n * Threejs AnimationMixer object\r\n * @external "THREE.AnimationMixer"\r\n * @see https://threejs.org/docs/#api/en/animation/AnimationMixer\r\n */\n\nAnimationTypes.single = animpack_state_SingleState;\n\n/**\r\n * @extends core/AnimationFeature\r\n * @alias three.js/AnimationFeature\r\n */\n\nvar animpack_AnimationFeature_AnimationFeature = /*#__PURE__*/function (_CoreAnimationFeature) {\n animpack_AnimationFeature_inherits(AnimationFeature, _CoreAnimationFeature);\n\n var _super = animpack_AnimationFeature_createSuper(AnimationFeature);\n\n /**\r\n * @constructor\r\n *\r\n * @param {three.js/HostObject} host - Host object that owns the feature.\r\n */\n function AnimationFeature(host) {\n var _this;\n\n animpack_AnimationFeature_classCallCheck(this, AnimationFeature);\n\n _this = _super.call(this, host);\n _this._mixer = new THREE.AnimationMixer(host.owner);\n return _this;\n }\n\n animpack_AnimationFeature_createClass(AnimationFeature, [{\n key: "_createSingleState",\n value: function _createSingleState(options) {\n // Duplicate the clip if it is already in use by another three action\n var clip = options.clip;\n\n if (this._mixer.existingAction(clip)) {\n clip = clip.clone();\n }\n\n var threeAction = this._mixer.clipAction(clip);\n\n return new animpack_state_SingleState(options, threeAction);\n }\n /**\r\n * Gets the THREE.AnimationMixer for the host.\r\n *\r\n * @readonly\r\n * @type {external:"THREE.AnimationMixer"}\r\n */\n\n }, {\n key: "mixer",\n get: function get() {\n return this._mixer;\n }\n }, {\n key: "update",\n value: function update(deltaTime) {\n animpack_AnimationFeature_get(animpack_AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "update", this).call(this, deltaTime);\n\n if (!this._paused) {\n this._mixer.update(deltaTime / 1000); // THREE.AnimationMixer requires delta time in seconds\n\n }\n }\n }, {\n key: "discard",\n value: function discard() {\n // Release THREE animation resources\n this._mixer.uncacheRoot(this._host.owner);\n\n animpack_AnimationFeature_get(animpack_AnimationFeature_getPrototypeOf(AnimationFeature.prototype), "discard", this).call(this);\n }\n }]);\n\n return AnimationFeature;\n}(animpack_AnimationFeature);\n\n/* harmony default export */ var three_js_animpack_AnimationFeature = (animpack_AnimationFeature_AnimationFeature);\n// CONCATENATED MODULE: ./src/three.js/animpack/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module three/animpack\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/**\r\n * @namespace\r\n */\n\nvar Easing = {\n /**\r\n * @see Linear\r\n */\n Linear: Linear,\n\n /**\r\n * @see Quadratic\r\n */\n Quadratic: Quadratic,\n\n /**\r\n * @see Cubic\r\n */\n Cubic: Cubic,\n\n /**\r\n * @see Quartic\r\n */\n Quartic: Quartic,\n\n /**\r\n * @see Quintic\r\n */\n Quintic: Quintic,\n\n /**\r\n * @see Sinusoidal\r\n */\n Sinusoidal: Sinusoidal,\n\n /**\r\n * @see Exponential\r\n */\n Exponential: Exponential,\n\n /**\r\n * @see Circular\r\n */\n Circular: Circular,\n\n /**\r\n * @see Elastic\r\n */\n Elastic: Elastic,\n\n /**\r\n * @see Back\r\n */\n Back: Back,\n\n /**\r\n * @see Bounce\r\n */\n Bounce: Bounce\n};\n/* harmony default export */ var animpack = ({\n /**\r\n * @see three.js/AnimationFeature\r\n */\n AnimationFeature: three_js_animpack_AnimationFeature,\n\n /**\r\n * @see AnimationLayer\r\n */\n AnimationLayer: animpack_AnimationLayer,\n\n /**\r\n * @see three.js/SingleState\r\n */\n SingleState: animpack_state_SingleState,\n\n /**\r\n * @see TransitionState\r\n */\n TransitionState: state_TransitionState,\n\n /**\r\n * @see FreeBlendState\r\n */\n FreeBlendState: state_FreeBlendState,\n\n /**\r\n * @see QueueState\r\n */\n QueueState: state_QueueState,\n\n /**\r\n * @see RandomAnimationState\r\n */\n RandomAnimationState: state_RandomAnimationState,\n\n /**\r\n * @see Blend1dState\r\n */\n Blend1dState: state_Blend1dState,\n\n /**\r\n * @see Blend2dState\r\n */\n Blend2dState: state_Blend2dState,\n\n /**\r\n * @see AnimationUtils\r\n */\n AnimationUtils: animpack_AnimationUtils,\n\n /**\r\n * @see Easing\r\n */\n Easing: Easing,\n\n /**\r\n * @see LayerBlendModes\r\n */\n LayerBlendModes: LayerBlendModes,\n\n /**\r\n * @see DefaultLayerBlendMode\r\n */\n DefaultLayerBlendMode: DefaultLayerBlendMode,\n\n /**\r\n * @see AnimationTypes\r\n */\n AnimationTypes: AnimationTypes\n});\n// CONCATENATED MODULE: ./src/three.js/index.js\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: MIT-0\n\n/**\r\n * @module three/HOST\r\n */\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var three_js = __webpack_exports__["default"] = ({\n /**\r\n * @see env\r\n */\n env: env,\n\n /**\r\n * @see Utils\r\n */\n Utils: core_Utils,\n\n /**\r\n * @see MathUtils\r\n */\n MathUtils: core_MathUtils,\n\n /**\r\n * @see Deferred\r\n */\n Deferred: core_Deferred,\n\n /**\r\n * @see three.js/Messenger\r\n */\n Messenger: three_js_Messenger,\n\n /**\r\n * @see three.js/HostObject\r\n */\n HostObject: three_js_HostObject,\n\n /**\r\n * @see core/LipsyncFeature\r\n */\n LipsyncFeature: core_LipsyncFeature,\n\n /**\r\n * @see GestureFeature\r\n */\n GestureFeature: core_GestureFeature,\n\n /**\r\n * @see three.js/PointOfInterestFeature\r\n */\n PointOfInterestFeature: three_js_PointOfInterestFeature,\n\n /**\r\n * @see DefaultVisemeMap\r\n */\n DefaultVisemeMap: DefaultVisemeMap,\n\n /**\r\n * @see DefaultGestureWords\r\n */\n DefaultGestureWords: DefaultGestureWords,\n\n /**\r\n * @see AxisMap\r\n */\n AxisMap: AxisMap,\n\n /**\r\n * @see module:three/awspack\r\n */\n aws: awspack,\n\n /**\r\n * @see module:three/animpack\r\n */\n anim: animpack\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvRGVmZXJyZWQuanM/Njg4ZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvVXRpbHMuanM/YmYyNCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvTWF0aFV0aWxzLmpzPzgxZTciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL0Vhc2luZy5qcz81ODZjIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9NZXNzZW5nZXIuanM/ZDAwNiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL01lc3Nlbmdlci5qcz82MDNiIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9BYnN0cmFjdEhvc3RGZWF0dXJlLmpzPzIzNmUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL0hvc3RPYmplY3QuanM/NzVlNyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL0hvc3RPYmplY3QuanM/NTRmMSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvRmVhdHVyZURlcGVuZGVudEludGVyZmFjZS5qcz8wNmJiIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLmpzPzZlNjMiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL01hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZS5qcz80N2Q1Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL1RleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuanM/YmNhZCIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvTGlwc3luY0ZlYXR1cmUuanM/OGQzYSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9TU01MU3BlZWNobWFya0ludGVyZmFjZS5qcz9jYTc0Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9HZXN0dXJlRmVhdHVyZS5qcz9kYjM5Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25VdGlscy5qcz8xMTQ4Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9BYnN0cmFjdFN0YXRlLmpzPzJmODciLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL1RyYW5zaXRpb25TdGF0ZS5qcz85ZTc3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UuanM/NzMzZSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvU3RhdGVDb250YWluZXJJbnRlcmZhY2UuanM/MjY1OSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvUXVldWVTdGF0ZS5qcz8wYzRhIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9BYnN0cmFjdEJsZW5kU3RhdGUuanM/NjY5NyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvRnJlZUJsZW5kU3RhdGUuanM/ZDY3NSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYW5pbXBhY2svc3RhdGUvQmxlbmQxZFN0YXRlLmpzP2E3NDIiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2FuaW1wYWNrL3N0YXRlL0JsZW5kMmRTdGF0ZS5qcz84MTYzIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25MYXllci5qcz9iZWVjIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9TaW5nbGVTdGF0ZS5qcz80ZjE0Iiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9zdGF0ZS9SYW5kb21BbmltYXRpb25TdGF0ZS5qcz80NDkzIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlLmpzP2ViZGUiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuanM/ZGVlNSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL1BvaW50T2ZJbnRlcmVzdEZlYXR1cmUuanM/MTViZiIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL0hvc3RFbnZpcm9ubWVudC5qcz8wMjcyIiwid2VicGFjazovL0hPU1QvLi9zcmMvY29yZS9hd3NwYWNrL1RleHRUb1NwZWVjaFV0aWxzLmpzPzc1NWQiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svQWJzdHJhY3RTcGVlY2guanM/N2YxYyIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL2NvcmUvYXdzcGFjay9TcGVlY2guanM/MmE0MSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL2F3c3BhY2svU3BlZWNoLmpzPzcwZDkiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmpzPzM0MWYiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy9jb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoRmVhdHVyZS5qcz81YTg1Iiwid2VicGFjazovL0hPU1QvLi9zcmMvdGhyZWUuanMvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlLmpzPzEwOTAiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy90aHJlZS5qcy9hd3NwYWNrL2luZGV4LmpzPzJmMGEiLCJ3ZWJwYWNrOi8vSE9TVC8uL3NyYy90aHJlZS5qcy9hbmltcGFjay9zdGF0ZS9TaW5nbGVTdGF0ZS5qcz82MzU0Iiwid2VicGFjazovL0hPU1QvLi9zcmMvdGhyZWUuanMvYW5pbXBhY2svQW5pbWF0aW9uRmVhdHVyZS5qcz80ZWU3Iiwid2VicGFjazovL0hPU1QvLi9zcmMvdGhyZWUuanMvYW5pbXBhY2svaW5kZXguanM/Zjc0YSIsIndlYnBhY2s6Ly9IT1NULy4vc3JjL3RocmVlLmpzL2luZGV4LmpzP2I0MWQiXSwibmFtZXMiOlsiRGVmZXJyZWQiLCJleGVjdXRhYmxlIiwib25SZXNvbHZlIiwib25SZWplY3QiLCJvbkNhbmNlbCIsIkVycm9yIiwicmVzIiwicmVqIiwiY2FuY2VsIiwic3RhdHVzIiwicmVzb2x2ZWQiLCJyZWplY3RlZCIsImNhbmNlbGVkIiwicGVuZGluZyIsInJlc29sdmUiLCJyZWplY3QiLCJ2YWx1ZSIsIl9zdGF0dXMiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJfY2FuY2VsIiwiX2V4ZWN1dGFibGUiLCJhcmdzIiwiaXRlcmFibGUiLCJTeW1ib2wiLCJpdGVyYXRvciIsImUiLCJhcnJheSIsImRlZmVycmVkIiwiZmlsdGVyIiwiaXRlbSIsInJlc3VsdCIsInVuZGVmaW5lZCIsInJlc29sdmVWYWx1ZSIsImZvckVhY2giLCJsZW5ndGgiLCJlcnJvciIsImNhbmNlbFZhbHVlIiwibnVtSXRlbXMiLCJpdGVtVHJhY2tlciIsImZhaWxlZCIsIm51bVJlc29sdmVkIiwicmVzb2x1dGlvbnMiLCJpbmRleCIsIlByb21pc2UiLCJ0aGVuIiwiVXRpbHMiLCJyZXBsYWNlIiwiYyIsInJhbmRvbU51bWJlciIsIk1hdGgiLCJmbG9vciIsIkRhdGUiLCJub3ciLCJyYW5kb20iLCJ0b1N0cmluZyIsIm5hbWUiLCJuYW1lQXJyYXkiLCJpbmNsdWRlcyIsIm5hbWVTZXQiLCJTZXQiLCJtYXRjaEdyb3VwIiwibWF0Y2giLCJiYXNlTmFtZSIsInNsaWNlIiwiaW5jcmVtZW50IiwiTnVtYmVyIiwic2V0TmFtZSIsInNldE1hdGNoR3JvdXAiLCJzZXRJbmNyZW1lbnQiLCJzZWNvbmRzIiwib25GaW5pc2giLCJvblByb2dyZXNzIiwib25FcnJvciIsImNvbnNvbGUiLCJ3YXJuIiwiY3VycmVudFRpbWUiLCJ0b3RhbFRpbWUiLCJvblVwZGF0ZSIsImRlbHRhVGltZSIsIm1pbiIsIm1heCIsImNlaWwiLCJSYWRpYW5Ub0RlZ3JlZSIsIlBJIiwiRGVncmVlVG9SYWRpYW4iLCJNYXRoVXRpbHMiLCJyYWRpYW5zIiwiZGVncmVlcyIsImZyb20iLCJ0byIsImZhY3RvciIsImEiLCJiIiwicCIsImRpc3RTcXIiLCJkaXN0YW5jZVNxdWFyZWQiLCJ0IiwicG9pbnQiLCJ2ZXJ0aWNlcyIsIm1pblgiLCJQT1NJVElWRV9JTkZJTklUWSIsIm1pblkiLCJtYXhYIiwiTkVHQVRJVkVfSU5GSU5JVFkiLCJtYXhZIiwidiIsImRYIiwiZFkiLCJtaWRYIiwibWlkWSIsImRNYXgiLCJzdXBlckluZGljZXMiLCJ2ZXJ0c1dpdGhTdXBlciIsInN1cGVyU29ydGVkSW5kaWNlcyIsInNvcnRQb2ludHNDQ1ciLCJzdXBlclRyaWFuZ2xlIiwiaW5kaWNlcyIsImVkZ2VzIiwidHJpYW5nbGVzIiwibmV3VmVydCIsIm5ld0luZGV4IiwiaW52YWxpZFRyaWFuZ2xlcyIsInRyaWFuZ2xlIiwiaXNQb2ludEluQ2lyY3VtQ2lyY2xlIiwicHVzaCIsImJvdW5kaW5nUG9seSIsImVkZ2UiLCJjb3VudCIsIm90aGVyVHJpYW5nbGUiLCJvdGhlckVkZ2UiLCJzcGxpY2UiLCJpbmRleE9mIiwic29ydGVkSW5kaWNlcyIsInRyaWFuZ2xlc1RvUmVtb3ZlIiwibWFwIiwiYXgiLCJheSIsImJ4IiwiYnkiLCJjeCIsImN5IiwiZGVub20iLCJhVmFsIiwiYlZhbCIsImNWYWwiLCJjZW50cm9pZCIsInNvcnQiLCJhdGFuMiIsImFicyIsInZlY3RvciIsIkFycmF5IiwicmVkdWNlciIsImFjY3VtdWxhdG9yIiwiY3VycmVudFZhbHVlIiwic3FydCIsInJlZHVjZSIsInZlY3RvckEiLCJ2ZWN0b3JCIiwidmFsdWVBIiwidmFsdWVCIiwibm9ybWFsQSIsIm5vcm1hbGl6ZVZlY3RvciIsIm5vcm1hbEIiLCJkb3QiLCJnZXREb3RQcm9kdWN0IiwiYWNvcyIsImNsYW1wIiwidmVjdG9yMyIsIm1hdHJpeDMiLCJldmVyeSIsIngiLCJ5IiwieiIsIm1hZ25pdHVkZSIsImdldFZlY3Rvck1hZ25pdHVkZSIsImZpbGwiLCJtYXRyaXg0Iiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVaIiwiciIsInRhcmdldFZhbHVlIiwidmFsdWVTdG9yZSIsInNtb290aFRpbWUiLCJtYXhTcGVlZCIsImNsYW1wVGltZSIsImRlbHRhVmFsdWUiLCJjbGFtcERlbHRhVmFsdWUiLCJsYXN0VmFsdWUiLCJkMSIsImQyIiwiZDMiLCJkNCIsIkxpbmVhciIsIk5vbmUiLCJrIiwiSW4iLCJPdXQiLCJJbk91dCIsIlF1YWRyYXRpYyIsIkN1YmljIiwiUXVhcnRpYyIsIlF1aW50aWMiLCJTaW51c29pZGFsIiwiY29zIiwic2luIiwiRXhwb25lbnRpYWwiLCJDaXJjdWxhciIsIkVsYXN0aWMiLCJzIiwiYXNpbiIsIkJhY2siLCJCb3VuY2UiLCJNZXNzZW5nZXIiLCJpZCIsIl9pZCIsImNyZWF0ZUlkIiwiX2Rpc3BhdGNoZXIiLCJ3aW5kb3ciLCJfY2FsbGJhY2tzIiwiX2V2ZW50TGlzdGVuZXJzIiwibWVzc2FnZSIsImNhbGxiYWNrIiwiZGV0YWlsIiwiQ3VzdG9tRXZlbnQiLCJsaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJfY3JlYXRlTG9jYWxNZXNzYWdlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9jcmVhdGVMaXN0ZW5lciIsIl9hZGRMaXN0ZW5lciIsImkiLCJzdG9wTGlzdGVuaW5nIiwiX3JlbW92ZUxpc3RlbmVyIiwicmVnZXhwIiwibWVzc2FnZXMiLCJPYmplY3QiLCJrZXlzIiwidGVzdCIsImV2ZW50IiwiX2NyZWF0ZUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsIm1lc3NlbmdlciIsIkdsb2JhbE1lc3NlbmdlciIsImxpc3RlblRvIiwic3RvcExpc3RlbmluZ1RvQWxsIiwiZW1pdCIsImRlZmluZVByb3BlcnRpZXMiLCJ3cml0YWJsZSIsIkVWRU5UUyIsInR5cGUiLCJDb3JlTWVzc2VuZ2VyIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIlRIUkVFIiwiRXZlbnREaXNwYXRjaGVyIiwicHJvdG90eXBlIiwicHJvcCIsImRlZmluZVByb3BlcnR5IiwiQWJzdHJhY3RIb3N0RmVhdHVyZSIsImhvc3QiLCJfaG9zdCIsImV2ZW50cyIsImFwaSIsImVudHJpZXMiLCJjb25zdHJ1Y3RvciIsIm93bmVyIiwic3RvcExpc3RlbmluZ0J5UmVnZXhwIiwidXBkYXRlIiwiUmVnRXhwIiwic291cmNlIiwiUmVzdWx0Q2xhc3MiLCJtaXhpbkNsYXNzRmFjdG9yaWVzIiwibWl4aW5DbGFzc0ZhY3RvcnkiLCJTRVJWSUNFUyIsIkhvc3RPYmplY3QiLCJfb3duZXIiLCJfZmVhdHVyZXMiLCJfd2FpdHMiLCJfbGFzdFVwZGF0ZSIsImR0Iiwid2FpdCIsImV4ZWN1dGUiLCJ2YWx1ZXMiLCJmZWF0dXJlIiwib25Db21wbGV0ZSIsIkZlYXR1cmVDbGFzcyIsImZvcmNlIiwiaW5wdXRUeXBlIiwiaW5zdGFsbEFwaSIsImFkZEZlYXR1cmUiLCJ0eXBlTmFtZSIsInJlbW92ZUZlYXR1cmUiLCJkaXNjYXJkIiwiZ2V0UHJvdG90eXBlT2YiLCJvcHRpb25zIiwiX2Nsb2NrIiwiY2xvY2siLCJnZXQiLCJnZXRFbGFwc2VkVGltZSIsIkNvcmVIb3N0T2JqZWN0IiwiRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSIsIkJhc2VDbGFzcyIsIkZlYXR1cmVEZXBlbmRlbnRNaXhpbiIsIl9pbml0aWFsaXplZCIsIl9vbkZlYXR1cmVBZGRlZCIsImJpbmQiLCJfb25GZWF0dXJlUmVtb3ZlZCIsIkVWRU5UX0RFUEVOREVOQ0lFUyIsImV2ZW50TmFtZSIsIkFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UiLCJvbGROYW1lIiwibmV3TmFtZSIsImxheWVyTmFtZSIsImFuaW1hdGlvbk5hbWUiLCJQYXJlbnRDbGFzcyIsIk1peGluIiwiQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudE1peGluIiwiQW5pbWF0aW9uRmVhdHVyZSIsImFkZExheWVyIiwicmVtb3ZlTGF5ZXIiLCJyZW5hbWVMYXllciIsImFkZEFuaW1hdGlvbiIsInJlbW92ZUFuaW1hdGlvbiIsInJlbmFtZUFuaW1hdGlvbiIsIk1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSIsIm5hbWVGaWx0ZXIiLCJ3ZWlnaHQiLCJlYXNpbmdGbiIsIk1hbmFnZWRBbmltYXRpb25MYXllck1peGluIiwiX21hbmFnZWRMYXllcnMiLCJsYXllcnMiLCJfb25MYXllckFkZGVkIiwiX29uTGF5ZXJSZW1vdmVkIiwiaXNBY3RpdmUiLCJnZXRBbmltYXRpb25zIiwiYW5pbU5hbWUiLCJfb25BbmltYXRpb25BZGRlZCIsImFuaW1hdGlvbnMiLCJfb25BbmltYXRpb25SZW1vdmVkIiwibGF5ZXJPcHRpb25zIiwiYW5pbU9wdGlvbnMiLCJERUZBVUxUX0xBWUVSX09QVElPTlMiLCJhbmltYXRpb25PcHRpb25zIiwiYXNzaWduIiwicmVnaXN0ZXJBbmltYXRpb24iLCJyZWdpc3RlckxheWVyIiwibGF5ZXJOYW1lcyIsInNldExheWVyV2VpZ2h0IiwiYmxlbmRUaW1lIiwic2V0TGF5ZXJXZWlnaHRzIiwiZW5hYmxlIiwiZGlzYWJsZSIsIlRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UiLCJUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50TWl4aW4iLCJUZXh0VG9TcGVlY2hGZWF0dXJlIiwicGxheSIsInBhdXNlIiwicmVzdW1lIiwic3RvcCIsInNlbnRlbmNlIiwid29yZCIsInZpc2VtZSIsInNzbWwiLCJEZWZhdWx0VmlzZW1lTWFwIiwic2lsIiwib3ZlcnJpZGVXZWlnaHQiLCJTIiwiVCIsImYiLCJ1IiwiRSIsIm8iLCJPIiwiTGlwc3luY0ZlYXR1cmUiLCJ2aXNlbWVCbGVuZFRpbWUiLCJkZWNheVJhdGUiLCJhbW91bnQiLCJ2aXNlbWVFYXNpbmdGbiIsInZpc2VtZUxheWVycyIsInRhbGtpbmdCbGVuZFRpbWUiLCJ0YWxraW5nRWFzaW5nRm4iLCJ0YWxraW5nTGF5ZXJzIiwidmlzZW1lTGVhZFRpbWUiLCJfdmlzZW1lTGF5ZXJzIiwiX3RhbGtpbmdMYXllcnMiLCJhbmltYXRpb24iLCJ2aXNlbWVNYXAiLCJyZWdpc3RlclZpc2VtZUxheWVyIiwicmVnaXN0ZXJUYWxraW5nTGF5ZXIiLCJnZXRBbmltYXRpb25UeXBlIiwid2VpZ2h0TmFtZXMiLCJnZXRBbmltYXRpb25CbGVuZE5hbWVzIiwidmlzZW1lT3B0aW9ucyIsInNwZWVjaG1hcmtPZmZzZXQiLCJfdmlzZW1lTGVhZFRpbWUiLCJfcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24iLCJyZXN1bWVBbmltYXRpb24iLCJfb25TdG9wIiwiX29uUGxheSIsInBhdXNlQW5pbWF0aW9uIiwibWFyayIsImlzVmlzZW1lQWN0aXZlIiwidmlzZW1lTmFtZXMiLCJkdXJhdGlvbiIsImxlcnBGYWN0b3IiLCJsZXJwIiwiYmxlbmRJblRpbWUiLCJob2xkVGltZSIsIl9hbmltYXRlU2ltcGxlVmlzZW1lIiwiZGVjYXlXZWlnaHQiLCJfYW5pbWF0ZUhlbGRWaXNlbWUiLCJ2aXNlbWVOYW1lIiwicGVha1dlaWdodCIsImJsZW5kT3V0VGltZSIsIndlaWdodFByb21pc2UiLCJzZXRBbmltYXRpb25CbGVuZFdlaWdodCIsInN0YXJ0UHJvbWlzZSIsImhvbGRQcm9taXNlIiwic2V0IiwibWl4IiwiU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UiLCJTU01MU3BlZWNoTWFya01peGluIiwiSlNPTiIsInBhcnNlIiwibWV0aG9kIiwiYXBwbHkiLCJEZWZhdWx0R2VzdHVyZVdvcmRzIiwiYmlnIiwiaGVhcnQiLCJtYW55IiwibW92ZW1lbnQiLCJvbmUiLCJhZ2dyZXNzaXZlIiwieW91IiwiZGVmZW5zZSIsIndhdmUiLCJzZWxmIiwiR2VzdHVyZUZlYXR1cmUiLCJtaW5pbXVtSW50ZXJ2YWwiLCJsYXllciIsImxheWVySG9sZFRpbWUiLCJsYXllck1pbmltdW1JbnRlcnZhbCIsImNhbkFkdmFuY2UiLCJpc1F1ZXVlRW5kIiwiY3VycmVudEdlc3R1cmUiLCJfZ2V0SG9sZFRpbWUiLCJob2xkVGltZXIiLCJwbGF5TmV4dEFuaW1hdGlvbiIsInBsYXlUaW1lciIsImF1dG9EaXNhYmxlIiwiYW5pbSIsIndvcmRzIiwiZ2VzdHVyZU1hcCIsInRyYW5zaXRpb25UaW1lIiwia2V5Iiwic3RyaW5naWZ5IiwiZ2VuZXJpY0dlc3R1cmVzIiwicmVhc29uIiwiX2dldE1pbmltdW1JbnRlcnZhbCIsInBsYXlBbmltYXRpb24iLCJnZXRQYXVzZWQiLCJjcmVhdGVHZXN0dXJlTWFwIiwiY3JlYXRlR2VuZXJpY0dlc3R1cmVBcnJheSIsInBsYXlHZXN0dXJlIiwic3RvcEFuaW1hdGlvbiIsImludGVycnVwdEFuaW1hdGlvbiIsIkFuaW1hdGlvblV0aWxzIiwicHJvcGVydHlPd25lciIsInByb3BlcnR5TmFtZSIsImlzTmFOIiwic3RhcnRWYWx1ZSIsImludGVycG9sYXRvciIsInByb2dyZXNzIiwiZWFzZUZhY3RvciIsIkFic3RyYWN0U3RhdGUiLCJfd2VpZ2h0IiwiX2ludGVybmFsV2VpZ2h0IiwiX3BhdXNlZCIsIl9wcm9taXNlcyIsImZpbmlzaCIsIl9wbGF5Q2FsbGJhY2tzIiwiaW50ZXJwb2xhdGVQcm9wZXJ0eSIsInByb21pc2UiLCJhbGwiLCJ1cGRhdGVJbnRlcm5hbFdlaWdodCIsIlRyYW5zaXRpb25TdGF0ZSIsIl90byIsIl9mcm9tIiwiX3dlaWdodFByb21pc2UiLCJ0b3RhbFdlaWdodCIsInN0YXRlIiwiY3VycmVudFN0YXRlcyIsInRhcmdldFN0YXRlIiwiZGVhY3RpdmF0ZSIsInJlc2V0Iiwid2VpZ2h0UHJvbWlzZXMiLCJzZXRXZWlnaHQiLCJvbk5leHQiLCJwcm9taXNlcyIsIkFuaW1hdGlvblBsYXllckludGVyZmFjZSIsImZuIiwicGxheU1ldGhvZCIsIkFuaW1hdGlvblBsYXllck1peGluIiwiX3RyYW5zaXRpb25TdGF0ZSIsIl9zdGF0ZXMiLCJNYXAiLCJfY3VycmVudFN0YXRlIiwiX3RyYW5zaXRpb25UaW1lIiwiX2Vhc2luZ0ZuIiwiaGFzIiwiY3VycmVudEFuaW1hdGlvbiIsIndlaWdodFBlbmRpbmciLCJjb25maWd1cmUiLCJfcHJlcGFyZUN1cnJlbnRTdGF0ZSIsIlN0YXRlQ29udGFpbmVySW50ZXJmYWNlIiwiY3VycmVudE5hbWUiLCJTdGF0ZUNvbnRhaW5lck1peGluIiwidW5pcXVlTmFtZSIsImdldFVuaXF1ZU5hbWUiLCJRdWV1ZVN0YXRlIiwicXVldWVTdGF0ZXMiLCJhZGRTdGF0ZSIsIl9xdWV1ZSIsIl9kb25lIiwiaW50ZXJuYWxXZWlnaHQiLCJuZXh0IiwiZG9uZSIsIndyYXAiLCJsYXN0TmFtZSIsInNpemUiLCJnZXRTdGF0ZSIsImxvb3BDb3VudCIsIkluZmluaXR5IiwiaXNUcmFuc2l0aW9uaW5nIiwiX3Jlc2V0IiwicGF1c2VkIiwic3RvcHBlZCIsImRpc2NhcmRTdGF0ZXMiLCJBYnN0cmFjdEJsZW5kU3RhdGUiLCJibGVuZFN0YXRlcyIsImJsZW5kV2VpZ2h0cyIsIkZyZWVCbGVuZFN0YXRlIiwic3VtV2VpZ2h0cyIsIkJsZW5kMWRTdGF0ZSIsImJsZW5kVGhyZXNob2xkcyIsInBoYXNlTWF0Y2hlcyIsIl9ibGVuZFZhbHVlIiwiYmxlbmRWYWx1ZSIsIm5vblplcm9EaWZmZXJlbnRTaXplIiwiY29udGFpbnNEdXBsaWNhdGVzIiwiX3RocmVzaG9sZHMiLCJwaGFzZU1hdGNoIiwiX3NvcnRUaHJlc2hvbGRzIiwiX2ZvcmNlTm9UaHJlc2hvbGREdXBlcyIsIl9waGFzZUxlYWRTdGF0ZSIsIl91cGRhdGVCbGVuZFdlaWdodHMiLCJ0aHJlc2hvbGRWYWx1ZSIsInNhbWVWYWx1ZSIsImZpbmQiLCJ0aHJlc2hvbGQiLCJyZW1vdmVkIiwiZmluZEluZGV4Iiwibm9ybWFsaXplZFRpbWUiLCJ0YXJnZXRJbmRleCIsInRocmVzaG9sZEEiLCJ0aHJlc2hvbGRCIiwiZmFjdG9yQiIsImZhY3RvckEiLCJzdGF0ZUEiLCJzdGF0ZUIiLCJCbGVuZDJkU3RhdGUiLCJvdGhlclRocmVzaG9sZCIsIl9ibGVuZFZhbHVlWCIsIl9ibGVuZFZhbHVlWSIsImJsZW5kVmFsdWVYIiwiYmxlbmRWYWx1ZVkiLCJfdmVydGljZXMiLCJfdHJpYW5nbGVzIiwiZ2V0RGVsYXVuYXlUcmlhbmd1bGF0aW9uIiwicHJvcGVydHkiLCJ0b1VwcGVyQ2FzZSIsIl9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRPbkxpbmUiLCJpc1BvaW50SW5UcmlhbmdsZSIsIl9zZXRJbmZsdWVuY2VUcmlhbmdsZSIsIl9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRJblRyaWFuZ2xlcyIsImFyZWFBIiwidHJpYW5nbGVBcmVhIiwiYXJlYUIiLCJhcmVhQyIsInRvdGFsQXJlYSIsIndlaWdodEEiLCJ3ZWlnaHRCIiwid2VpZ2h0QyIsInRocmVzaG9sZEMiLCJzdGF0ZUMiLCJfc2V0UGhhc2VMZWFkU3RhdGUiLCJnbG9iYWxDbG9zZXN0UG9pbnQiLCJnbG9iYWxNaW5EaXN0IiwiY2xvc2VzdFRyaWFuZ2xlIiwicG9pbnRBIiwiY2xvc2VzdFBvaW50T25MaW5lIiwicG9pbnRCIiwicG9pbnRDIiwiZGlzdEEiLCJkaXN0QiIsImRpc3RDIiwibG9jYWxDbG9zZXN0UG9pbnQiLCJsb2NhbE1pbkRpc3QiLCJjbG9zZXN0UG9pbnQiLCJzdGF0ZXMiLCJwaGFzZU1hdGNoZWQiLCJMYXllckJsZW5kTW9kZXMiLCJPdmVycmlkZSIsIkFkZGl0aXZlIiwiRGVmYXVsdExheWVyQmxlbmRNb2RlIiwidmFsaWRhdGVCbGVuZE1vZGUiLCJibGVuZE1vZGUiLCJBbmltYXRpb25MYXllciIsIl9ibGVuZE1vZGUiLCJfd2VpZ2h0UGF1c2VkIiwiaXNXZWlnaHRBY3RpdmUiLCJnZXRTdGF0ZU5hbWVzIiwiYmxlbmROYW1lIiwic2V0QmxlbmRXZWlnaHQiLCJnZXRCbGVuZFdlaWdodCIsIlNpbmdsZVN0YXRlIiwiX3RpbWVTY2FsZSIsInRpbWVTY2FsZSIsIl9sb29wQ291bnQiLCJ0aW1lIiwiUmFuZG9tQW5pbWF0aW9uU3RhdGUiLCJzdWJTdGF0ZXMiLCJfcGxheUludGVydmFsIiwicGxheUludGVydmFsIiwiZ2V0UmFuZG9tRmxvYXQiLCJwbGF5UmFuZG9tQW5pbWF0aW9uIiwidGltZXIiLCJfcmVzZXRUaW1lciIsInJhbmRvbVN0YXRlIiwiZ2V0UmFuZG9tSW50IiwiY2FuY2VsQW5pbWF0aW9uIiwiQW5pbWF0aW9uVHlwZXMiLCJzaW5nbGUiLCJmcmVlQmxlbmQiLCJxdWV1ZSIsInJhbmRvbUFuaW1hdGlvbiIsImJsZW5kMWQiLCJibGVuZDJkIiwiX2xheWVycyIsIl9sYXllck1hcCIsImV4aXN0aW5nIiwibGFzdEluZGV4IiwibnVtTGF5ZXJzIiwid2VpZ2h0TXVsdGlwbGllciIsImN1cnJlbnRTdGF0ZSIsImJsZW5kU3RhdGVPcHRpb25zIiwiYmxlbmRPcHRpb25zIiwiX2NyZWF0ZVNpbmdsZVN0YXRlIiwicXVldWVPcHRpb25zIiwicXVldWVPcHRpb24iLCJibGVuZE1hdGNoUGhhc2VzIiwic3ViU3RhdGVPcHRpb25zIiwibGF5ZXJJbmRleCIsIl92YWxpZGF0ZUluZGV4IiwiZXZlbnREYXRhIiwiY3VycmVudEluZGV4IiwiZ2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQiLCJwYXVzZVdlaWdodCIsInJlc3VtZVdlaWdodCIsImFuaW1hdGlvblR5cGUiLCJfdmFsaWRhdGVOZXdBbmltYXRpb24iLCJyZW1vdmVTdGF0ZSIsImN1cnJlbnRBbmltYXRpb25OYW1lIiwibmV3QW5pbWF0aW9uTmFtZSIsInJlbmFtZVN0YXRlIiwibmV4dFF1ZXVlZEFuaW1hdGlvbiIsImwiLCJyZXN1bWVkIiwibW92ZUxheWVyIiwiZ2V0TGF5ZXJXZWlnaHQiLCJwYXVzZUxheWVyV2VpZ2h0IiwicmVzdW1lTGF5ZXJXZWlnaHQiLCJwYXVzZUxheWVyIiwicmVzdW1lTGF5ZXIiLCJnZXRUcmFuc2l0aW9uaW5nIiwiZ2V0Q3VycmVudEFuaW1hdGlvbiIsIl91cGRhdGVJbnRlcm5hbFdlaWdodHMiLCJBeGlzTWFwIiwiUG9zaXRpdmVYIiwiTmVnYXRpdmVYIiwiUG9zaXRpdmVZIiwiTmVnYXRpdmVZIiwiUG9zaXRpdmVaIiwiTmVnYXRpdmVaIiwiRmFjZVRhcmdldFR5cGVzIiwiRXllQ2VudGVyIiwiRXllTGVmdCIsIkV5ZVJpZ2h0IiwiTW91dGgiLCJGYWNlVmVjdG9ycyIsIk1pY3JvU2FjY2FkZVdhaXRSYW5nZXMiLCJwb3N0TWFjcm8iLCJNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzIiwibW91dGhUYXJnZXQiLCJleWVUYXJnZXQiLCJCbGlua1RocmVzaG9sZCIsIk1heERlbHRhIiwiUG9pbnRPZkludGVyZXN0RmVhdHVyZSIsInRhcmdldCIsImxvb2tUcmFja2VyIiwic2NlbmUiLCJsb29rQmxlbmRUaW1lIiwibG9va0Vhc2luZ0ZuIiwibG9va0xheWVycyIsImJsaW5rQmxlbmRUaW1lIiwiYmxpbmtFYXNpbmdGbiIsImJsaW5rTGF5ZXJzIiwiX3ZhbGlkYXRlVHJhbnNmb3JtT2JqZWN0IiwiX2xvb2tUcmFja2VyIiwiX3NjZW5lIiwiX3RhcmdldCIsIl9wcmV2VGFyZ2V0UG9zIiwiX2lzVGFyZ2V0TW92aW5nIiwiX2xvb2tMYXllcnMiLCJfdHJhY2tpbmdDb25maWdzIiwiX2JsaW5rTGF5ZXJzIiwicmVmZXJlbmNlIiwiZm9yd2FyZEF4aXMiLCJoYXNTYWNjYWRlIiwicmVnaXN0ZXJMb29rTGF5ZXIiLCJyZWdpc3RlckJsaW5rTGF5ZXIiLCJfcmVnaXN0ZXJMb29rQW5pbWF0aW9uIiwiY29uZmlnIiwidHJhY2tpbmdDb25maWciLCJhbmdsZXMiLCJoIiwicHJldkFuZ2xlcyIsInNvdXJjZVBvc2l0aW9uIiwiX2dldFdvcmxkUG9zaXRpb24iLCJ0YXJnZXRQb3NpdGlvbiIsImxvb2tWZWN0b3IiLCJ0YXJnZXRQb3MiLCJ0cmFja2VyUG9zIiwidGFyZ2V0U3BoZXJpY2FsIiwiY2FydGVzaWFuVG9TcGhlcmljYWwiLCJ0YXJnZXRBbmdsZXMiLCJfc3BoZXJpY2FsVG9CbGVuZFZhbHVlIiwicmVmRGlyZWN0aW9uIiwiX2dldE9iamVjdERpcmVjdGlvbiIsInJlZlNwaGVyaWNhbCIsInJlZkFuZ2xlcyIsInRhcmdldFR5cGUiLCJkaXN0YW5jZSIsIl9nZXRUYXJnZXREaXN0YW5jZSIsImZhY2VWZWN0b3IiLCJzcGhlcmljYWwiLCJibGVuZFZhbHVlcyIsIm1heEhTcGVlZCIsImV4cCIsIm1heFZTcGVlZCIsIkQwIiwiZCIsImhEdXJhdGlvbiIsInZEdXJhdGlvbiIsIm1pY3JvU2FjY2FkZSIsIl91cGRhdGVMYXllclNwZWVkIiwiX2luaXRpYWxpemVNaWNyb1RpbWVyIiwibWFjcm9TYWNjYWRlIiwibWFjcm9TYWNjYWRlV2FpdFJhbmdlIiwiaExpbWl0IiwiaEZhY3RvciIsInZMaW1pdCIsInZGYWN0b3IiLCJzYWNjYWRlVGFyZ2V0IiwiX2dldEZhY2VUYXJnZXRBbmdsZXMiLCJfaW5pdGlhbGl6ZU1hY3JvVGltZXIiLCJtaW5XYWl0VGltZSIsIm1heFdhaXRUaW1lIiwid2FpdFRpbWUiLCJtaWNyb1NhY2NhZGVUaW1lciIsIl9zZXRNaWNyb1NhY2NhZGUiLCJtYWNyb1NhY2NhZGVUaW1lciIsIl9zZXRNYWNyb1NhY2NhZGUiLCJfYWRkVHJhY2tpbmdDb25maWciLCJoVmVsb2NpdHkiLCJ2VmVsb2NpdHkiLCJfc2V0TG9va0FuZ2xlcyIsIl9yZXNldExvb2tBbmdsZXMiLCJkZWx0YVNlY29uZHMiLCJ0cmlnZ2VyQmxpbmsiLCJjdXJyZW50SCIsImN1cnJlbnRWIiwidGFyZ2V0SCIsInRhcmdldFYiLCJwcmV2VGFyZ2V0SCIsInByZXZUYXJnZXRWIiwiY2hhbmdlQW1vdW50IiwidG9EZWdyZWVzIiwiZ2V0QW5nbGVCZXR3ZWVuIiwiZGFtcFZhbHVlIiwic2V0VGFyZ2V0Iiwic2V0VGFyZ2V0QnlOYW1lIiwic2V0VGFyZ2V0QnlJZCIsIm9iaiIsImZvcndhcmRWZWN0b3IiLCJyb3RhdGlvbiIsImdldFJvdGF0aW9uTWF0cml4IiwiX2dldFdvcmxkTWF0cml4Iiwicm90YXRlVmVjdG9yIiwidGhldGEiLCJwaGkiLCJPYmplY3QzRCIsImdldE9iamVjdEJ5TmFtZSIsImdldE9iamVjdEJ5SWQiLCJ1cGRhdGVXb3JsZE1hdHJpeCIsIm1hdHJpeFdvcmxkIiwiZWxlbWVudHMiLCJDb3JlUG9pbnRPZkludGVyZXN0RmVhdHVyZSIsImVudiIsIlRleHRUb1NwZWVjaFV0aWxzIiwidGV4dCIsInJhbmRvbU1hcmtzIiwiaW50ZXJuYWxNYXAiLCJfcHJvY2Vzc0lucHV0TWFwIiwic3BlYWtUYWdzIiwic3NtbE1hcmtSZWdleCIsInNzbWxUYWdSZWdleCIsImV4aXN0aW5nVGFncyIsImV4ZWMiLCJzdGFydCIsImVuZCIsImNodW5rcyIsInNzbWxNYXJrUmVzdWx0IiwiZHVwbGljYXRlTWFya1RvQ2hlY2siLCJleGlzdGluZ1RhZyIsInN1YnN0ciIsIl9pbnNlcnRNYXJrcyIsIm1hcmtUZXh0IiwibWFya2VkVGV4dCIsImpvaW4iLCJhZGRNYXJrc1RvVW5tYXJrZWRTZW50ZW5jZXMiLCJ2YWxpZGF0ZVRleHQiLCJtYXJrcyIsIm1hcmtJbmRpY2VzIiwibWFya1Jlc3VsdCIsInNzbWxSZXN1bHQiLCJjbGVhbmVkVGV4dCIsImV4aXN0aW5nU3NtbCIsIndoaXRlc3BhY2UiLCJzZW50ZW5jZUVuZEluZGljZXMiLCJfZ2V0U2VudGVuY2VFbmRzIiwicHJldkluZGV4IiwidGFyZ2V0SW5kaWNlcyIsImNvbnRhaW5zTWFyayIsIm1hcmtJbmRleCIsInJhbmRvbU1hcmtlZFRleHQiLCJfaW5zZXJ0UmFuZG9tTWFya3NBdCIsIm9mZnNldCIsInJhbmRvbU1hcmsiLCJzZW50ZW5jZVJlZ2V4IiwiZW5kU2VudGVuY2VSZWdleCIsInNlbnRlbmNlRW5kcyIsInB1bmN0UmVzdWx0IiwiZHVwbGljYXRlc1RvQ2hlY2siLCJ3b3JkUmVnZXgiLCJsb3dlckNhc2VXb3JkIiwiY2hlY2tEdXBsaWNhdGUiLCJtYXJrZWRXb3JkcyIsInRvTG93ZXJDYXNlIiwiZXhpc3RpbmdNYXJrcyIsImxpc3QiLCJpc0FycmF5IiwiQWJzdHJhY3RTcGVlY2giLCJzcGVha2VyIiwic3BlZWNobWFya3MiLCJfc3BlYWtlciIsIl90ZXh0IiwiX3NwZWVjaG1hcmtzIiwiX3NwZWVjaG1hcmtPZmZzZXQiLCJfc3RhcnRUaW1lIiwiX2xvY2FsVGltZSIsIl9wYXVzZVRpbWUiLCJfcGxheWluZyIsIl9tYXJrSXRlciIsIl9jdXJyZW50TWFyayIsIl9lbmRUaW1lIiwiX3Byb21pc2UiLCJvbkludGVycnVwdCIsImludGVycnVwdCIsInNwZWVjaCIsIl9jaGVja0ZpbmlzaGVkIiwiX2NyZWF0ZVByb21pc2UiLCJTcGVlY2giLCJhdWRpb0NvbmZpZyIsIl9hdWRpbyIsImF1ZGlvIiwib25lbmRlZCIsIl9hdWRpb0ZpbmlzaGVkIiwidm9sdW1lIiwic2V0VGltZW91dCIsIl9wbGF5QXVkaW8iLCJfcGF1c2VBdWRpbyIsInRleHRUb1NwZWVjaCIsIl90aHJlZUF1ZGlvIiwidGhyZWVBdWRpbyIsImRpc2Nvbm5lY3QiLCJjb25uZWN0IiwiQ29yZVNwZWVjaCIsImVuZ2luZXMiLCJhdWRpb0Zvcm1hdHMiLCJzcGVlY2htYXJrVHlwZXMiLCJzYW1wbGVSYXRlcyIsIm1wMyIsInJhdGVzIiwiZGVmYXVsdHMiLCJzdGFuZGFyZCIsIm5ldXJhbCIsInBjbSIsIm9nZ192b3JiaXMiLCJhd3NWZXJzaW9uIiwiQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlIiwidm9pY2UiLCJlbmdpbmUiLCJsYW5ndWFnZSIsImF1ZGlvRm9ybWF0Iiwic2FtcGxlUmF0ZSIsIm1pbkVuZE1hcmtEdXJhdGlvbiIsIl9zcGVlY2hDYWNoZSIsIl9jdXJyZW50U3BlZWNoIiwiX2N1cnJlbnRQcm9taXNlIiwiX2lzVmFsaWRhdGVkIiwiX3ZvbHVtZVBhdXNlZCIsIl92b2ljZSIsIlBPTExZX0RFRkFVTFRTIiwiVm9pY2VJZCIsIl9sYW5ndWFnZSIsIkxhbmd1YWdlTmFtZSIsIl9lbmdpbmUiLCJFbmdpbmUiLCJfYXVkaW9Gb3JtYXQiLCJPdXRwdXRGb3JtYXQiLCJfc2FtcGxlUmF0ZSIsIlNhbXBsZVJhdGUiLCJfbWluRW5kTWFya0R1cmF0aW9uIiwiQVdTX1ZFUlNJT04iLCJQT0xMWV9NSU5fTkVVUkFMX1ZFUlNJT04iLCJmb3JtYXQiLCJyYXRlIiwidm9pY2VJZCIsIlBPTExZX1ZPSUNFUyIsIklkIiwiU3VwcG9ydGVkRW5naW5lcyIsImxhbmd1YWdlQ29kZSIsIlBPTExZX0xBTkdVQUdFUyIsImF2YWlsYWJsZUNvZGVzIiwiTGFuZ3VhZ2VDb2RlIiwiQWRkaXRpb25hbExhbmd1YWdlQ29kZXMiLCJQT0xMWV9MQU5HVUFHRV9DT0RFUyIsIl92YWxpZGF0ZUVuZ2luZSIsIl92YWxpZGF0ZUZvcm1hdCIsIl92YWxpZGF0ZVJhdGUiLCJfdmFsaWRhdGVWb2ljZSIsIl92YWxpZGF0ZUxhbmd1YWdlIiwiaXNSZWFkeSIsIl92YWxpZGF0ZSIsInNraXBTcGVlY2hlcyIsImN1cnJlbnRDb25maWciLCJfZ2V0Q29uZmlnIiwiY3VycmVudENvbmZpZ1N0ciIsIkxhbmd1YWdlIiwidmFsaWRDb25maWciLCJjb25maWdTdHIiLCJzcGVlY2hDb25maWdTdHIiLCJfdXBkYXRlU3BlZWNoIiwiYXVkaW9QYXJhbXMiLCJUZXh0IiwiVGV4dFR5cGUiLCJzcGVlY2htYXJrUGFyYW1zIiwiU3BlZWNoTWFya1R5cGVzIiwiX3N5bnRoZXNpemVTcGVlY2htYXJrcyIsIl9zeW50aGVzaXplQXVkaW8iLCJyZXN1bHRzIiwiX2NyZWF0ZVNwZWVjaCIsInBhcmFtcyIsInByZXNpZ25lciIsImdldFN5bnRoZXNpemVTcGVlY2hVcmwiLCJ1cmwiLCJwb2xseSIsInN5bnRoZXNpemVTcGVlY2giLCJqc29uU3RyaW5nIiwiQXVkaW9TdHJlYW0iLCJqc29uIiwiZGF0YVN0ciIsImRhdGEiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJtYXJrVHlwZXMiLCJlbmRNYXJrVHlwZXMiLCJzcGVlY2hNYXJrcyIsIm1hdGNoQWxsIiwibnVtTWFya3MiLCJsYXN0TWFyayIsImVuZFRpbWVzIiwiZW5kVGltZSIsIl91cGRhdGVDb25maWciLCJnZXRWb2x1bWUiLCJzZXRWb2x1bWUiLCJwYXVzZVZvbHVtZSIsInJlc3VtZVZvbHVtZSIsIl92b2x1bWUiLCJ2b2x1bWVQZW5kaW5nIiwicGxheWluZyIsImN1cnJlbnRQcm9taXNlIiwiX2dldFNwZWVjaCIsIl9zZXRDdXJyZW50U3BlZWNoIiwiX3N0YXJ0U3BlZWNoIiwidmVyc2lvbiIsImN1c3RvbVVzZXJBZ2VudCIsIl93aXRoQ3VzdG9tVXNlckFnZW50Iiwic2VydmljZSIsIl9pc1JlYWR5IiwiYXZhaWxhYmxlVm9pY2VzIiwiYXZhaWxhYmxlTGFuZ3VhZ2VzIiwiYXZhaWxhYmxlTGFuZ3VhZ2VDb2RlcyIsIm1pbk5ldXJhbFNkayIsImRlc2NyaWJlVm9pY2VzIiwicmVzcG9uc2UiLCJhbGxDb2RlcyIsIlZvaWNlcyIsImNvZGUiLCJyZWFkeSIsImN1cnJlbnRVc2VyQWdlbnQiLCJzdW1lcmlhbkhvc3RzVXNlckFnZW50IiwiY29uY2F0IiwiTGV4aWNvbk5hbWVzIiwiX2VuYWJsZWQiLCJfc2V0QXVkaW9Db250ZXh0IiwiX29ic2VydmVBdWRpb0NvbnRleHQiLCJfYXVkaW9Db250ZXh0IiwiQXVkaW9Db250ZXh0Iiwib25zdGF0ZWNoYW5nZSIsIkF1ZGlvIiwibG9vcCIsImNyb3NzT3JpZ2luIiwicHJlbG9hZCIsImRvY3VtZW50IiwiYm9keSIsImFwcGVuZENoaWxkIiwibG9hZCIsInJlc3VtZUF1ZGlvIiwiZW5hYmxlZCIsImF0dGFjaFRvIiwiX2xpc3RlbmVyIiwiX2F0dGFjaFRvIiwiY29udGV4dCIsIlBvc2l0aW9uYWxBdWRpbyIsImFkZCIsInNldE1lZGlhRWxlbWVudFNvdXJjZSIsIkNvcmVUZXh0VG9TcGVlY2hGZWF0dXJlIiwidGhyZWVCbGVuZE1vZGVzIiwiTm9ybWFsQW5pbWF0aW9uQmxlbmRNb2RlIiwiQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGUiLCJ0aHJlZUFjdGlvbiIsIl9vbkZpbmlzaGVkRXZlbnQiLCJhY3Rpb24iLCJ0aW1lU2NhbGVQZW5kaW5nIiwiX3RocmVlQWN0aW9uIiwiY2xhbXBXaGVuRmluaXNoZWQiLCJMb29wT25jZSIsIkxvb3BSZXBlYXQiLCJyZXBldGl0aW9ucyIsImdldE1peGVyIiwiZ2V0Q2xpcCIsInNldEVmZmVjdGl2ZVdlaWdodCIsIkNvcmVTaW5nbGVTdGF0ZSIsIl9taXhlciIsIkFuaW1hdGlvbk1peGVyIiwiY2xpcCIsImV4aXN0aW5nQWN0aW9uIiwiY2xvbmUiLCJjbGlwQWN0aW9uIiwidW5jYWNoZVJvb3QiLCJDb3JlQW5pbWF0aW9uRmVhdHVyZSIsIkVhc2luZyIsImF3cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ01BLFE7Ozs7O0FBQ0o7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDRSxzQkFBa0U7QUFBQTs7QUFBQSxRQUF0REMsVUFBc0QsdUVBQXpDLFlBQU0sQ0FBRSxDQUFpQztBQUFBLFFBQS9CQyxTQUErQjtBQUFBLFFBQXBCQyxRQUFvQjtBQUFBLFFBQVZDLFFBQVU7O0FBQUE7O0FBQ2hFLFFBQUksT0FBT0gsVUFBUCxLQUFzQixVQUExQixFQUFzQztBQUNwQyxZQUFNLElBQUlJLEtBQUosOERBQU47QUFHRDs7QUFFRCxRQUFJLE9BQU9ILFNBQVAsS0FBcUIsV0FBckIsSUFBb0MsT0FBT0EsU0FBUCxLQUFxQixVQUE3RCxFQUF5RTtBQUN2RSxZQUFNLElBQUlHLEtBQUosNkRBQU47QUFHRDs7QUFFRCxRQUFJLE9BQU9GLFFBQVAsS0FBb0IsV0FBcEIsSUFBbUMsT0FBT0EsUUFBUCxLQUFvQixVQUEzRCxFQUF1RTtBQUNyRSxZQUFNLElBQUlFLEtBQUosNERBQU47QUFHRDs7QUFFRCxRQUFJLE9BQU9ELFFBQVAsS0FBb0IsV0FBcEIsSUFBbUMsT0FBT0EsUUFBUCxLQUFvQixVQUEzRCxFQUF1RTtBQUNyRSxZQUFNLElBQUlDLEtBQUosNERBQU47QUFHRDs7QUFFRCxRQUFJQyxHQUFKO0FBQ0EsUUFBSUMsR0FBSjtBQUNBLFFBQUlDLE1BQUo7QUFDQSxRQUFNQyxNQUFNLEdBQUc7QUFDYkMsY0FBUSxFQUFFLEtBREc7QUFFYkMsY0FBUSxFQUFFLEtBRkc7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aUNiO0FBQ0Y7QUFDQTtBQUNFOFEsd0JBQXNCLEVBQXRCQSwrQkFwQ2E7O0FBcUNiO0FBQ0Y7QUFDQTtBQUNFeFYsa0JBQWdCLEVBQWhCQSxnQkF4Q2E7O0FBeUNiO0FBQ0Y7QUFDQTtBQUNFK0QscUJBQW1CLEVBQW5CQSxtQkE1Q2E7O0FBNkNiO0FBQ0Y7QUFDQTtBQUNFcVEsU0FBTyxFQUFQQSxPQWhEYTs7QUFpRGI7QUFDRjtBQUNBO0FBQ0U2WSxLQUFHLEVBQUhBLE9BcERhOztBQXFEYjtBQUNGO0FBQ0E7QUFDRTFuQixNQUFJLEVBQUpBLFFBQUlBO0FBeERTLENBQWYiLCJmaWxlIjoiMzMzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyoqXHJcbiAqIFRoZSBidWlsdC1pbiBjbGFzcyBmb3IgYXN5bmNocm9ub3VzIFByb21pc2VzLlxyXG4gKiBAZXh0ZXJuYWwgUHJvbWlzZVxyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1Byb21pc2VcclxuICovXHJcblxyXG4vKipcclxuICogQSBQcm9taXNlIG9iamVjdCB0aGF0IGNhbiBiZSByZXNvbHZlZCwgcmVqZWN0ZWQgb3IgY2FuY2VsZWQgYXQgYW55IHRpbWUgYnkgdGhlXHJcbiAqIHVzZXIuXHJcbiAqXHJcbiAqIEBleHRlbmRzIGV4dGVybmFsOlByb21pc2VcclxuICovXHJcbmNsYXNzIERlZmVycmVkIGV4dGVuZHMgUHJvbWlzZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZXhlY3V0YWJsZT0oKSA9PiB7fV0gLSBUaGUgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYnkgdGhlXHJcbiAgICogY29uc3RydWN0b3IsIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBjb25zdHJ1Y3RpbmcgdGhlIHByb21pc2UuIFRoZSBzaWduYXR1cmVcclxuICAgKiBvZiB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlOiBleGVjdXRhYmxlKCAgcmVzb2x1dGlvbkZ1bmMsIHJlamVjdGlvbkZ1bmMsIGNhbmNlbGxhdGlvbkZ1bmMgKS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZXNvbHZlIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVzb2x2ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uUmVqZWN0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVqZWN0ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzXHJcbiAgICogdGhlIHByb21pc2UuIENhbmNlbGluZyByZXN1bHRzIGluIHRoZSBwcm9taXNlIGhhdmluZyBhIHN0YXR1cyBvZiAncmVzb2x2ZWQnLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGV4ZWN1dGFibGUgPSAoKSA9PiB7fSwgb25SZXNvbHZlLCBvblJlamVjdCwgb25DYW5jZWwpIHtcclxuICAgIGlmICh0eXBlb2YgZXhlY3V0YWJsZSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgbmV3IERlZmVycmVkLiBFeGVjdXRhYmxlIG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvblJlc29sdmUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvblJlc29sdmUgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIG5ldyBEZWZlcnJlZC4gT25SZXNvbHZlIG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvblJlamVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9uUmVqZWN0ICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBuZXcgRGVmZXJyZWQuIE9uUmVqZWN0IG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBvbkNhbmNlbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9uQ2FuY2VsICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGNyZWF0ZSBuZXcgRGVmZXJyZWQuIE9uQ2FuY2VsIG11c3QgYmUgYSBmdW5jdGlvbi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlcztcclxuICAgIGxldCByZWo7XHJcbiAgICBsZXQgY2FuY2VsO1xyXG4gICAgY29uc3Qgc3RhdHVzID0ge1xyXG4gICAgICByZXNvbHZlZDogZmFsc2UsXHJcbiAgICAgIHJlamVjdGVkOiBmYWxzZSxcclxuICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxyXG4gICAgICBwZW5kaW5nOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBzdXBlcigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIC8vIFN0b3JlIHRoZSByZXNvbHZlclxyXG4gICAgICByZXMgPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBzdGF0dXMucmVzb2x2ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVzb2x2ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG9uUmVzb2x2ZSh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIFN0b3JlIHRoZSByZWplY3RlclxyXG4gICAgICByZWogPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBzdGF0dXMucmVqZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVqZWN0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb25SZWplY3QodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZWplY3QodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIFN0b3JlIHRoZSBjYW5jZWxlclxyXG4gICAgICBjYW5jZWwgPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cy5wZW5kaW5nKSB7XHJcbiAgICAgICAgICBzdGF0dXMuY2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgc3RhdHVzLnBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIG9uQ2FuY2VsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb25DYW5jZWwodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBSdW4gdGhlIGV4ZWN1dGFibGUgd2l0aCBjdXN0b20gcmVzb2x2ZXIgYW5kIHJlamVjdGVyXHJcbiAgICAgIGV4ZWN1dGFibGUocmVzLCByZWosIGNhbmNlbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB0aGlzLl9yZXNvbHZlID0gcmVzO1xyXG4gICAgdGhpcy5fcmVqZWN0ID0gcmVqO1xyXG4gICAgdGhpcy5fY2FuY2VsID0gY2FuY2VsO1xyXG4gICAgdGhpcy5fZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSByZXNvbHZlZCBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCByZXNvbHZlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMucmVzb2x2ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSByZWplY3RlZCBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCByZWplY3RlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMucmVqZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBjYW5jZWxlZCBzdGF0ZSBvZiB0aGUgcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCBjYW5jZWxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0dXMuY2FuY2VsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBwZW5kaW5nIHN0YXRlIG9mIHRoZSBwcm9taXNlLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICovXHJcbiAgZ2V0IHBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzLnBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgcHJvbWlzZSB0byByZXNvbHZlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIFZhbHVlIHRvIHBhc3MgdG8gdGhlIHJlc29sdmVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2FueX0gLSBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSByZXNvbHZlciBmdW5jdGlvbi5cclxuICAgKi9cclxuICByZXNvbHZlKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgcHJvbWlzZSB0byByZWplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gcGFzcyB0byB0aGUgcmVqZWN0ZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7YW55fSAtIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHJlamVjdGVyIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG4gIHJlamVjdCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlamVjdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSB0aGUgcHJvbWlzZSB0byByZXNvbHZlIGFuZCBzZXQgdGhlIGNhbmNlbGVkIHN0YXRlIHRvIHRydWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gcGFzcyB0byB0aGUgY2FuY2VsbGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2FueX0gLSBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYW5jZWxsZXIgZnVuY3Rpb24uXHJcbiAgICovXHJcbiAgY2FuY2VsKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FuY2VsKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJ1biB0aGUgcHJvbWlzZSBmdW5jdGlvbiB0byB0cnkgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZS4gUHJvbWlzZSBtdXN0IGJlXHJcbiAgICogcGVuZGluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Li4uYW55fSBhcmdzIC0gT3B0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgYWZ0ZXIgcmVzb2x2ZSBhbmQgcmVqZWN0LlxyXG4gICAqL1xyXG4gIGV4ZWN1dGUoLi4uYXJncykge1xyXG4gICAgaWYgKHRoaXMucGVuZGluZykge1xyXG4gICAgICB0aGlzLl9leGVjdXRhYmxlKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCwgdGhpcy5fY2FuY2VsLCAuLi5hcmdzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGNhbmNlbGVkIGRlZmVycmVkIHByb21pc2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gY2FuY2VsIHRoZSBwcm9taXNlIHdpdGguXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XHJcbiAgICovXHJcbiAgc3RhdGljIGNhbmNlbCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBEZWZlcnJlZCgoX3Jlc29sdmUsIF9yZWplY3QsIGNhbmNlbCkgPT4ge1xyXG4gICAgICBjYW5jZWwodmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVmZXJyZWQgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvciByZWplY3Qgb25jZSBhbGwgcHJvbWlzZXNcclxuICAgKiBpbiB0aGUgaW5wdXQgYXJyYXkgaGF2ZSBiZWVuIHJlc29sdmVkIG9yIG9uZSBwcm9taXNlIGlzIGNhbmNlbGVkIG9yIHJlamVjdGVkLlxyXG4gICAqIFByb21pc2VzIGluIHRoZSBhcnJheSB0aGF0IGFyZSBEZWZlcnJlZCBwcm9taXNlcyB3aWxsIGJlIG1hbnVhbGx5IHJlc29sdmVkLFxyXG4gICAqIHJlamVjdGVkIG9yIGNhbmNlbGVkIHdoZW4gY2FsbGluZyByZXNvbHZlLCByZWplY3Qgb3IgY2FuY2VsIG9uIHRoZSByZXR1cm4gcHJvbWlzZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPGFueT59IGl0ZXJhYmxlIC0gQW4gaXRlcmFibGUgc3VjaCBhcyBhbiBhcnJheS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25SZXNvbHZlIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVzb2x2ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uUmVqZWN0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBwcm9taXNlXHJcbiAgICogaXMgcmVqZWN0ZWQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzXHJcbiAgICogdGhlIHByb21pc2UuIENhbmNlbGluZyByZXN1bHRzIGluIHRoZSBwcm9taXNlIGhhdmluZyBhIHN0YXR1cyBvZiAnY2FuY2VsZWQnLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgRGVmZXJyZWRcclxuICAgKi9cclxuICBzdGF0aWMgYWxsKGl0ZXJhYmxlLCBvblJlc29sdmUsIG9uUmVqZWN0LCBvbkNhbmNlbCkge1xyXG4gICAgaWYgKGl0ZXJhYmxlID09IG51bGwgfHwgdHlwZW9mIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgbGV0IGUgPSBgQ2Fubm90IGV4ZWN1dGUgRGVmZXJyZWQuYWxsLiBGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGl0ZXJhYmxlLmA7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uUmVqZWN0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgZSA9IG9uUmVqZWN0KGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFycmF5ID0gWy4uLml0ZXJhYmxlXTtcclxuICAgIGNvbnN0IGRlZmVycmVkID0gYXJyYXkuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERlZmVycmVkKTtcclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgRGVmZXJyZWQoXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgcmVzb2x2ZVZhbHVlID0+IHtcclxuICAgICAgICBkZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaXRlbS5yZXNvbHZlKHJlc29sdmVWYWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGVmZXJyZWQubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvblJlc29sdmUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBvblJlc29sdmUocmVzb2x2ZVZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmVWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgICBkZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaXRlbS5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRlZmVycmVkLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb25SZWplY3QgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBvblJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGNhbmNlbFZhbHVlID0+IHtcclxuICAgICAgICBkZWZlcnJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaXRlbS5jYW5jZWwoY2FuY2VsVmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRlZmVycmVkLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb25DYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIHJldHVybiBvbkNhbmNlbChjYW5jZWxWYWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBjYW5jZWxWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbnVtSXRlbXMgPSBhcnJheS5sZW5ndGg7XHJcbiAgICBjb25zdCBpdGVtVHJhY2tlciA9IHtcclxuICAgICAgZmFpbGVkOiBmYWxzZSxcclxuICAgICAgbnVtUmVzb2x2ZWQ6IDAsXHJcbiAgICAgIHJlc29sdXRpb25zOiBbXVxyXG4gICAgfVxyXG5cclxuICAgIGFycmF5LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChpdGVtVHJhY2tlci5mYWlsZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBpZiAoIShpdGVtIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcclxuICAgICAgICBpdGVtVHJhY2tlci5yZXNvbHV0aW9uc1tpbmRleF0gPSBpdGVtO1xyXG4gICAgICAgIGl0ZW1UcmFja2VyLm51bVJlc29sdmVkICs9IDE7XHJcblxyXG4gICAgICAgIGlmIChpdGVtVHJhY2tlci5udW1SZXNvbHZlZCA9PT0gbnVtSXRlbXMpIHtcclxuICAgICAgICAgIHJlc3VsdC5yZXNvbHZlKGl0ZW1UcmFja2VyLnJlc29sdXRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpdGVtLnRoZW4oXHJcbiAgICAgICAgdmFsdWUgPT4ge1xyXG4gICAgICAgICAgaWYgKCFpdGVtVHJhY2tlci5mYWlsZWQgJiYgIWl0ZW0uY2FuY2VsZWQpIHtcclxuICAgICAgICAgICAgaXRlbVRyYWNrZXIucmVzb2x1dGlvbnNbaW5kZXhdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGl0ZW1UcmFja2VyLm51bVJlc29sdmVkICs9IDE7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbVRyYWNrZXIubnVtUmVzb2x2ZWQgPT09IG51bUl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0LnJlc29sdmUoaXRlbVRyYWNrZXIucmVzb2x1dGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCFpdGVtVHJhY2tlci5mYWlsZWQpIHtcclxuICAgICAgICAgICAgaXRlbVRyYWNrZXIuZmFpbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbmNlbCh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICBpZiAoIWl0ZW1UcmFja2VyLmZhaWxlZCkge1xyXG4gICAgICAgICAgICBpdGVtVHJhY2tlci5mYWlsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHQucmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgRGVmZXJyZWQ7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5cclxuLyoqXHJcbiAqIEEgY29sbGVjdGlvbiBvZiB1c2VmdWwgZ2VuZXJpYyBmdW5jdGlvbnMuXHJcbiAqXHJcbiAqIEBoaWRlY29uc3RydWN0b3JcclxuICovXHJcbmNsYXNzIFV0aWxzIHtcclxuICAvKipcclxuICAgKiBAc3RhdGljXHJcbiAgICpcclxuICAgKiBHZW5lcmF0ZSBhIHVuaXF1ZSBpZFxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1N0cmluZ31cclxuICAgKi9cclxuICBzdGF0aWMgY3JlYXRlSWQoKSB7XHJcbiAgICByZXR1cm4gJ3h4eHh4eHh4eHh4eDR4eHh5eHh4eHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGMgPT4ge1xyXG4gICAgICBjb25zdCByYW5kb21OdW1iZXIgPSBNYXRoLmZsb29yKChEYXRlLm5vdygpICsgTWF0aC5yYW5kb20oKSAqIDE2KSAlIDE2KTtcclxuICAgICAgaWYgKGMgPT09ICd4Jykge1xyXG4gICAgICAgIHJldHVybiByYW5kb21OdW1iZXIudG9TdHJpbmcoMTYpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFNldCBiaXQgNiBhbmQgNyB0byAwIGFuZCAxXHJcbiAgICAgIHJldHVybiAoKHJhbmRvbU51bWJlciAmIDB4MykgfCAweDgpLnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHN0YXRpY1xyXG4gICAqXHJcbiAgICogQ2hlY2sgYSBuYW1lIHN0cmluZyBhZ2FpbnN0IGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHVuaXF1ZS5cclxuICAgKiBJZiBpdCBpc24ndCwgYXBwZW5kIGluY3JlbWVudGVkIHRyYWlsaW5nIGludGVnZXJzIHRvIHRoZSBlbmQgb2YgdGhlIG5hbWVcclxuICAgKiB1bnRpbCBpdCBpcyB1bmlxdWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFN0cmluZyBuYW1lIHRvIG1ha2UgdW5pcXVlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBuYW1lQXJyYXkgLSBBcnJheSBvZiBzdHJpbmcgbmFtZXMgdG8gY2hlY2sgYWdhaW5zLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBzdGF0aWMgZ2V0VW5pcXVlTmFtZShuYW1lLCBuYW1lQXJyYXkgPSBbXSkge1xyXG4gICAgLy8gSWYgdGhlIG5hbWUgaXNuJ3QgaW4gdGhlIGFycmF5IHJldHVybiBpdCByaWdodCBhd2F5XHJcbiAgICBpZiAoIW5hbWVBcnJheS5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICByZXR1cm4gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuYW1lU2V0ID0gbmV3IFNldChuYW1lQXJyYXkpO1xyXG5cclxuICAgIC8vIFNlcGFyYXRlIHRoZSBuYW1lIGludG8gc3RyaW5nIGFuZCB0cmFpbGluZyBudW1iZXJzXHJcbiAgICBjb25zdCBtYXRjaEdyb3VwID0gbmFtZS5tYXRjaCgvXFxkKiQvKTtcclxuICAgIGNvbnN0IHtpbmRleH0gPSBtYXRjaEdyb3VwO1xyXG4gICAgY29uc3QgYmFzZU5hbWUgPSBuYW1lLnNsaWNlKDAsIGluZGV4KTtcclxuICAgIGxldCBpbmNyZW1lbnQgPSBOdW1iZXIobWF0Y2hHcm91cFswXSk7XHJcblxyXG4gICAgLy8gRmluZCB0aGUgaGlnaGVzdCB0cmFpbGluZyBudW1iZXIgdmFsdWUgZm9yIHRoZSBiYXNlIG9mIHRoZSBuYW1lXHJcbiAgICBuYW1lU2V0LmZvckVhY2goc2V0TmFtZSA9PiB7XHJcbiAgICAgIGNvbnN0IHNldE1hdGNoR3JvdXAgPSBzZXROYW1lLm1hdGNoKC9cXGQqJC8pO1xyXG5cclxuICAgICAgaWYgKHNldE5hbWUuc2xpY2UoMCwgc2V0TWF0Y2hHcm91cC5pbmRleCkgPT09IGJhc2VOYW1lKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0SW5jcmVtZW50ID0gTnVtYmVyKHNldE1hdGNoR3JvdXBbMF0pO1xyXG5cclxuICAgICAgICBpZiAoc2V0SW5jcmVtZW50ID4gaW5jcmVtZW50KSB7XHJcbiAgICAgICAgICBpbmNyZW1lbnQgPSBzZXRJbmNyZW1lbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBJbmNyZW1lbnQgdGhlIGhpZ2hlc3QgdHJhaWxpbmcgbnVtYmVyIGFuZCBhcHBlbmQgdG8gdGhlIG5hbWVcclxuICAgIHJldHVybiBgJHtiYXNlTmFtZX0ke2luY3JlbWVudCArIDF9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGRlZmVycmVkIHByb21pc2UgdGhhdCB3aWxsIHdhaXQgYSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmVcclxuICAgKiByZXNvbHZpbmcuIFBhc3MgZGVsdGEgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gdGhlIGRlZmVycmVkIHByb21pc2UncyBleGVjdXRlXHJcbiAgICogbWV0aG9kIGluIGFuIHVwZGF0ZSBsb29wIHRvIHByb2dyZXNzIHRpbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSByZXNvbHZpbmcuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBvYmplY3RcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkZpbmlzaF0gLSBDYWxsYmFjayB0byBleGVjdXRlIG9uY2UgdGhlIHdhaXQgdGltZVxyXG4gICAqIGlzIG1ldC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vblByb2dyZXNzIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBlYWNoIHRpbWUgdGhlIHdhaXRcclxuICAgKiB0aW1lIHByb2dyZXNzZXMgdG93YXJkcyB0aGUgdGFyZ2V0IG51bWJlciBvZiBzZWNvbmRzLiBUaGUgYW1vdW50IG9mIHByb2dyZXNzXHJcbiAgICogYXMgYSAwLTEgcGVyY2VudGFnZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25DYW5jZWwgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB1c2VyIGNhbmNlbHNcclxuICAgKiB0aGUgd2FpdCBiZWZvcmUgY29tcGxldGlvbi5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkVycm9yIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgd2FpdCBzdG9wc1xyXG4gICAqIGJlY2F1c2UgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuIFRoZSBlcnJvciBtZXNzYWdlIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cclxuICAgKi9cclxuICBzdGF0aWMgd2FpdChzZWNvbmRzID0gMCwge29uRmluaXNoLCBvblByb2dyZXNzLCBvbkNhbmNlbCwgb25FcnJvcn0gPSB7fSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHNlY29uZHMgaXMgbnVtZXJpY1xyXG4gICAgaWYgKHR5cGVvZiBzZWNvbmRzICE9PSAnbnVtYmVyJykge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYEludmFsaWQgc2Vjb25kcyB2YWx1ZSAke3NlY29uZHN9IGZvciB3YWl0LiBEZWZhdWx0aW5nIHRvIDAuYFxyXG4gICAgICApO1xyXG5cclxuICAgICAgc2Vjb25kcyA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzb2x2ZSBpbW1lZGlhdGVseSBpZiB0aGUgd2FpdCB0aW1lIGlzIG5vdCBncmVhdGVyIHRoYW4gMFxyXG4gICAgaWYgKHNlY29uZHMgPD0gMCkge1xyXG4gICAgICBpZiAodHlwZW9mIG9uRmluaXNoID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25GaW5pc2goKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY3VycmVudFRpbWUgPSAwO1xyXG4gICAgY29uc3QgdG90YWxUaW1lID0gc2Vjb25kcyAqIDEwMDA7IC8vIGNvbnZlcnQgdG8gbWlsbGlzZWNvbmRzXHJcblxyXG4gICAgLy8gRXhlY3V0YWJsZSB0byBwYXNzIHRvIERlZmVycmVkLCBtZWFudCB0byBiZSBydW4gaW4gYW4gdXBkYXRlIGxvb3BcclxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHJlc29sdmUsIHJlamVjdCwgX2NhbmNlbCwgZGVsdGFUaW1lID0gMCkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGRlbHRhVGltZSAhPT0gJ251bWJlcicpIHtcclxuICAgICAgICBjb25zdCBlID0gbmV3IEVycm9yKFxyXG4gICAgICAgICAgYEludmFsaWQgcHJvcGVydHkgd2FpdCBkZWx0YVRpbWUuIERlbHRhVGltZSBtdXN0IGJlIGEgbnVtYmVyLmBcclxuICAgICAgICApO1xyXG4gICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aW1lIGhhcyBwYXNzZWRcclxuICAgICAgaWYgKGRlbHRhVGltZSA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2lnbmFsIHByb2dyZXNzXHJcbiAgICAgIGN1cnJlbnRUaW1lICs9IGRlbHRhVGltZTtcclxuICAgICAgaWYgKGN1cnJlbnRUaW1lIDwgMCkge1xyXG4gICAgICAgIGN1cnJlbnRUaW1lID0gMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiBvblByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25Qcm9ncmVzcyhNYXRoLm1pbihjdXJyZW50VGltZSAvIHRvdGFsVGltZSwgMSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTaWduYWwgY29tcGxldGlvbiBvbmNlIHRpbWUgaXMgdXBcclxuICAgICAgaWYgKGN1cnJlbnRUaW1lID49IHRvdGFsVGltZSkge1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbmV3IERlZmVycmVkKG9uVXBkYXRlLCBvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAqIEdldCBhIHJhbmRvbSBmbG9hdCBudW1iZXIgYmV0d2VlbiBhIG1pbiAoaW5jbHVzaXZlKSBhbmQgbWF4IChleGNsdXNpdmUpIHZhbHVlXHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gbWluaW11bSB2YWx1ZVxyXG4gICAgKiBAcGFyYW0ge251bWJlcn0gbWF4IG1heGltdW0gdmFsdWVcclxuICAgICogQHJldHVybnMge2Zsb2F0fVxyXG4gICAgKi9cclxuICBzdGF0aWMgZ2V0UmFuZG9tRmxvYXQobWluLCBtYXgpIHtcclxuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICogR2V0IGEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGJldHdlZW4gYSBtaW4gKGluY2x1c2l2ZSkgYW5kIG1heCAoZXhjbHVzaXZlKSB2YWx1ZVxyXG4gICAgKiBAcGFyYW0ge251bWJlcn0gbWluIG1pbmltdW0gdmFsdWVcclxuICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCBtYXhpbXVtIHZhbHVlXHJcbiAgICAqIEByZXR1cm5zIHtpbnRlZ2VyfVxyXG4gICAgKi9cclxuICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KSB7XHJcbiAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcclxuICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcclxuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBVdGlscztcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmNvbnN0IFJhZGlhblRvRGVncmVlID0gMTgwIC8gTWF0aC5QSTtcbmNvbnN0IERlZ3JlZVRvUmFkaWFuID0gTWF0aC5QSSAvIDE4MDtcblxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgdXNlZnVsIG1hdGggZnVuY3Rpb25zLlxuICpcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqL1xuY2xhc3MgTWF0aFV0aWxzIHtcbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIGdpdmVuIGFuZ2xlIGZyb20gcmFkaWFucyB0byBkZWdyZWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmFkaWFucyAtIEFuZ2xlIGluIHJhZGlhbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gQW5nbGUgaW4gZGVncmVlcy5cbiAgICovXG4gIHN0YXRpYyB0b0RlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUmFkaWFuVG9EZWdyZWU7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgZ2l2ZW4gYW5nbGUgZnJvbSBkZWdyZWVzIHRvIHJhZGlhbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWdyZWVzIC0gQW5nbGUgaW4gZGVncmVlcy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gLSBBbmdsZSBpbiByYWRpYW5zLlxuICAgKi9cbiAgc3RhdGljIHRvUmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBEZWdyZWVUb1JhZGlhbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW5lYXJseSBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHR3byB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tIC0gU3RhcnQgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0byAtIFRhcmdldCB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBhbW91bnQgdG8gaW50ZXJwb2xhdGUgYmV0d2VlbiBmcm9tIGFuZCB0by5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyBsZXJwKGZyb20sIHRvLCBmYWN0b3IpIHtcbiAgICByZXR1cm4gZnJvbSArICh0byAtIGZyb20pICogZmFjdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIENsYW1wIGEgbnVtYmVyIGJldHdlZW4gMiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFZhbHVlIHRvIGNsYW1wLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbj0wXSAtIE1pbnVtdW0gdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4PTFdIC0gTWF4aW11bSB2YWx1ZS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyBjbGFtcCh2YWx1ZSwgbWluID0gMCwgbWF4ID0gMSkge1xuICAgIHJldHVybiBNYXRoLm1heChtaW4sIE1hdGgubWluKHZhbHVlLCBtYXgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBjbG9zZXN0IHBvaW50IG9uIGEgZ2l2ZW4gMkQgbGluZSBzZWdlbWVudFxuICAgKiBmcm9tIGEgZ2l2ZW4gMkQgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSBGaXJzdCBwb2ludCBvbiBsaW5lIHNlZ21lbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGIgLSBTZWNvbmQgcG9pbnQgb24gbGluZSBzZWdtZW50LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gMkQgcG9pbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn1cbiAgICovXG4gIHN0YXRpYyBjbG9zZXN0UG9pbnRPbkxpbmUoYSwgYiwgcCkge1xuICAgIGNvbnN0IGRpc3RTcXIgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKGEsIGIpO1xuXG4gICAgLy8gTGluZSBzZWdtZW50IGlzIGEgc2luZ2xlIHBvaW50XG4gICAgaWYgKGRpc3RTcXIgPT09IDApIHtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGNvbnN0IHQgPVxuICAgICAgKChwWzBdIC0gYVswXSkgKiAoYlswXSAtIGFbMF0pICsgKHBbMV0gLSBhWzFdKSAqIChiWzFdIC0gYVsxXSkpIC8gZGlzdFNxcjtcblxuICAgIGxldCBwb2ludCA9IFsuLi5hXTtcbiAgICBpZiAodCA+IDEpIHtcbiAgICAgIHBvaW50ID0gWy4uLmJdO1xuICAgIH0gZWxzZSBpZiAodCA+IDApIHtcbiAgICAgIHBvaW50ID0gW2FbMF0gKyB0ICogKGJbMF0gLSBhWzBdKSwgYVsxXSArIHQgKiAoYlsxXSAtIGFbMV0pXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZGlzdGFuY2Ugc3F1YXJlZCBmb3IgdHdvIDJEIHBvaW50cy5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYSAtIDJEIHBvaW50LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBiIC0gMkQgcG9pbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBzdGF0aWMgZGlzdGFuY2VTcXVhcmVkKGEsIGIpIHtcbiAgICByZXR1cm4gKGFbMF0gLSBiWzBdKSAqIChhWzBdIC0gYlswXSkgKyAoYVsxXSAtIGJbMV0pICogKGFbMV0gLSBiWzFdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlhbmd1bGF0ZXMgYSBzZXQgb2YgMkQgcG9pbnRzIHVzaW5nIGFuIGltcGxlbWVudGF0aW9uXG4gICAqIG9mIHRoZSBCb3d5ZXItV2F0c29uIGluY3JlbWVudGFsIERlbGF1bmF5IHRyaWFuZ3VsYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn0gdmVydGljZXMgLSBBcnJheSBvZiAyRCBwb2ludHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48QXJyYXk8bnVtYmVyPj59IC0gQXJyYXkgb2YgdHJpYW5nbGUgaW5kaWNlcy5cbiAgICovXG4gIHN0YXRpYyBnZXREZWxhdW5heVRyaWFuZ3VsYXRpb24odmVydGljZXMpIHtcbiAgICBpZiAoIXZlcnRpY2VzIHx8IHZlcnRpY2VzLmxlbmd0aCA8IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgZGVsYXVuYXkgdHJpYW5ndWxhdGlvbiBmb3IgcG9pbnRzICR7dmVydGljZXN9LiBJbnB1dCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgdGhyZWUgcG9pbnRzLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IG1pblggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgbGV0IG1pblkgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgbGV0IG1heFggPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgbGV0IG1heFkgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cbiAgICB2ZXJ0aWNlcy5mb3JFYWNoKHYgPT4ge1xuICAgICAgbWluWCA9IHZbMF0gPCBtaW5YID8gdlswXSA6IG1pblg7XG4gICAgICBtaW5ZID0gdlsxXSA8IG1pblkgPyB2WzFdIDogbWluWTtcbiAgICAgIG1heFggPSB2WzBdID4gbWF4WCA/IHZbMF0gOiBtYXhYO1xuICAgICAgbWF4WSA9IHZbMV0gPiBtYXhZID8gdlsxXSA6IG1heFk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBkWCA9IG1heFggLSBtaW5YO1xuICAgIGNvbnN0IGRZID0gbWF4WSAtIG1pblk7XG4gICAgY29uc3QgbWlkWCA9IChtaW5YICsgbWF4WCkgLyAyO1xuICAgIGNvbnN0IG1pZFkgPSAobWluWSArIG1heFkpIC8gMjtcbiAgICBjb25zdCBkTWF4ID0gZFggPiBkWSA/IGRYIDogZFk7XG5cbiAgICBjb25zdCBzdXBlckluZGljZXMgPSBbXG4gICAgICB2ZXJ0aWNlcy5sZW5ndGgsXG4gICAgICB2ZXJ0aWNlcy5sZW5ndGggKyAxLFxuICAgICAgdmVydGljZXMubGVuZ3RoICsgMixcbiAgICBdO1xuXG4gICAgY29uc3QgdmVydHNXaXRoU3VwZXIgPSBbXG4gICAgICAuLi52ZXJ0aWNlcyxcbiAgICAgIFttaWRYIC0gMjAgKiBkTWF4LCBtaWRZIC0gZE1heF0sXG4gICAgICBbbWlkWCwgbWlkWSArIDIwICogZE1heF0sXG4gICAgICBbbWlkWCArIDIwICogZE1heCwgbWlkWSAtIGRNYXhdLFxuICAgIF07XG5cbiAgICBjb25zdCBzdXBlclNvcnRlZEluZGljZXMgPSBNYXRoVXRpbHMuc29ydFBvaW50c0NDVyhcbiAgICAgIHN1cGVySW5kaWNlcyxcbiAgICAgIHZlcnRzV2l0aFN1cGVyXG4gICAgKTtcblxuICAgIGNvbnN0IHN1cGVyVHJpYW5nbGUgPSB7XG4gICAgICBpbmRpY2VzOiBzdXBlclNvcnRlZEluZGljZXMsXG4gICAgICBlZGdlczogW1xuICAgICAgICBbc3VwZXJTb3J0ZWRJbmRpY2VzWzBdLCBzdXBlclNvcnRlZEluZGljZXNbMV1dLFxuICAgICAgICBbc3VwZXJTb3J0ZWRJbmRpY2VzWzFdLCBzdXBlclNvcnRlZEluZGljZXNbMl1dLFxuICAgICAgICBbc3VwZXJTb3J0ZWRJbmRpY2VzWzJdLCBzdXBlclNvcnRlZEluZGljZXNbMF1dLFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHJpYW5nbGVzID0gW3N1cGVyVHJpYW5nbGVdO1xuXG4gICAgdmVydHNXaXRoU3VwZXIuZm9yRWFjaCgobmV3VmVydCwgbmV3SW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGludmFsaWRUcmlhbmdsZXMgPSBbXTtcbiAgICAgIHRyaWFuZ2xlcy5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIE1hdGhVdGlscy5pc1BvaW50SW5DaXJjdW1DaXJjbGUoXG4gICAgICAgICAgICB2ZXJ0c1dpdGhTdXBlclt0cmlhbmdsZS5pbmRpY2VzWzBdXSxcbiAgICAgICAgICAgIHZlcnRzV2l0aFN1cGVyW3RyaWFuZ2xlLmluZGljZXNbMV1dLFxuICAgICAgICAgICAgdmVydHNXaXRoU3VwZXJbdHJpYW5nbGUuaW5kaWNlc1syXV0sXG4gICAgICAgICAgICBuZXdWZXJ0XG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBpbnZhbGlkVHJpYW5nbGVzLnB1c2godHJpYW5nbGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYm91bmRpbmdQb2x5ID0gW107XG4gICAgICBpbnZhbGlkVHJpYW5nbGVzLmZvckVhY2godHJpYW5nbGUgPT4ge1xuICAgICAgICB0cmlhbmdsZS5lZGdlcy5mb3JFYWNoKGVkZ2UgPT4ge1xuICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgaW52YWxpZFRyaWFuZ2xlcy5mb3JFYWNoKG90aGVyVHJpYW5nbGUgPT4ge1xuICAgICAgICAgICAgaWYgKHRyaWFuZ2xlICE9PSBvdGhlclRyaWFuZ2xlKSB7XG4gICAgICAgICAgICAgIG90aGVyVHJpYW5nbGUuZWRnZXMuZm9yRWFjaChvdGhlckVkZ2UgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIChlZGdlWzBdID09PSBvdGhlckVkZ2VbMF0gJiYgZWRnZVsxXSA9PT0gb3RoZXJFZGdlWzFdKSB8fFxuICAgICAgICAgICAgICAgICAgKGVkZ2VbMV0gPT09IG90aGVyRWRnZVswXSAmJiBlZGdlWzBdID09PSBvdGhlckVkZ2VbMV0pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb3VudCArPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGNvdW50ID09PSAwKSBib3VuZGluZ1BvbHkucHVzaChlZGdlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaW52YWxpZFRyaWFuZ2xlcy5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcbiAgICAgICAgdHJpYW5nbGVzLnNwbGljZSh0cmlhbmdsZXMuaW5kZXhPZih0cmlhbmdsZSksIDEpO1xuICAgICAgfSk7XG5cbiAgICAgIGJvdW5kaW5nUG9seS5mb3JFYWNoKGVkZ2UgPT4ge1xuICAgICAgICBjb25zdCBzb3J0ZWRJbmRpY2VzID0gTWF0aFV0aWxzLnNvcnRQb2ludHNDQ1coXG4gICAgICAgICAgW2VkZ2VbMF0sIGVkZ2VbMV0sIG5ld0luZGV4XSxcbiAgICAgICAgICB2ZXJ0c1dpdGhTdXBlclxuICAgICAgICApO1xuXG4gICAgICAgIHRyaWFuZ2xlcy5wdXNoKHtcbiAgICAgICAgICBpbmRpY2VzOiBzb3J0ZWRJbmRpY2VzLFxuICAgICAgICAgIGVkZ2VzOiBbXG4gICAgICAgICAgICBbc29ydGVkSW5kaWNlc1swXSwgc29ydGVkSW5kaWNlc1sxXV0sXG4gICAgICAgICAgICBbc29ydGVkSW5kaWNlc1sxXSwgc29ydGVkSW5kaWNlc1syXV0sXG4gICAgICAgICAgICBbc29ydGVkSW5kaWNlc1syXSwgc29ydGVkSW5kaWNlc1swXV0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRyaWFuZ2xlc1RvUmVtb3ZlID0gW107XG4gICAgdHJpYW5nbGVzLmZvckVhY2godHJpYW5nbGUgPT4ge1xuICAgICAgdHJpYW5nbGUuaW5kaWNlcy5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgICAgaWYgKHN1cGVySW5kaWNlcy5pbmNsdWRlcyhpbmRleCkpIHtcbiAgICAgICAgICB0cmlhbmdsZXNUb1JlbW92ZS5wdXNoKHRyaWFuZ2xlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0cmlhbmdsZXNUb1JlbW92ZS5mb3JFYWNoKHRyaWFuZ2xlID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdHJpYW5nbGVzLmluZGV4T2YodHJpYW5nbGUpO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0cmlhbmdsZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0cmlhbmdsZXMubWFwKHRyaWFuZ2xlID0+IHRyaWFuZ2xlLmluZGljZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYSBnaXZlbiAyRCBwb2ludCBpcyB3aXRoaW4gdGhlIGNpY3J1bWNpcmNsZVxuICAgKiBkZWZpbmVkIGJ5IHRocmVlIDJEIHBvaW50cy4gVGhlIHRyaWFuZ2xlIHBvaW50cyBtdXN0IGJlIGluXG4gICAqIGNvdW50ZXItY2xvY2t3aXNlIG9yZGVyIGEgLT4gYiAtPiBjLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhIC0gRmlyc3QgdHJpYW5nbGUgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGIgLSBTZWNvbmQgdHJpYW5nbGUgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGMgLSBUaGlyZCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcCAtIDJEIHBvaW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc1BvaW50SW5DaXJjdW1DaXJjbGUoYSwgYiwgYywgcCkge1xuICAgIGNvbnN0IGF4ID0gYVswXSAtIHBbMF07XG4gICAgY29uc3QgYXkgPSBhWzFdIC0gcFsxXTtcbiAgICBjb25zdCBieCA9IGJbMF0gLSBwWzBdO1xuICAgIGNvbnN0IGJ5ID0gYlsxXSAtIHBbMV07XG4gICAgY29uc3QgY3ggPSBjWzBdIC0gcFswXTtcbiAgICBjb25zdCBjeSA9IGNbMV0gLSBwWzFdO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIChheCAqIGF4ICsgYXkgKiBheSkgKiAoYnggKiBjeSAtIGN4ICogYnkpIC1cbiAgICAgICAgKGJ4ICogYnggKyBieSAqIGJ5KSAqIChheCAqIGN5IC0gY3ggKiBheSkgK1xuICAgICAgICAoY3ggKiBjeCArIGN5ICogY3kpICogKGF4ICogYnkgLSBieCAqIGF5KSA+XG4gICAgICAwXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gMkQgcG9pbnQgaXMgd2l0aGluIGEgZ2l2ZW4gdHJpYW5nbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGEgLSBGaXJzdCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYiAtIFNlY29uZCB0cmlhbmdsZSBwb2ludC5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gYyAtIFRoaXJkIHRyaWFuZ2xlIHBvaW50LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gMkQgcG9pbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGlzUG9pbnRJblRyaWFuZ2xlKGEsIGIsIGMsIHApIHtcbiAgICBjb25zdCBkZW5vbSA9IChiWzFdIC0gY1sxXSkgKiAoYVswXSAtIGNbMF0pICsgKGNbMF0gLSBiWzBdKSAqIChhWzFdIC0gY1sxXSk7XG4gICAgY29uc3QgYVZhbCA9XG4gICAgICAoKGJbMV0gLSBjWzFdKSAqIChwWzBdIC0gY1swXSkgKyAoY1swXSAtIGJbMF0pICogKHBbMV0gLSBjWzFdKSkgLyBkZW5vbTtcbiAgICBjb25zdCBiVmFsID1cbiAgICAgICgoY1sxXSAtIGFbMV0pICogKHBbMF0gLSBjWzBdKSArIChhWzBdIC0gY1swXSkgKiAocFsxXSAtIGNbMV0pKSAvIGRlbm9tO1xuICAgIGNvbnN0IGNWYWwgPSAxIC0gYVZhbCAtIGJWYWw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgYVZhbCA+PSAwICYmIGFWYWwgPD0gMSAmJiBiVmFsID49IDAgJiYgYlZhbCA8PSAxICYmIGNWYWwgPj0gMCAmJiBjVmFsIDw9IDFcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNvcnRlZCBpbmRpY2VzIG9mIGEgZ2l2ZW4gc2V0IG9mIDJEIHBvaW50cyBpblxuICAgKiBjb3VudGVyLWNsb2Nrd2lzZSBvcmRlci5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gaW5kaWNlcyAtIExpc3Qgb2YgaW5kaWNlcy5cbiAgICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSB2ZXJ0aWNlcyAtIExpc3Qgb2YgMkQgcG9pbnRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn0gLSBMaXN0IG9mIHNvcnRlZCBpbmRpY2VzLlxuICAgKi9cbiAgc3RhdGljIHNvcnRQb2ludHNDQ1coaW5kaWNlcywgdmVydGljZXMpIHtcbiAgICBjb25zdCBjZW50cm9pZCA9IFswLCAwXTtcbiAgICBpbmRpY2VzLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgY2VudHJvaWRbMF0gKz0gdmVydGljZXNbaW5kZXhdWzBdO1xuICAgICAgY2VudHJvaWRbMV0gKz0gdmVydGljZXNbaW5kZXhdWzFdO1xuICAgIH0pO1xuICAgIGNlbnRyb2lkWzBdIC89IGluZGljZXMubGVuZ3RoO1xuICAgIGNlbnRyb2lkWzFdIC89IGluZGljZXMubGVuZ3RoO1xuXG4gICAgaW5kaWNlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBiVmFsID0gTWF0aC5hdGFuMihcbiAgICAgICAgdmVydGljZXNbYl1bMV0gLSBjZW50cm9pZFsxXSxcbiAgICAgICAgdmVydGljZXNbYl1bMF0gLSBjZW50cm9pZFswXVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFWYWwgPSBNYXRoLmF0YW4yKFxuICAgICAgICB2ZXJ0aWNlc1thXVsxXSAtIGNlbnRyb2lkWzFdLFxuICAgICAgICB2ZXJ0aWNlc1thXVswXSAtIGNlbnRyb2lkWzBdXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gYVZhbCAtIGJWYWw7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5kaWNlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWNsdWF0ZXMgdGhlIGFyZWEgb2YgYSB0cmlhbmdsZVxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhIC0gRmlyc3QgdHJpYW5nbGUgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGIgLSBTZWNvbmQgdHJpYW5nbGUgcG9pbnQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGMgLSBUaGlyZCB0cmlhbmdsZSBwb2ludC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyB0cmlhbmdsZUFyZWEoYSwgYiwgYykge1xuICAgIHJldHVybiBNYXRoLmFicyhcbiAgICAgIChhWzBdICogKGJbMV0gLSBjWzFdKSArIGJbMF0gKiAoY1sxXSAtIGFbMV0pICsgY1swXSAqIChhWzFdIC0gYlsxXSkpICogMC41XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1hZ25pdHVkZSBvZiBhIGdpdmVuIHZlY3RvciBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yIC0gQXJyYXkgY29uc2lzdGluZyBvZiBudW1iZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGdldFZlY3Rvck1hZ25pdHVkZSh2ZWN0b3IpIHtcbiAgICBpZiAoISh2ZWN0b3IgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgbWFnbml0dWRlIGZvciB2ZWN0b3IgJHt2ZWN0b3J9LiBJbnB1dCBtdXN0IGJlIGFuIEFycmF5IG51bWJlcnMuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWR1Y2VyID0gKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY3VycmVudFZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBnZXQgbWFnbml0dWRlIGZvciB2ZWN0b3IgJHt2ZWN0b3J9LiBBbGwgaXRlbXMgaW4gdGhlIGlucHV0IEFycmF5IG11c3QgYmUgbnVtYmVycy5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIChjdXJyZW50VmFsdWUgKiogMik7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGguc3FydCh2ZWN0b3IucmVkdWNlKHJlZHVjZXIsIDApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRvdCBwcm9kdWN0IGJldHdlZW4gdHdvIHZlY3RvcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvckEgLSBBcnJheSBjb25zaXN0aW5nIG9mIG51bWJlcnMuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvckIgLSBBcnJheSBjb25zaXN0aW5nIG9mIG51bWJlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBzdGF0aWMgZ2V0RG90UHJvZHVjdCh2ZWN0b3JBLCB2ZWN0b3JCKSB7XG4gICAgaWYgKCEodmVjdG9yQSBpbnN0YW5jZW9mIEFycmF5KSB8fCAhKHZlY3RvckIgaW5zdGFuY2VvZiBBcnJheSkgfHwgdmVjdG9yQS5sZW5ndGggIT09IHZlY3RvckIubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZG90IHByb2R1Y3QgYmV0d2VlbiAke3ZlY3RvckF9IGFuZCAke3ZlY3RvckJ9LiBJbnB1dHMgbXVzdCBiZSB2ZWN0b3JzIG9mIHRoZSBzYW1lIGxlbmd0aC5gKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICB2ZWN0b3JBLmZvckVhY2goKHZhbHVlQSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlQiA9IHZlY3RvckJbaW5kZXhdO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlQSAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlQiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IGRvdCBwcm9kdWN0IGJldHdlZW4gJHt2ZWN0b3JBfSBhbmQgJHt2ZWN0b3JCfS4gVmVjdG9ycyBtdXN0IG9ubHkgY29uc2lzdCBvZiBudW1lcmljIHZhbHVlcy5gKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ICs9IHZhbHVlQSAqIHZhbHVlQjtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBhbmdsZSBpbiByYWRpYW5zIGJldHdlZW4gdmVjdG9yQSBhbmQgdmVjdG9yQi5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yQSAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdmVjdG9yQiAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyBnZXRBbmdsZUJldHdlZW4odmVjdG9yQSwgdmVjdG9yQikge1xuICAgIGNvbnN0IG5vcm1hbEEgPSB0aGlzLm5vcm1hbGl6ZVZlY3RvcihbLi4udmVjdG9yQV0pO1xuICAgIGNvbnN0IG5vcm1hbEIgPSB0aGlzLm5vcm1hbGl6ZVZlY3RvcihbLi4udmVjdG9yQl0pO1xuICAgIGNvbnN0IGRvdCA9IHRoaXMuZ2V0RG90UHJvZHVjdChub3JtYWxBLCBub3JtYWxCKTtcblxuICAgIHJldHVybiBNYXRoLmFjb3ModGhpcy5jbGFtcChkb3QsIC0xLCAxKSk7XG4gIH1cblxuICAvKipcbiAgICogTXVsdGlwbHkgYSAzeDMgcm90YXRpb24gbWF0cml4IHdpdGggYSB2ZWN0b3IzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB2ZWN0b3IzIC0gQXJyYXkgY29uc2lzdGluZyBvZiAzIG51bWJlcnMgcmVwcmVzZW50aW5nXG4gICAqIGEgZGlyZWN0aW9uIHZlY3Rvci5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gbWF0cml4MyAtIEFuIGFycmF5IG9mIDkgbnVtYmVycyByZXByZXNlbnRpbmcgYSByb3dcbiAgICogbWFqb3Igcm90YXRpb24gbWF0cml4LlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQW4gYXJyYXkgb2YgMyBudW1iZXJzIHJlcHJlc2VudGluZyB0aGUgbmV3IGRpcmVjdGlvblxuICAgKiBvZiB0aGUgdmVjdG9yLlxuICAgKi9cbiAgc3RhdGljIHJvdGF0ZVZlY3Rvcih2ZWN0b3IzLCBtYXRyaXgzKSB7XG4gICAgaWYgKCEodmVjdG9yMyBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgfHwgdmVjdG9yMy5sZW5ndGggIT09IDNcbiAgICAgIHx8ICF2ZWN0b3IzLmV2ZXJ5KHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHJvdGF0ZSB2ZWN0b3IgJHt2ZWN0b3IzfSBieSByb3RhdGlvbiBtYXRyaXggJHttYXRyaXgzfS4gSW5wdXQgdmVjdG9yIG11c3QgYmUgYW4gYXJyYXkgb2YgMyBudW1iZXJzLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCEobWF0cml4MyBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgfHwgbWF0cml4My5sZW5ndGggIT09IDlcbiAgICAgIHx8ICFtYXRyaXgzLmV2ZXJ5KHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHJvdGF0ZSB2ZWN0b3IgJHt2ZWN0b3IzfSBieSByb3RhdGlvbiBtYXRyaXggJHttYXRyaXgzfS4gSW5wdXQgbWF0cml4MyBtdXN0IGJlIGFuIGFycmF5IG9mIDkgbnVtYmVycy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHggPSBtYXRyaXgzWzBdICogdmVjdG9yM1swXVxuICAgICAgKyBtYXRyaXgzWzNdICogdmVjdG9yM1sxXVxuICAgICAgKyBtYXRyaXgzWzZdICogdmVjdG9yM1syXTtcbiAgICBjb25zdCB5ID0gbWF0cml4M1sxXSAqIHZlY3RvcjNbMF1cbiAgICAgICsgbWF0cml4M1s0XSAqIHZlY3RvcjNbMV1cbiAgICAgICsgbWF0cml4M1s3XSAqIHZlY3RvcjNbMl07XG4gICAgY29uc3QgeiA9IG1hdHJpeDNbMl0gKiB2ZWN0b3IzWzBdXG4gICAgICArIG1hdHJpeDNbNV0gKiB2ZWN0b3IzWzFdXG4gICAgICArIG1hdHJpeDNbOF0gKiB2ZWN0b3IzWzJdO1xuXG4gICAgcmV0dXJuIFt4LCB5LCB6XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemUgYSBnaXZlbiB2ZWN0b3IgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHZlY3RvciAtIEFycmF5IGNvbnNpc3Rpbmcgb2YgbnVtYmVycy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSBUaGUgb3JpZ2luYWwgdmVjdG9yIHdpdGggbm9ybWFsaXplZCB2YWx1ZXMsIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHN0YXRpYyBub3JtYWxpemVWZWN0b3IodmVjdG9yKSB7XG4gICAgY29uc3QgbWFnbml0dWRlID0gdGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUodmVjdG9yKTtcblxuICAgIGlmIChtYWduaXR1ZGUgPT09IDApIHtcbiAgICAgIHZlY3Rvci5maWxsKDApXG4gICAgfSBlbHNlIHtcbiAgICAgIHZlY3Rvci5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgdmVjdG9yW2luZGV4XSA9IHZhbHVlIC8gbWFnbml0dWRlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlY3RvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHRoZSAzeDMgcm90YXRpb24gbWF0cml4IGZyb20gYSBnaXZlbiA0eDQgdHJhbnNmb3JtYXRpb24gbWF0cml4LlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBtYXRyaXg0IC0gQW4gYXJyYXkgb2YgMTYgbnVtYmVycyByZXByZXNlbnRpbmcgYSByb3dcbiAgICogbWFqb3IgdHJhbnNmb3JtYXRpb24gbWF0cml4LlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQW4gYXJyYXkgb2YgOSBudW1iZXJzIHJlcHJlc2VudGluZyBhIHJvdyBtYWpvclxuICAgKiByb3RhdGlvbiBtYXRyaXguXG4gICAqL1xuICBzdGF0aWMgZ2V0Um90YXRpb25NYXRyaXgobWF0cml4NCkge1xuICAgIGlmICghKG1hdHJpeDQgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgIHx8IG1hdHJpeDQubGVuZ3RoICE9PSAxNlxuICAgICAgfHwgIW1hdHJpeDQuZXZlcnkodiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgY29udmVydCBtYXRyaXggJHttYXRyaXg0fSB0byBhIHJvdGF0aW9uIG1hdHJpeC4gSW5wdXQgbWF0cml4IG11c3QgYmUgYW4gYXJyYXkgb2YgMTYgbnVtYmVycy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3Qgc2NhbGVcbiAgICBjb25zdCBzY2FsZVggPSAxIC8gKHRoaXMuZ2V0VmVjdG9yTWFnbml0dWRlKG1hdHJpeDQuc2xpY2UoMCwgNCkpIHx8IDEpO1xuICAgIGNvbnN0IHNjYWxlWSA9IDEgLyAodGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUobWF0cml4NC5zbGljZSg0LCA4KSkgfHwgMSk7XG4gICAgY29uc3Qgc2NhbGVaID0gMSAvICh0aGlzLmdldFZlY3Rvck1hZ25pdHVkZShtYXRyaXg0LnNsaWNlKDgsIDEyKSkgfHwgMSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbWF0cml4NFswXSAqIHNjYWxlWCwgbWF0cml4NFsxXSAqIHNjYWxlWCwgbWF0cml4NFsyXSAqIHNjYWxlWCxcbiAgICAgIG1hdHJpeDRbNF0gKiBzY2FsZVksIG1hdHJpeDRbNV0gKiBzY2FsZVksIG1hdHJpeDRbNl0gKiBzY2FsZVksXG4gICAgICBtYXRyaXg0WzhdICogc2NhbGVaLCBtYXRyaXg0WzldICogc2NhbGVaLCBtYXRyaXg0WzEwXSAqIHNjYWxlWlxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHNwaGVyaWNhbCBjb29yZGluYXRlcyBvZiB0aGUgZ2l2ZW4gY2FydGVzaWFuXG4gICAqIHh5eiBjb29yZGluYXRlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBQb3NpdGlvbiBhbG9uZyB0aGUgeCBheGlzLlxuICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFBvc2l0aW9uIGFsb25nIHRoZSB5IGF4aXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gUG9zaXRpb24gYWxvbmcgdGhlIHogYXhpcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIEFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgdGhyZWUgbnVtYmVyZXMgd2hlcmUgaW5kZXhcbiAgICogMCByZXByZXNlbnRzIHRoZSByYWRpdXMsIGluZGV4IDEgcmVwcmVzZW50cyB0aGUgdmVydGljYWwvcG9sYXIgYW5nbGUgaW4gcmFkaWFuc1xuICAgKiBhbmQgaW5kZXggMiByZXByZXNlbnRzIHRoZSBob3Jpem9udGFsL2F6aW11dGhhbCBhbmdsZSBpbiByYWRpYW5zLlxuICAgKi9cbiAgc3RhdGljIGNhcnRlc2lhblRvU3BoZXJpY2FsKHgsIHksIHopIHtcbiAgICBjb25zdCByID0gdGhpcy5nZXRWZWN0b3JNYWduaXR1ZGUoW3gsIHksIHpdKTtcblxuICAgIC8vIFJldHVybiBpZGVudGl0eSBpZiB0aGUgdmVjdG9yIGhhcyBubyBsZW5ndGhcbiAgICBpZiAociA9PT0gMCkge1xuICAgICAgcmV0dXJuIFswLCAwLCAwXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAgcixcbiAgICAgIE1hdGguYWNvcyh0aGlzLmNsYW1wKHkgLyByLCAtIDEsIDEpKSxcbiAgICAgIE1hdGguYXRhbjIoeCwgeiksXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFkdWFsbHkgY2hhbmdlIGEgdmFsdWUgb2YgYSBudW1lcmljIHByb3BlcnR5IHRvd2FyZHMgYSBnb2FsIG92ZXIgdGltZSB1c2luZ1xuICAgKiBhIGNyaXRpY2FsbHkgZGFtcGVkIHNwcmluZyBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRWYWx1ZSAtIFRoZSBzdGFydGluZyB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRhcmdldFZhbHVlLSBUaGUgZ29hbCB2YWx1ZS5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gW3ZhbHVlU3RvcmUgPSBbMCwgMF1dIC0gQW4gQXJyYXkgY29uc2lzdGluZyBvZiB0d29cbiAgICogbnVtYmVycyB3aGVyZSB0aGUgZmlyc3QgbnVtYmVyIGhvbGRzIHRoZSByZXN1bHQgdmFsdWUgYW5kIHRoZSBzZWNvbmQgaG9sZHNcbiAgICogdGhlIHZlbG9jaXR5IHRoYXQgcmVzdWx0ZWQgaW4gdGhhdCB2YWx1ZS4gVGhlIHNhbWUgYXJyYXkgc2hvdWxkIGJlIHByb3ZpZGVkXG4gICAqIHdpdGggZWFjaCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVsdGFUaW1lID0gMWUtN10gLSBUaGUgdGltZSBzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoaXMgZnVuY3Rpb25cbiAgICogaW4gc2Vjb25kcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzbW9vdGhUaW1lID0gMC4zXSAtIFRoZSBhcHByb3hpbWF0ZSBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzXG4gICAqIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZSB0YXJnZXQgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4U3BlZWQgPSAxZTddIC0gQSBjbGFtcGluZyB2YWx1ZSBmb3IgdGhlIG1heGltdW0gc3BlZWQgdGhlXG4gICAqIHZhbHVlIGNhbiBjaGFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBUaGUgdmFsdWVTdG9yZSBhcnJheS5cbiAgICovXG4gIHN0YXRpYyBkYW1wVmFsdWUoXG4gICAgY3VycmVudFZhbHVlLFxuICAgIHRhcmdldFZhbHVlLFxuICAgIHZhbHVlU3RvcmUgPSBbMCwgMF0sXG4gICAgZGVsdGFUaW1lID0gMWUtNyxcbiAgICBzbW9vdGhUaW1lID0gMC4zLFxuICAgIG1heFNwZWVkID0gMWU3XG4gICkge1xuICAgIHNtb290aFRpbWUgPSBNYXRoLm1heCgwLjAwMDEsIHNtb290aFRpbWUpO1xuICAgIGRlbHRhVGltZSA9IE1hdGgubWF4KDFlLTcsIGRlbHRhVGltZSk7XG5cbiAgICAvLyBGaW5kIHRoZSBkZWx0YSBiZXR3ZWVuIHZhbHVlcyBhbmQgdXNlIGl0IHRvIGVzdGltYXRlIHRoZSBwcmV2aW91cyB2YWx1ZVxuICAgIGNvbnN0IGNsYW1wVGltZSA9IG1heFNwZWVkICogc21vb3RoVGltZTtcbiAgICBjb25zdCBkZWx0YVZhbHVlID0gY3VycmVudFZhbHVlIC0gdGFyZ2V0VmFsdWU7XG4gICAgY29uc3QgY2xhbXBEZWx0YVZhbHVlID0gdGhpcy5jbGFtcChkZWx0YVZhbHVlLCAtY2xhbXBUaW1lLCBjbGFtcFRpbWUpO1xuICAgIGNvbnN0IGxhc3RWYWx1ZSA9IGN1cnJlbnRWYWx1ZSAtIGNsYW1wRGVsdGFWYWx1ZTtcblxuICAgIC8vIENhbGN1bGF0ZSBkYW1waW5nIGZhY3RvcnNcbiAgICBjb25zdCBkMSA9IDIgLyBzbW9vdGhUaW1lO1xuICAgIGNvbnN0IGQyID0gZDEgKiBkZWx0YVRpbWU7XG4gICAgY29uc3QgZDMgPSAxIC8gKDEgKyBkMiArIDAuNSAqIGQyICoqIDIgKyAwLjI1ICogZDIgKiogMyk7XG4gICAgY29uc3QgZDQgPSAodmFsdWVTdG9yZVsxXSArIGQxICogY2xhbXBEZWx0YVZhbHVlKSAqIGRlbHRhVGltZTtcblxuICAgIC8vIERhbXAgdGhlIHRhcmdldCB2YWx1ZSBhbmQgdXBkYXRlIHRoZSB2ZWxvY2l0eVxuICAgIHZhbHVlU3RvcmVbMF0gPSBsYXN0VmFsdWUgKyAoY2xhbXBEZWx0YVZhbHVlICsgZDQpICogZDM7XG4gICAgdmFsdWVTdG9yZVsxXSA9ICh2YWx1ZVN0b3JlWzFdIC0gZDEgKiBkNCkgKiBkMztcblxuICAgIC8vIFByZXZlbnQgb3ZlcnNob290aW5nXG4gICAgaWYgKHRhcmdldFZhbHVlIC0gY3VycmVudFZhbHVlID4gMCA9PT0gdmFsdWVTdG9yZVswXSA+IHRhcmdldFZhbHVlKSB7XG4gICAgICB2YWx1ZVN0b3JlWzBdID0gdGFyZ2V0VmFsdWU7XG4gICAgICB2YWx1ZVN0b3JlWzFdID0gKHZhbHVlU3RvcmVbMF0gLSB0YXJnZXRWYWx1ZSkgLyBkZWx0YVRpbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlU3RvcmU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0aFV0aWxzO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRWFzaW5nT2JqZWN0IE9iamVjdCBjb250YWluaW5nIGVhc2luZyBmdW5jdGlvbnNcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IEluIC0gRWFzaW5nICdJbicgZnVuY3Rpb24uIFNob3VsZCB1c2UgdGhlIHNpZ25hdHVyZSAoazpudW1iZXIpOm51bWJlci5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IE91dCAtIEVhc2luZyAnT3V0JyBmdW5jdGlvbi4gU2hvdWxkIHVzZSB0aGUgc2lnbmF0dXJlIChrOm51bWJlcik6bnVtYmVyLlxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gSW5PdXQgLSBFYXNpbmcgJ0luT3V0JyBmdW5jdGlvbi4gU2hvdWxkIHVzZSB0aGUgc2lnbmF0dXJlIChrOm51bWJlcik6bnVtYmVyLlxuICovXG5cbi8qKlxuICogTGluZWFyIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IExpbmVhciA9IHtcbiAgTm9uZShrKSB7XG4gICAgcmV0dXJuIGs7XG4gIH0sXG4gIEluKGspIHtcbiAgICByZXR1cm4gaztcbiAgfSxcbiAgT3V0KGspIHtcbiAgICByZXR1cm4gaztcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIHJldHVybiBrO1xuICB9LFxufTtcblxuLyoqXG4gKiBRdWFkcmF0aWMgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgUXVhZHJhdGljID0ge1xuICBJbihrKSB7XG4gICAgcmV0dXJuIGsgKiBrO1xuICB9LFxuICBPdXQoaykge1xuICAgIHJldHVybiBrICogKDIgLSBrKTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGsgKj0gMjtcbiAgICBpZiAoayA8IDEpIHtcbiAgICAgIHJldHVybiAwLjUgKiBrICogaztcbiAgICB9XG4gICAgcmV0dXJuIC0wLjUgKiAoLS1rICogKGsgLSAyKSAtIDEpO1xuICB9LFxufTtcblxuLyoqXG4gKiBDdWJpYyBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBDdWJpYyA9IHtcbiAgSW4oaykge1xuICAgIHJldHVybiBrICogayAqIGs7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgcmV0dXJuIC0tayAqIGsgKiBrICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGsgKj0gMjtcbiAgICBpZiAoayA8IDEpIHtcbiAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGs7XG4gICAgfVxuXG4gICAgayAtPSAyO1xuICAgIHJldHVybiAwLjUgKiAoayAqIGsgKiBrICsgMik7XG4gIH0sXG59O1xuXG4vKipcbiAqIFF1YXJ0aWMgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgUXVhcnRpYyA9IHtcbiAgSW4oaykge1xuICAgIHJldHVybiBrICogayAqIGsgKiBrO1xuICB9LFxuICBPdXQoaykge1xuICAgIHJldHVybiAxIC0gLS1rICogayAqIGsgKiBrO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgayAqPSAyO1xuICAgIGlmIChrIDwgMSkge1xuICAgICAgcmV0dXJuIDAuNSAqIGsgKiBrICogayAqIGs7XG4gICAgfVxuXG4gICAgayAtPSAyO1xuICAgIHJldHVybiAtMC41ICogKGsgKiBrICogayAqIGsgLSAyKTtcbiAgfSxcbn07XG5cbi8qKlxuICogUXVpbnRpYyBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBRdWludGljID0ge1xuICBJbihrKSB7XG4gICAgcmV0dXJuIGsgKiBrICogayAqIGsgKiBrO1xuICB9LFxuICBPdXQoaykge1xuICAgIHJldHVybiAtLWsgKiBrICogayAqIGsgKiBrICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGsgKj0gMjtcbiAgICBpZiAoayA8IDEpIHtcbiAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrICogaztcbiAgICB9XG5cbiAgICBrIC09IDI7XG4gICAgcmV0dXJuIDAuNSAqIChrICogayAqIGsgKiBrICogayArIDIpO1xuICB9LFxufTtcblxuLyoqXG4gKiBTaW51c29pZGFsIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IFNpbnVzb2lkYWwgPSB7XG4gIEluKGspIHtcbiAgICByZXR1cm4gMSAtIE1hdGguY29zKChrICogTWF0aC5QSSkgLyAyKTtcbiAgfSxcbiAgT3V0KGspIHtcbiAgICByZXR1cm4gTWF0aC5zaW4oKGsgKiBNYXRoLlBJKSAvIDIpO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcbiAgfSxcbn07XG5cbi8qKlxuICogRXhwb25lbnRpYWwgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgRXhwb25lbnRpYWwgPSB7XG4gIEluKGspIHtcbiAgICByZXR1cm4gayA9PT0gMCA/IDAgOiAxMDI0ICoqIChrIC0gMSk7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgcmV0dXJuIGsgPT09IDEgPyAxIDogMSAtIDIgKiogKC0xMCAqIGspO1xuICB9LFxuICBJbk91dChrKSB7XG4gICAgaWYgKGsgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAoayA9PT0gMSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgayAqPSAyO1xuICAgIGlmIChrIDwgMSkge1xuICAgICAgcmV0dXJuIDAuNSAqIDEwMjQgKiogKGsgLSAxKTtcbiAgICB9XG4gICAgcmV0dXJuIDAuNSAqICgtKDIgKiogKC0xMCAqIChrIC0gMSkpKSArIDIpO1xuICB9LFxufTtcblxuLyoqXG4gKiBDaXJjdWxhciBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBDaXJjdWxhciA9IHtcbiAgSW4oaykge1xuICAgIHJldHVybiAxIC0gTWF0aC5zcXJ0KDEgLSBrICogayk7XG4gIH0sXG4gIE91dChrKSB7XG4gICAgcmV0dXJuIE1hdGguc3FydCgxIC0gLS1rICogayk7XG4gIH0sXG4gIEluT3V0KGspIHtcbiAgICBrICo9IDI7XG4gICAgaWYgKGsgPCAxKSB7XG4gICAgICByZXR1cm4gLTAuNSAqIChNYXRoLnNxcnQoMSAtIGsgKiBrKSAtIDEpO1xuICAgIH1cblxuICAgIGsgLT0gMjtcbiAgICByZXR1cm4gMC41ICogKE1hdGguc3FydCgxIC0gayAqIGspICsgMSk7XG4gIH0sXG59O1xuXG4vKipcbiAqIEVsYXN0aWMgRWFzaW5nXG4gKiBAdHlwZSB7RWFzaW5nT2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgRWxhc3RpYyA9IHtcbiAgSW4oaykge1xuICAgIGxldCBzO1xuICAgIGxldCBhID0gMC4xO1xuICAgIGNvbnN0IHAgPSAwLjQ7XG5cbiAgICBpZiAoayA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKGsgPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmICghYSB8fCBhIDwgMSkge1xuICAgICAgYSA9IDE7XG4gICAgICBzID0gcCAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcbiAgICB9XG5cbiAgICBrIC09IDE7XG4gICAgcmV0dXJuIC0oYSAqIDIgKiogKDEwICogaykgKiBNYXRoLnNpbigoKGsgLSBzKSAqICgyICogTWF0aC5QSSkpIC8gcCkpO1xuICB9LFxuICBPdXQoaykge1xuICAgIGxldCBzO1xuICAgIGxldCBhID0gMC4xO1xuICAgIGNvbnN0IHAgPSAwLjQ7XG5cbiAgICBpZiAoayA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKGsgPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmICghYSB8fCBhIDwgMSkge1xuICAgICAgYSA9IDE7XG4gICAgICBzID0gcCAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYSAqIDIgKiogKC0xMCAqIGspICogTWF0aC5zaW4oKChrIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGxldCBzO1xuICAgIGxldCBhID0gMC4xO1xuICAgIGNvbnN0IHAgPSAwLjQ7XG5cbiAgICBpZiAoayA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKGsgPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmICghYSB8fCBhIDwgMSkge1xuICAgICAgYSA9IDE7XG4gICAgICBzID0gcCAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgPSAocCAqIE1hdGguYXNpbigxIC8gYSkpIC8gKDIgKiBNYXRoLlBJKTtcbiAgICB9XG5cbiAgICBrICo9IDI7XG4gICAgaWYgKGsgPCAxKSB7XG4gICAgICBrIC09IDE7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAtMC41ICogKGEgKiAyICoqICgxMCAqIGspICogTWF0aC5zaW4oKChrIC0gcykgKiAoMiAqIE1hdGguUEkpKSAvIHApKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBrIC09IDE7XG4gICAgcmV0dXJuIChcbiAgICAgIGEgKiAyICoqICgtMTAgKiBrKSAqIE1hdGguc2luKCgoayAtIHMpICogKDIgKiBNYXRoLlBJKSkgLyBwKSAqIDAuNSArIDFcbiAgICApO1xuICB9LFxufTtcblxuLyoqXG4gKiBCYWNrIEVhc2luZ1xuICogQHR5cGUge0Vhc2luZ09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IEJhY2sgPSB7XG4gIEluKGspIHtcbiAgICBjb25zdCBzID0gMS43MDE1ODtcbiAgICByZXR1cm4gayAqIGsgKiAoKHMgKyAxKSAqIGsgLSBzKTtcbiAgfSxcbiAgT3V0KGspIHtcbiAgICBjb25zdCBzID0gMS43MDE1ODtcbiAgICByZXR1cm4gLS1rICogayAqICgocyArIDEpICogayArIHMpICsgMTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGNvbnN0IHMgPSAxLjcwMTU4ICogMS41MjU7XG4gICAgayAqPSAyO1xuICAgIGlmIChrIDwgMSkge1xuICAgICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayAtIHMpKTtcbiAgICB9XG5cbiAgICBrIC09IDI7XG4gICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayArIHMpICsgMik7XG4gIH0sXG59O1xuXG4vKipcbiAqIEJvdW5jZSBFYXNpbmdcbiAqIEB0eXBlIHtFYXNpbmdPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBCb3VuY2UgPSB7XG4gIEluKGspIHtcbiAgICByZXR1cm4gMSAtIEJvdW5jZS5PdXQoMSAtIGspO1xuICB9LFxuICBPdXQoaykge1xuICAgIGlmIChrIDwgMSAvIDIuNzUpIHtcbiAgICAgIHJldHVybiA3LjU2MjUgKiBrICogaztcbiAgICB9IGVsc2UgaWYgKGsgPCAyIC8gMi43NSkge1xuICAgICAgayAtPSAxLjU7XG4gICAgICByZXR1cm4gNy41NjI1ICogKGsgLyAyLjc1KSAqIGsgKyAwLjc1O1xuICAgIH0gZWxzZSBpZiAoayA8IDIuNSAvIDIuNzUpIHtcbiAgICAgIGsgLT0gMi4yNTtcbiAgICAgIHJldHVybiA3LjU2MjUgKiAoayAvIDIuNzUpICogayArIDAuOTM3NTtcbiAgICB9XG4gICAgayAtPSAyLjYyNTtcbiAgICByZXR1cm4gNy41NjI1ICogKGsgLyAyLjc1KSAqIGsgKyAwLjk4NDM3NTtcbiAgfSxcbiAgSW5PdXQoaykge1xuICAgIGlmIChrIDwgMC41KSB7XG4gICAgICByZXR1cm4gQm91bmNlLkluKGsgKiAyKSAqIDAuNTtcbiAgICB9XG4gICAgcmV0dXJuIEJvdW5jZS5PdXQoayAqIDIgLSAxKSAqIDAuNSArIDAuNTtcbiAgfSxcbn07XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcblxuLyoqXG4gKiBDbGFzcyB0aGF0IGNhbiBleGVjdXRlIGZ1bmN0aW9ucyB3aGVuIGxvY2FsIG1lc3NhZ2VzIGFyZSByZWNlaXZlZC4gTG9jYWwgbWVzc2FnZXNcbiAqIGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBpbnN0YW5jZSdzIGlkLlxuICpcbiAqIEBhbGlhcyBjb3JlL01lc3NlbmdlclxuICpcbiAqIEBwcm9wZXJ0eSB7Y29yZS9NZXNzZW5nZXJ9IEdsb2JhbE1lc3NlbmdlciAtIEEgbWVzc2VuZ2VyIHRoYXQgY2FuIGJlIHVzZWQgZm9yXG4gKiBnbG9iYWwgbWVzc2FnaW5nLiBXaGVuIHVzaW5nIHN0YXRpYyBsaXN0ZW4gYW5kIGVtaXQgbWV0aG9kcyB0aGV5IGFyZSBleGVjdXRlZFxuICogb24gdGhpcyBtZXNzZW5nZXIuXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gZXZlbnRzIHRoYXQgdGhlIE1lc3NlbmdlciBlbWl0cy5cbiAqL1xuY2xhc3MgTWVzc2VuZ2VyIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge2FueT19IGlkIC0gSWQgZm9yIHRoZSBvYmplY3QuIElmIG5vbmUgaXMgcHJvdmlkZWQgYSBuZXcgaWQgd2lsbFxuICAgKiBiZSBjcmVhdGVkLiBJZCBzaG91bGQgYmUgYWJsZSB0byBiZSByZXByZXNlbnRlZCBhcyBhIHN0cmluZy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGlkKSB7XG4gICAgdGhpcy5faWQgPSBpZCAhPT0gdW5kZWZpbmVkID8gaWQgOiBVdGlscy5jcmVhdGVJZCgpO1xuICAgIHRoaXMuX2Rpc3BhdGNoZXIgPSB3aW5kb3c7XG4gICAgdGhpcy5fY2FsbGJhY2tzID0ge307XG4gICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnMgPSB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdHJpbmcgaWQgb2YgdGhlIG9iamVjdC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZWZpeCBhIG1lc3NhZ2Ugd2l0aCB0aGUgaW5zdGFuY2UgaWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBfY3JlYXRlTG9jYWxNZXNzYWdlKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5pZH0uJHttZXNzYWdlfWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNhbGwgYSBjYWxsYmFjayBmdW5jdGlvbiBhbmQgc3VwcGx5IHRoZSBldmVudCdzXG4gICAqIGRldGFpbCBwcm9wZXJ0eSBhcyBhbiBhcmd1bWVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICpcbiAgICogQHJldHVybnMge0Z1bmN0aW9ufVxuICAgKi9cbiAgX2NyZWF0ZUxpc3RlbmVyKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGUgPT4ge1xuICAgICAgbGV0IHZhbHVlO1xuXG4gICAgICBpZiAoZS5kZXRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSBlLmRldGFpbDtcbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGV2ZW50IG9iamVjdCBhbmQgc2VuZCBpdCB0byBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRXZlbnQgdHlwZSBuYW1lLlxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gVmFsdWUgdG8gc2VuZCB0byBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDdXN0b21FdmVudH1cbiAgICovXG4gIF9jcmVhdGVFdmVudChtZXNzYWdlLCB2YWx1ZSkge1xuICAgIHJldHVybiBuZXcgQ3VzdG9tRXZlbnQobWVzc2FnZSwge2RldGFpbDogdmFsdWV9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbiBldmVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBFdmVudCB0eXBlIG5hbWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIC0gQSBsaXN0ZW5lciBmdW5jdGlvbiBnZW5lcmF0ZWQgdXNpbmcgX2NyZWF0ZUxpc3RlbmVyLlxuICAgKi9cbiAgX2FkZExpc3RlbmVyKG1lc3NhZ2UsIGxpc3RlbmVyKSB7XG4gICAgdGhpcy5fZGlzcGF0Y2hlci5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgdGhpcy5fY3JlYXRlTG9jYWxNZXNzYWdlKG1lc3NhZ2UpLFxuICAgICAgbGlzdGVuZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXIgYW4gZXZlbnQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRXZlbnQgdHlwZSBuYW1lLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIEEgbGlzdGVuZXIgZnVuY3Rpb24gZ2VuZXJhdGVkIHVzaW5nIF9jcmVhdGVMaXN0ZW5lci5cbiAgICovXG4gIF9yZW1vdmVMaXN0ZW5lcihtZXNzYWdlLCBsaXN0ZW5lcikge1xuICAgIHRoaXMuX2Rpc3BhdGNoZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgIHRoaXMuX2NyZWF0ZUxvY2FsTWVzc2FnZShtZXNzYWdlKSxcbiAgICAgIGxpc3RlbmVyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZm9yIHRoaXMgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGxpc3RlbiBmb3IuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBtZXNzYWdlIGlzIHJlY2VpdmVkLlxuICAgKi9cbiAgbGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgYWRkIGxpc3RlbmVyIGZvciAke21lc3NhZ2V9IG9uICR7dGhpcy5pZH0uIENhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbi5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdID0gW107XG4gICAgICB0aGlzLl9ldmVudExpc3RlbmVyc1ttZXNzYWdlXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGxpc3RlbmVyID0gdGhpcy5fY3JlYXRlTGlzdGVuZXIoY2FsbGJhY2spO1xuICAgIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5wdXNoKGNhbGxiYWNrKTtcbiAgICB0aGlzLl9ldmVudExpc3RlbmVyc1ttZXNzYWdlXS5wdXNoKGxpc3RlbmVyKTtcblxuICAgIHRoaXMuX2FkZExpc3RlbmVyKG1lc3NhZ2UsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IGEgZnVuY3Rpb24gZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBmb3IgdGhpc1xuICAgKiBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIHRoZSBtZXNzYWdlLlxuICAgKi9cbiAgc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjaykge1xuICAgIGlmICh0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIGRlZmluZWQsIGNhbGwgc3RvcExpc3RlbmluZyBvbiBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZVxuICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5sZW5ndGggLSAxOyBpID4gLTE7IGktLSkge1xuICAgICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdW2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgY2FsbGJhY2sgd2FzIGRlZmluZWQsIG1ha2Ugc3VyZSBpdCdzIGEgbGlzdGVuZXJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlXS5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGlzdGVuZXIgPSB0aGlzLl9ldmVudExpc3RlbmVyc1ttZXNzYWdlXVtpbmRleF07XG4gICAgdGhpcy5fcmVtb3ZlTGlzdGVuZXIobWVzc2FnZSwgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5fZXZlbnRMaXN0ZW5lcnNbbWVzc2FnZV0uc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIGlmICh0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWxldGUgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VdO1xuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50TGlzdGVuZXJzW21lc3NhZ2VdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZS1yZWdpc3RlciBjYWxsYmFjayhzKSBmcm9tIGJlaW5nIGV4ZWN1dGVkIHdoZW4gbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIGdpdmVuXG4gICAqIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcmUgcmVjZWl2ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVnZXhwfSByZWdleHAgLSByZWdleHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbHRlciBtZXNzYWdlcyB3aXRoLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcbiAgICogcmVtb3ZlIGFsbCBjYWxsYmFja3MgZm9yIG1lc3NhZ2VzIG1hdGNoaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uXG4gICAqL1xuICBzdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gT2JqZWN0LmtleXModGhpcy5fY2FsbGJhY2tzKS5maWx0ZXIobWVzc2FnZSA9PiByZWdleHAudGVzdChtZXNzYWdlKSk7XG5cbiAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4ge1xuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IGFueSBmdW5jdGlvbnMgZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGFueSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvclxuICAgKiB0aGlzIG9iamVjdC5cbiAgICovXG4gIHN0b3BMaXN0ZW5pbmdUb0FsbCgpIHtcbiAgICBjb25zdCBtZXNzYWdlcyA9IE9iamVjdC5rZXlzKHRoaXMuX2NhbGxiYWNrcyk7XG5cbiAgICBmb3IgKGxldCBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+IC0xOyBpLS0pIHtcbiAgICAgIHRoaXMuc3RvcExpc3RlbmluZyhtZXNzYWdlc1tpXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBtZXNzYWdlLCBjYXVzaW5nIGxpc3RlbmVyIGZ1bmN0aW9ucyBmb3IgdGhlIG1lc3NhZ2Ugb24gdGhpcyBvYmplY3RcbiAgICogdG8gYmUgZXhlY3V0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZW1pdC5cbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIE9wdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gbGlzdGVuZXIgY2FsbGJhY2tzLlxuICAgKi9cbiAgZW1pdChtZXNzYWdlLCB2YWx1ZSkge1xuICAgIGlmICh0aGlzLl9jYWxsYmFja3NbbWVzc2FnZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1lc3NhZ2UgPSB0aGlzLl9jcmVhdGVMb2NhbE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgY29uc3QgZXZlbnQgPSB0aGlzLl9jcmVhdGVFdmVudChtZXNzYWdlLCB2YWx1ZSk7XG4gICAgdGhpcy5fZGlzcGF0Y2hlci5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgZnVuY3Rpb24gd2hlbiBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZm9yIHRoZSBnbG9iYWwgTWVzc2VuZ2VyIGluc3RhbmNlLlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gbGlzdGVuIGZvci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuXG4gICAqL1xuICBzdGF0aWMgbGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2ssIG1lc3Nlbmdlcikge1xuICAgIHRoaXMuR2xvYmFsTWVzc2VuZ2VyLmxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrLCBtZXNzZW5nZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXZlbnQgYSBmdW5jdGlvbiBmcm9tIGJlaW5nIGV4ZWN1dGVkIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvciB0aGVcbiAgICogZ2xvYmFsIE1lc3NlbmdlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gcmVtb3ZlLiBJZiBub25lIGlzIGRlZmluZWQsXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5HbG9iYWxNZXNzZW5nZXIuc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogRGUtcmVnaXN0ZXIgY2FsbGJhY2socykgZnJvbSBiZWluZyBleGVjdXRlZCBvbiB0aGUgZ2xvYmFsIG1lc3NlbmdlcnIgaW5zdGFuY2VcbiAgICogd2hlbiBtZXNzYWdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uIGFyZSByZWNlaXZlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWdleHB9IHJlZ2V4cCAtIHJlZ2V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gZmlsdGVyIG1lc3NhZ2VzIHdpdGguXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAgICovXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gT2JqZWN0LmtleXModGhpcy5HbG9iYWxNZXNzZW5nZXIuX2NhbGxiYWNrcykuZmlsdGVyKFxuICAgICAgbWVzc2FnZSA9PiByZWdleHAudGVzdChtZXNzYWdlKVxuICAgICk7XG5cbiAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4ge1xuICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50IGFueSBmdW5jdGlvbnMgZnJvbSBiZWluZyBleGVjdXRlZCB3aGVuIGFueSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZvclxuICAgKiB0aGUgZ2xvYmFsIE1lc3NlbmdlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHN0b3BMaXN0ZW5pbmdUb0FsbCgpIHtcbiAgICB0aGlzLkdsb2JhbE1lc3Nlbmdlci5zdG9wTGlzdGVuaW5nVG9BbGwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgbWVzc2FnZSwgY2F1c2luZyBsaXN0ZW5lciBmdW5jdGlvbnMgZm9yIHRoZSBtZXNzYWdlIG9uIHRoZSBnbG9iYWwgTWVzc2VuZ2VyXG4gICAqIGluc3RhbmNlIHRvIGJlIGV4ZWN1dGVkLlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZW1pdC5cbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIE9wdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gbGlzdGVuZXIgY2FsbGJhY2tzLlxuICAgKi9cbiAgc3RhdGljIGVtaXQobWVzc2FnZSwgdmFsdWUpIHtcbiAgICB0aGlzLkdsb2JhbE1lc3Nlbmdlci5lbWl0KG1lc3NhZ2UsIHZhbHVlKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNzZW5nZXIsIHtcbiAgR2xvYmFsTWVzc2VuZ2VyOiB7XG4gICAgdmFsdWU6IG5ldyBNZXNzZW5nZXIoKSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG4gIEVWRU5UUzoge1xuICAgIHZhbHVlOiB7fSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgTWVzc2VuZ2VyO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQ29yZU1lc3NlbmdlciBmcm9tICdjb3JlL01lc3Nlbmdlcic7XHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgY29yZS9NZXNzZW5nZXJcclxuICogQGFsaWFzIHRocmVlLmpzL01lc3NlbmdlclxyXG4gKi9cclxuY2xhc3MgTWVzc2VuZ2VyIGV4dGVuZHMgQ29yZU1lc3NlbmdlciB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueT19IGlkIC0gSWQgZm9yIHRoZSBvYmplY3QuIElmIG5vbmUgaXMgcHJvdmlkZWQgYSBuZXcgaWQgd2lsbFxyXG4gICAqIGJlIGNyZWF0ZWQuIElkIHNob3VsZCBiZSBhYmxlIHRvIGJlIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGlkKSB7XHJcbiAgICBzdXBlcihpZCk7XHJcbiAgICB0aGlzLl9kaXNwYXRjaGVyID0gdGhpcztcclxuICB9XHJcblxyXG4gIF9jcmVhdGVFdmVudChtZXNzYWdlLCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHtkZXRhaWw6IHZhbHVlLCB0eXBlOiBtZXNzYWdlfTtcclxuICB9XHJcbn1cclxuXHJcbi8vIEFzc2lnbiBUaHJlZS5qcyBFdmVudERpc3BhdGNoZXIgZnVuY3Rpb25hbGl0eSB0byB0aGUgTWVzc2VuZ2VyIGNsYXNzXHJcbk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFRIUkVFLkV2ZW50RGlzcGF0Y2hlci5wcm90b3R5cGUpXHJcbiAgLmZpbHRlcihwcm9wID0+IHByb3AgIT09ICdjb25zdHJ1Y3RvcicpXHJcbiAgLmZvckVhY2gocHJvcCA9PiB7XHJcbiAgICBNZXNzZW5nZXIucHJvdG90eXBlW3Byb3BdID0gVEhSRUUuRXZlbnREaXNwYXRjaGVyLnByb3RvdHlwZVtwcm9wXTtcclxuICB9KTtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNZXNzZW5nZXIsICdHbG9iYWxNZXNzZW5nZXInLCB7XHJcbiAgdmFsdWU6IG5ldyBNZXNzZW5nZXIoKSxcclxuICB3cml0YWJsZTogZmFsc2UsXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVzc2VuZ2VyO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBNZXNzZW5nZXIgZnJvbSAnYXBwL01lc3Nlbmdlcic7XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBmb3IgYWxsIGhvc3QgZmVhdHVyZXMuIEtlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSBob3N0IG9iamVjdCBtYW5hZ2luZ1xyXG4gKiB0aGUgZmVhdHVyZS5cclxuICpcclxuICogQGFic3RyYWN0XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVFMgLSBCdWlsdC1pbiBtZXNzYWdlcyB0aGF0IHRoZSBmZWF0dXJlIGVtaXRzLiBXaGVuIHRoZVxyXG4gKiBmZWF0dXJlIGlzIGFkZGVkIHRvIGEge0BsaW5rIGNvcmUvSG9zdE9iamVjdH0sIGV2ZW50IG5hbWVzIHdpbGwgYmUgcHJlZml4ZWQgYnkgdGhlXHJcbiAqIG5hbWUgb2YgdGhlIGZlYXR1cmUgY2xhc3MgKyAnLicuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnVwZGF0ZT1vblVwZGF0ZV0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3VwZGF0ZV17QGxpbmsgQWJzdHJhY3RIb3N0RmVhdHVyZSN1cGRhdGV9LlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gU0VSVklDRVMgLSBBbnkgQVdTIHNlcnZpY2VzIHRoYXQgYXJlIG5lY2Vzc2FyeSBmb3IgdGhlXHJcbiAqIGZlYXR1cmUgdG8gZnVuY3Rpb24uXHJcbiAqL1xyXG5jbGFzcyBBYnN0cmFjdEhvc3RGZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gVGhlIEhvc3RPYmplY3QgbWFuYWdpbmcgdGhlIGZlYXR1cmUuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoaG9zdCkge1xyXG4gICAgdGhpcy5faG9zdCA9IGhvc3Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgbmFtZXNwYWNlIHRvIHRoZSBob3N0IHdpdGggdGhlIG5hbWUgb2YgdGhlIGZlYXR1cmUgdG8gY29udGFpbiBwcm9wZXJ0aWVzXHJcbiAgICogYW5kIG1ldGhvZHMgZnJvbSB0aGUgZmVhdHVyZSB0aGF0IHVzZXJzIG9mIHRoZSBob3N0IG5lZWQgYWNjZXNzIHRvLlxyXG4gICAqL1xyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICBjb25zdCBldmVudHMgPSB7fTtcclxuICAgIGNvbnN0IGFwaSA9IHtFVkVOVFM6IGV2ZW50c307XHJcblxyXG4gICAgLy8gQWRkIHRoZSBjbGFzcyBuYW1lIHRvIGV2ZW50IG5hbWVzXHJcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUykuZm9yRWFjaCgoW25hbWUsIHZhbHVlXSkgPT4ge1xyXG4gICAgICBldmVudHNbbmFtZV0gPSBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9LiR7dmFsdWV9YDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX2hvc3RbdGhpcy5jb25zdHJ1Y3Rvci5uYW1lXSA9IGFwaTtcclxuXHJcbiAgICByZXR1cm4gYXBpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgaG9zdCB0aGF0IG1hbmFnZXMgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKi9cclxuICBnZXQgaG9zdCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3N0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZW5naW5lIG93bmVyIG9iamVjdCBvZiB0aGUgaG9zdC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqL1xyXG4gIGdldCBvd25lcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9ob3N0Lm93bmVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIHRvIGEgZmVhdHVyZSBtZXNzYWdlIGZyb20gdGhlIGhvc3Qgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxpc3RlbiBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHRoZSBtZXNzYWdlIGlzIHJlY2VpdmVkLlxyXG4gICAqL1xyXG4gIGxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XHJcbiAgICB0aGlzLl9ob3N0Lmxpc3RlblRvKG1lc3NhZ2UsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBhIGZlYXR1cmUgbWVzc2FnZSBmcm9tIHRoZSBnbG9iYWwgbWVzc2VuZ2VyLiBGZWF0dXJlIG1lc3NhZ2VzIHdpbGxcclxuICAgKiBiZSBwcmVmaXhlZCB3aXRoIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBmZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIGxpc3RlbiBmb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHRoZSBtZXNzYWdlIGlzIHJlY2VpdmVkLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBsaXN0ZW5UbyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgbWVzc2FnZSA9IGAke3RoaXMubmFtZX0uJHttZXNzYWdlfWA7XHJcbiAgICBNZXNzZW5nZXIubGlzdGVuVG8obWVzc2FnZSwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYSBtZXNzYWdlIGZyb20gdGhlIGhvc3Qgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgc3RvcExpc3RlbmluZyhtZXNzYWdlLCBjYWxsYmFjaykge1xyXG4gICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nKG1lc3NhZ2UsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGEgbWVzc2FnZSBmcm9tIHRoZSBnbG9iYWwgbWVzc2VuZ2VyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgc3RhdGljIHN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spIHtcclxuICAgIG1lc3NhZ2UgPSBgJHt0aGlzLm5hbWV9LiR7bWVzc2FnZX1gO1xyXG4gICAgTWVzc2VuZ2VyLnN0b3BMaXN0ZW5pbmcobWVzc2FnZSwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYSBtZXNzYWdlIG1hdGNoaW5nIHRoZSBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGVcclxuICAgKiBob3N0IG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UmVnZXhwfSByZWdleHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIHN0b3AgbGlzdGVuaW5nIGZvci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byByZW1vdmUuIElmIG5vbmUgaXMgZGVmaW5lZCxcclxuICAgKiByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgdGhlIG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spIHtcclxuICAgIHRoaXMuX2hvc3Quc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCBsaXN0ZW5pbmcgdG8gYSBtZXNzYWdlIG1hdGNoaW5nIHRoZSBnaXZlbiByZWd1bGFyIGV4cHJlc3Npb24gZnJvbSB0aGVcclxuICAgKiBnbG9iYWwgbWVzc2VuZ2VyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSZWdleHB9IHJlZ2V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc3RvcCBsaXN0ZW5pbmcgZm9yLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHJlbW92ZS4gSWYgbm9uZSBpcyBkZWZpbmVkLFxyXG4gICAqIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGZvciB0aGUgbWVzc2FnZS5cclxuICAgKi9cclxuICBzdGF0aWMgc3RvcExpc3RlbmluZ0J5UmVnZXhwKHJlZ2V4cCwgY2FsbGJhY2spIHtcclxuICAgIHJlZ2V4cCA9IG5ldyBSZWdFeHAoYF4ke3RoaXMubmFtZX0uJHtyZWdleHAuc291cmNlLnJlcGxhY2UoL1xcXi8sICcnKX1gKTtcclxuICAgIE1lc3Nlbmdlci5zdG9wTGlzdGVuaW5nQnlSZWdleHAocmVnZXhwLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBhbGwgbWVzc2FnZXMuXHJcbiAgICovXHJcbiAgc3RvcExpc3RlbmluZ1RvQWxsKCkge1xyXG4gICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nVG9BbGwoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIGFsbCBmZWF0dXJlIG1lc3NhZ2VzLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBzdG9wTGlzdGVuaW5nVG9BbGwoKSB7XHJcbiAgICBNZXNzZW5nZXIuc3RvcExpc3RlbmluZ0J5UmVnZXhwKG5ldyBSZWdFeHAoYF4ke3RoaXMubmFtZX0uYCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdCBmZWF0dXJlIG1lc3NhZ2VzIGZyb20gdGhlIGhvc3QuIEZlYXR1cmUgbWVzc2FnZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoXHJcbiAgICogdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGVtaXQuXHJcbiAgICogQHBhcmFtIHthbnk9fSB2YWx1ZSAtIE9wdGlvbmFsIHBhcmFtZXRlciB0byBwYXNzIHRvIGxpc3RlbmVyIGNhbGxiYWNrcy5cclxuICAgKi9cclxuICBlbWl0KG1lc3NhZ2UsIHZhbHVlKSB7XHJcbiAgICBtZXNzYWdlID0gYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfS4ke21lc3NhZ2V9YDtcclxuICAgIHRoaXMuX2hvc3QuZW1pdChtZXNzYWdlLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0IGZlYXR1cmUgbWVzc2FnZXMgZnJvbSB0aGUgZ2xvYmFsIG1lc3Nlbmdlci4gRmVhdHVyZSBtZXNzYWdlcyB3aWxsIGJlIHByZWZpeGVkXHJcbiAgICogd2l0aCB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgZmVhdHVyZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZW1pdC5cclxuICAgKiBAcGFyYW0ge2FueT19IHZhbHVlIC0gT3B0aW9uYWwgcGFyYW1ldGVyIHRvIHBhc3MgdG8gbGlzdGVuZXIgY2FsbGJhY2tzLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBlbWl0KG1lc3NhZ2UsIHZhbHVlKSB7XHJcbiAgICBtZXNzYWdlID0gYCR7dGhpcy5uYW1lfS4ke21lc3NhZ2V9YDtcclxuICAgIE1lc3Nlbmdlci5lbWl0KG1lc3NhZ2UsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4ZWN1dGVzIGVhY2ggdGltZSB0aGUgaG9zdCBpcyB1cGRhdGVkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIEFtb3VudCBvZiB0aW1lIHNpbmNlIHRoZSBsYXN0IGhvc3QgdXBkYXRlIHdhc1xyXG4gICAqIGNhbGxlZC5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMudXBkYXRlLCBkZWx0YVRpbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYW4gdXAgb25jZSB0aGUgZmVhdHVyZSBpcyBubyBsb25nZXIgaW4gdXNlLiBSZW1vdmUgdGhlIGZlYXR1cmUgbmFtZXNwYWNlXHJcbiAgICogZnJvbSB0aGUgaG9zdCBhbmQgcmVtb3ZlIHJlZmVyZW5jZSB0byB0aGUgaG9zdC5cclxuICAgKi9cclxuICBkaXNjYXJkKCkge1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5faG9zdFt0aGlzLmNvbnN0cnVjdG9yLm5hbWVdKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICBkZWxldGUgdGhpcy5faG9zdFt0aGlzLmNvbnN0cnVjdG9yLm5hbWVdW25hbWVdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZGVsZXRlIHRoaXMuX2hvc3RbdGhpcy5jb25zdHJ1Y3Rvci5uYW1lXTtcclxuICAgIGRlbGV0ZSB0aGlzLl9ob3N0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbGllcyBhIHNlcXVlbmNlIG9mIG1peGluIGNsYXNzIGZhY3RvcnkgZnVuY3Rpb25zIHRvIHRoaXMgY2xhc3MgYW5kXHJcbiAgICogcmV0dXJucyB0aGUgcmVzdWx0LiBFYWNoIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIHJldHVybiBhIGNsYXNzIHRoYXRcclxuICAgKiBleHRlbmRzIHRoZSBjbGFzcyBpdCB3YXMgZ2l2ZW4uIFRoZSBmdW5jdGlvbnMgYXJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyXHJcbiAgICogdGhhdCBwYXJhbWV0ZXJzIGFyZSBnaXZlbiwgbWVhbmluZyB0aGF0IHRoZSBmaXJzdCBmYWN0b3J5IHdpbGxcclxuICAgKiBleHRlbmQgdGhpcyBiYXNlIGNsYXNzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gbWl4aW5DbGFzc0ZhY3RvcmllcyBDbGFzcyBmYWN0b3J5IGZ1bmN0aW9ucyB0aGF0IHdpbGxcclxuICAgKiBiZSBhcHBsaWVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0NsYXNzfSBBIGNsYXNzIHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgZmFjdG9yeSBmdW5jdGlvbnMuXHJcbiAgICogVGhlIHJlc3VsdGluZyBjbGFzcyB3aWxsIGFsd2F5cyBpbmhlcml0IGZyb20gQWJzdHJhY3RIb3N0RmVhdHVyZS5cclxuICAgKi9cclxuICBzdGF0aWMgbWl4KC4uLm1peGluQ2xhc3NGYWN0b3JpZXMpIHtcclxuICAgIGxldCBSZXN1bHRDbGFzcyA9IHRoaXM7XHJcblxyXG4gICAgbWl4aW5DbGFzc0ZhY3Rvcmllcy5mb3JFYWNoKG1peGluQ2xhc3NGYWN0b3J5ID0+IHtcclxuICAgICAgUmVzdWx0Q2xhc3MgPSBtaXhpbkNsYXNzRmFjdG9yeShSZXN1bHRDbGFzcyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gUmVzdWx0Q2xhc3M7XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYnN0cmFjdEhvc3RGZWF0dXJlLCB7XHJcbiAgRVZFTlRTOiB7XHJcbiAgICB2YWx1ZToge1xyXG4gICAgICB1cGRhdGU6ICdvblVwZGF0ZScsXHJcbiAgICB9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgU0VSVklDRVM6IHtcclxuICAgIHZhbHVlOiB7fSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0SG9zdEZlYXR1cmU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IE1lc3NlbmdlciBmcm9tICdhcHAvTWVzc2VuZ2VyJztcclxuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcclxuaW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIE9iamVjdCB0aGF0IG1hbmFnZXMgYWNjZXNzIHRvIGFsbCBIb3N0IGZlYXR1cmVzLiBDb250YWlucyBhIHJlZmVyZW5jZSB0b1xyXG4gKiBlbmdpbmUtc3BlY2lmaWMgdmlzdWFscyBpZiBhcHBsaWNhYmxlLlxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBjb3JlL01lc3NlbmdlclxyXG4gKiBAYWxpYXMgY29yZS9Ib3N0T2JqZWN0XHJcbiAqXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVFMgLSBCdWlsdC1pbiBtZXNzYWdlcyB0aGF0IHRoZSBNZXNzZW5nZXIgZW1pdHMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnVwZGF0ZT0nb25VcGRhdGUnXSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbdXBkYXRlXXtAbGluayBjb3JlL0hvc3RPYmplY3QjdXBkYXRlfS5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuYWRkRmVhdHVyZT0nb25BZGRGZWF0dXJlJ10gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBhZnRlciBlYWNoIGNhbGwgdG8gW2FkZEZlYXR1cmVde0BsaW5rIGNvcmUvSG9zdE9iamVjdCNhZGRGZWF0dXJlfS5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVtb3ZlRmVhdHVyZT0nb25SZW1vdmVGZWF0dXJlJ10gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBhZnRlciBlYWNoIGNhbGwgdG8gW3JlbW92ZUZlYXR1cmVde0BsaW5rIGNvcmUvSG9zdE9iamVjdCNyZW1vdmVGZWF0dXJlfS5cclxuICovXHJcbmNsYXNzIEhvc3RPYmplY3QgZXh0ZW5kcyBNZXNzZW5nZXIge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGhvc3QuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zLm93bmVyIC0gT3B0aW9uYWwgZW5naW5lLXNwZWNpZmljIG93bmVyIG9mIHRoZSBob3N0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHtvd25lciA9IHt9fSA9IHt9KSB7XHJcbiAgICAvLyBJZiBhbiBvd25lciBpcyBzcGVjaWZpZWQsIHVzZSBpdHMgaWQgZm9yIG1lc3NhZ2luZ1xyXG4gICAgc3VwZXIob3duZXIuaWQpO1xyXG5cclxuICAgIHRoaXMuX293bmVyID0gb3duZXI7XHJcbiAgICB0aGlzLl9mZWF0dXJlcyA9IHt9O1xyXG4gICAgdGhpcy5fd2FpdHMgPSBbXTtcclxuICAgIHRoaXMuX2xhc3RVcGRhdGUgPSB0aGlzLm5vdztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGVuZ2luZSBvd25lciBvYmplY3Qgb2YgdGhlIGhvc3QuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAqL1xyXG4gIGdldCBvd25lcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9vd25lcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdGltZSBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBub3coKSB7XHJcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGFtb3VudCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB1cGRhdGUgd2FzIGxhc3QgY2FsbGVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgZGVsdGFUaW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubm93IC0gdGhpcy5fbGFzdFVwZGF0ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBpbiB0aGUgZW5naW5lJ3MgcmVuZGVyIGxvb3AuIEV4ZWN1dGVzIHVwZGF0ZVxyXG4gICAqIGxvb3BzIGZvciBhbGwgZmVhdHVyZXMuXHJcbiAgICovXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLm5vdztcclxuICAgIGNvbnN0IGR0ID0gdGhpcy5kZWx0YVRpbWU7XHJcblxyXG4gICAgLy8gUHJvZ3Jlc3Mgc3RvcmVkIHdhaXRzXHJcbiAgICB0aGlzLl93YWl0cy5mb3JFYWNoKHdhaXQgPT4ge1xyXG4gICAgICB3YWl0LmV4ZWN1dGUoZHQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGFsbCBmZWF0dXJlc1xyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9mZWF0dXJlcykuZm9yRWFjaChmZWF0dXJlID0+IHtcclxuICAgICAgZmVhdHVyZS51cGRhdGUoZHQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IGxpc3RlbmVycyBhbiB1cGRhdGUgb2NjdXJlZFxyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnVwZGF0ZSwgZHQpO1xyXG5cclxuICAgIHRoaXMuX2xhc3RVcGRhdGUgPSBjdXJyZW50VGltZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGRlZmVycmVkIHByb21pc2UgdGhhdCB3aWxsIHdhaXQgYSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmVcclxuICAgKiByZXNvbHZpbmcuIFRoZSBob3N0IHdpbGwgY29udGludW91c2x5IHVwZGF0ZSB0aGUgd2FpdCBwcm9taXNlIGR1cmluZyB0aGVcclxuICAgKiB1cGRhdGUgbG9vcCB1bnRpbCBpdCByZXNvbHZlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIE51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHJlc29sdmluZy5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIG9iamVjdFxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLm9uRmluaXNoXSAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSB0aGUgd2FpdCB0aW1lXHJcbiAgICogaXMgbWV0LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uUHJvZ3Jlc3MgLSBDYWxsYmFjayB0byBleGVjdXRlIGVhY2ggdGltZSB0aGUgd2FpdFxyXG4gICAqIHRpbWUgcHJvZ3Jlc3NlcyB0b3dhcmRzIHRoZSB0YXJnZXQgbnVtYmVyIG9mIHNlY29uZHMuIFRoZSBhbW91bnQgb2YgcHJvZ3Jlc3NcclxuICAgKiBhcyBhIDAtMSBwZXJjZW50YWdlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkNhbmNlbCAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIHVzZXIgY2FuY2Vsc1xyXG4gICAqIHRoZSB3YWl0IGJlZm9yZSBjb21wbGV0aW9uLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uRXJyb3IgLSBDYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB3YWl0IHN0b3BzXHJcbiAgICogYmVjYXVzZSBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4gVGhlIGVycm9yIG1lc3NhZ2UgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHdhaXQoc2Vjb25kcywge29uRmluaXNoLCBvblByb2dyZXNzLCBvbkNhbmNlbCwgb25FcnJvcn0gPSB7fSkge1xyXG4gICAgY29uc3Qgd2FpdCA9IFV0aWxzLndhaXQoc2Vjb25kcywge29uRmluaXNoLCBvblByb2dyZXNzLCBvbkNhbmNlbCwgb25FcnJvcn0pO1xyXG4gICAgdGhpcy5fd2FpdHMucHVzaCh3YWl0KTtcclxuXHJcbiAgICAvLyBPbmNlIHRoZSB3YWl0IHByb21pc2UgaXMgbm8gbG9uZ2VyIHBlbmRpbmcgcmVtb3ZlIGl0IGZyb20gdGhlIHdhaXRzIGFycmF5XHJcbiAgICBjb25zdCBvbkNvbXBsZXRlID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLl93YWl0cy5zcGxpY2UodGhpcy5fd2FpdHMuaW5kZXhPZih3YWl0KSwgMSk7XHJcbiAgICB9O1xyXG4gICAgd2FpdC50aGVuKG9uQ29tcGxldGUsIG9uQ29tcGxldGUpO1xyXG5cclxuICAgIHJldHVybiB3YWl0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5zdGFudGlhdGUgYSBuZXcgSG9zdCBmZWF0dXJlIGFuZCBzdG9yZSBpdC4gRmVhdHVyZXMgbXVzdCBpbmhlcml0IGZyb21cclxuICAgKiBBYnN0cmFjdEhvc3RGZWF0dXJlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDbGFzc30gRmVhdHVyZUNsYXNzIC0gQ2xhc3MgdGhhdCB3aWxsIGluc3RhbnRpYXRlIHRoZSBmZWF0dXJlLiBNdXN0XHJcbiAgICogZXh0ZW5kIHtAbGluayBBYnN0cmFjdEhvc3RGZWF0dXJlfS5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmdcclxuICAgKiBmZWF0dXJlIGlmIG9uZSBvZiB0aGlzIHR5cGUgYWxyZWFkeSBleGlzdHMgb24gdGhlIG9iamVjdC5cclxuICAgKiBAcGFyYW0gIHsuLi5hbnl9IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBGZWF0dXJlQ2xhc3NcclxuICAgKiBjb25zdHJ1Y3Rvci4gVGhlIEhvc3RPYmplY3Qgd2lsbCBhbHdheXMgYmUgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IGEgZmVhdHVyZSB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLlxyXG4gICAqL1xyXG4gIGFkZEZlYXR1cmUoRmVhdHVyZUNsYXNzLCBmb3JjZSA9IGZhbHNlLCAuLi5hcmdzKSB7XHJcbiAgICBjb25zdCBpbnB1dFR5cGUgPSB0eXBlb2YgRmVhdHVyZUNsYXNzO1xyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgRmVhdHVyZUNsYXNzIGNhbiBiZSBleGVjdXRlZFxyXG4gICAgaWYgKGlucHV0VHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBhZGQgZmVhdHVyZSB0byBob3N0ICR7dGhpcy5pZH0uIEZlYXR1cmVDbGFzcyBtdXN0IGJlIGEgY2xhc3MuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBmZWF0dXJlIGlzIGEgaG9zdCBmZWF0dXJlXHJcbiAgICBlbHNlIGlmICghKEZlYXR1cmVDbGFzcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBBYnN0cmFjdEhvc3RGZWF0dXJlKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBhZGQgZmVhdHVyZSAke0ZlYXR1cmVDbGFzcy5uYW1lfSB0byBob3N0ICR7dGhpcy5pZH0uIEZlYXR1cmVDbGFzcyBtdXN0IGV4dGVuZCBBYnN0cmFjdEhvc3RGZWF0dXJlLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBpZiB0aGUgRmVhdHVyZUNsYXNzIGFscmVhZHkgZXhpc3RzIG9uIHRoaXMgb2JqZWN0XHJcbiAgICBpZiAodGhpcy5fZmVhdHVyZXNbRmVhdHVyZUNsYXNzLm5hbWVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKGZvcmNlKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEZlYXR1cmUgJHtGZWF0dXJlQ2xhc3MubmFtZX0gYWxyZWFkeSBleGlzdHMgb24gaG9zdCAke3RoaXMuaWR9LiBFeGlzdGluZyBmZWF0dXJlIHdpbGwgYmUgb3ZlcndyaXR0ZW4uYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYEZlYXR1cmUgJHtGZWF0dXJlQ2xhc3MubmFtZX0gYWxyZWFkeSBleGlzdHMgb24gaG9zdCAke3RoaXMuaWR9LiBVc2UgJ2ZvcmNlJyBhcmd1bWVudCB0byBvdmVyd3JpdGUgdGhlIGZlYXR1cmUuYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHRoZSBmZWF0dXJlXHJcbiAgICBjb25zdCBmZWF0dXJlID0gbmV3IEZlYXR1cmVDbGFzcyh0aGlzLCAuLi5hcmdzKTtcclxuICAgIGZlYXR1cmUuaW5zdGFsbEFwaSgpO1xyXG5cclxuICAgIHRoaXMuX2ZlYXR1cmVzW0ZlYXR1cmVDbGFzcy5uYW1lXSA9IGZlYXR1cmU7XHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuYWRkRmVhdHVyZSwgRmVhdHVyZUNsYXNzLm5hbWUpO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGEgZmVhdHVyZSBmcm9tIHRoZSBvYmplY3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUgLSBOYW1lIG9mIHRoZSB0eXBlIG9mIGZlYXR1cmUgdG8gcmVtb3ZlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgYSBmZWF0dXJlIHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZC5cclxuICAgKi9cclxuICByZW1vdmVGZWF0dXJlKHR5cGVOYW1lKSB7XHJcbiAgICBpZiAodGhpcy5fZmVhdHVyZXNbdHlwZU5hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBGZWF0dXJlIG9mIHR5cGUgJHt0eXBlTmFtZX0gZG9lcyBub3QgZXhpc3Qgb24gaG9zdCAke3RoaXMuaWR9LiBObyBmZWF0dXJlIHdpbGwgYmUgcmVtb3ZlZC5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFJlbW92ZSB0aGUgZmVhdHVyZVxyXG4gICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucmVtb3ZlRmVhdHVyZSwgdHlwZU5hbWUpO1xyXG4gICAgICB0aGlzLl9mZWF0dXJlc1t0eXBlTmFtZV0uZGlzY2FyZCgpO1xyXG4gICAgICBkZWxldGUgdGhpcy5fZmVhdHVyZXNbdHlwZU5hbWVdO1xyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2F0ZSB3aGV0aGVyIGEgc3BlY2lmaWVkIGZlYXR1cmUgaXMgaW5zdGFsbGVkIG9uIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVOYW1lIC0gTmFtZSBvZiB0aGUgdHlwZSBvZiBmZWF0dXJlIHRvIGxvb2sgZm9yLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgaGFzRmVhdHVyZSh0eXBlTmFtZSkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5fZmVhdHVyZXNbdHlwZU5hbWVdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdCB0aGUgbmFtZXMgb2YgdGhlIGZlYXR1cmVzIGluc3RhbGxlZCBvbiB0aGUgaG9zdC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn1cclxuICAgKi9cclxuICBsaXN0RmVhdHVyZXMoKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5fZmVhdHVyZXMpO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEhvc3RPYmplY3QsICdFVkVOVFMnLCB7XHJcbiAgdmFsdWU6IHtcclxuICAgIC4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihIb3N0T2JqZWN0KS5FVkVOVFMsXHJcbiAgICB1cGRhdGU6ICdvblVwZGF0ZScsXHJcbiAgICBhZGRGZWF0dXJlOiAnb25BZGRGZWF0dXJlJyxcclxuICAgIHJlbW92ZUZlYXR1cmU6ICdvblJlbW92ZUZlYXR1cmUnLFxyXG4gIH0sXHJcbiAgd3JpdGFibGU6IGZhbHNlLFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEhvc3RPYmplY3Q7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuXHJcbi8qKlxyXG4gKiBUaHJlZWpzIENsb2NrIG9iamVjdFxyXG4gKlxyXG4gKiBAZXh0ZXJuYWwgXCJUSFJFRS5DbG9ja1wiXHJcbiAqIEBzZWUgaHR0cHM6Ly90aHJlZWpzLm9yZy9kb2NzLyNhcGkvZW4vY29yZS9DbG9ja1xyXG4gKi9cclxuXHJcbmltcG9ydCBDb3JlSG9zdE9iamVjdCBmcm9tICdjb3JlL0hvc3RPYmplY3QnO1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyB0aHJlZS5qcy9Ib3N0T2JqZWN0XHJcbiAqIEBleHRlbmRzIGNvcmUvSG9zdE9iamVjdFxyXG4gKi9cclxuY2xhc3MgSG9zdE9iamVjdCBleHRlbmRzIENvcmVIb3N0T2JqZWN0IHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBob3N0LlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5vd25lciAtIE9wdGlvbmFsIGVuZ2luZS1zcGVjaWZpYyBvd25lciBvZiB0aGUgaG9zdC5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOlwiVEhSRUUuQ2xvY2tcIj19IG9wdGlvbnMuY2xvY2sgLSBPcHRpb25hbCBjbG9jayB0byBtYW5hZ2UgdGltZS5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuX2Nsb2NrID0gb3B0aW9ucy5jbG9jaztcclxuXHJcbiAgICBpZiAodGhpcy5fY2xvY2spIHtcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdub3cnLCB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2suZ2V0RWxhcHNlZFRpbWUoKSAqIDEwMDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLl9sYXN0VXBkYXRlID0gdGhpcy5ub3c7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBIb3N0T2JqZWN0O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbmltcG9ydCBIb3N0T2JqZWN0IGZyb20gJ2FwcC9Ib3N0T2JqZWN0JztcblxuLyoqXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgZmVhdHVyZXMgdGhhdCBhcmUgZGVwZW5kZW50IG9uIG90aGVyIGZlYXR1cmVzIGJlaW5nXG4gKiBwcmVzZW50IG9uIHRoZSBob3N0LiBFdmVudCBkZXBlbmRlbmNpZXMgd2lsbCBiZSBsaXN0ZW5lZCBmb3Igd2hlbiBhIGZlYXR1cmUgb2ZcbiAqIG1hdGNoaW5nIHR5cGUgaXMgYWRkZWQgdG8gdGhlIGhvc3QgYW5kIHdpbGwgc3RvcCBiZWluZyBsaXN0ZW5lZCBmb3Igd2hlbiBvbmVcbiAqIGlzIHJlbW92ZWQuIElmIHRoZSBmZWF0dXJlIGlzIGFscmVhZHkgcHJlc2VudCB3aGVuIGNvbnN0cnVjdGVkLCBldmVudHMgd2lsbFxuICogYmUgbGlzdGVuZWQgZm9yIHJpZ2h0IGF3YXkuXG4gKlxuICogQGludGVyZmFjZVxuICpcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMgLSBFdmVudHMgdGhhdCB0aGUgZmVhdHVyZSBzaG91bGQgc3RhcnQvc3RvcFxuICogbGlzdGVuaW5nIGZvciB3aGVuIGEgZmVhdHVyZSBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdC5cbiAqIEV2ZW50IGRlcGVuZGVuY2llcyBzaG91bGQgZm9sbG93IHRoZSBzaWduYXR1cmU6XG4gKiAgeyBGZWF0dXJlTmFtZTogeyBldmVudE5hbWU6IGNhbGxiYWNrTmFtZSwgLi4uIH0sIC4uLiB9XG4gKi9cbmNsYXNzIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2Uge1xuICAvKipcbiAgICogU3RhcnQgbGlzdGVuaW5nIGZvciBldmVudCBkZXBlbmRlbmNpZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gZmVhdHVyZSB0eXBlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWUgLSB0eXBlIG9mIGZlYXR1cmUgdG8gbGlzdGVuIGZvci5cbiAgICovXG4gIF9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSkge31cblxuICAvKipcbiAgICogU3RvcCBsaXN0ZW5pbmcgZm9yIGV2ZW50IGRlcGVuZGVuY2llcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBmZWF0dXJlIHR5cGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZSAtIHR5cGUgb2YgZmVhdHVyZSB0byBzdG9wIGxpc3RlbmluZyBmb3IuXG4gICAqL1xuICBfb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSkge31cblxuICAvKipcbiAgICogQGF1Z21lbnRzIHtAbGluayBBYnN0cmFjdEhvc3RGZWF0dXJlI2Rpc2NhcmR9XG4gICAqL1xuICBkaXNjYXJkKCkge31cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZX0gYW5kIGV4dGVuZHNcbiAgICogYSBzcGVjaWZpZWQgYmFzZSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtDbGFzc30gQmFzZUNsYXNzIC0gVGhlIGNsYXNzIHRvIGV4dGVuZC5cbiAgICpcbiAgICogQHJldHVybiB7Q2xhc3N9IEEgY2xhc3MgdGhhdCBleHRlbmRzIGBCYXNlQ2xhc3NgIGFuZCBpbXBsZW1lbnRzIHtAbGluayBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlfS5cbiAgICovXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MpIHtcbiAgICBjb25zdCBGZWF0dXJlRGVwZW5kZW50TWl4aW4gPSBjbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7XG4gICAgICBjb25zdHJ1Y3Rvcihob3N0KSB7XG4gICAgICAgIHN1cGVyKGhvc3QpO1xuICAgICAgICB0aGlzLl9ob3N0ID0gaG9zdDtcblxuICAgICAgICAvLyBObyBuZWVkIHRvIGxpc3RlbiBmb3IgZXZlbnRzIGlmIHRoZSBtaXhpbiBpcyBpbiB0aGUgcHJvdG90eXBlIGNoYWluIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgICAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIGZlYXR1cmUgZXZlbnRzXG4gICAgICAgICAgdGhpcy5fb25GZWF0dXJlQWRkZWQgPSB0aGlzLl9vbkZlYXR1cmVBZGRlZC5iaW5kKHRoaXMpO1xuICAgICAgICAgIHRoaXMuX29uRmVhdHVyZVJlbW92ZWQgPSB0aGlzLl9vbkZlYXR1cmVSZW1vdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgICB0aGlzLl9ob3N0Lmxpc3RlblRvKFxuICAgICAgICAgICAgSG9zdE9iamVjdC5FVkVOVFMuYWRkRmVhdHVyZSxcbiAgICAgICAgICAgIHRoaXMuX29uRmVhdHVyZUFkZGVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLl9ob3N0Lmxpc3RlblRvKFxuICAgICAgICAgICAgSG9zdE9iamVjdC5FVkVOVFMucmVtb3ZlRmVhdHVyZSxcbiAgICAgICAgICAgIHRoaXMuX29uRmVhdHVyZVJlbW92ZWRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gUmVnaXN0ZXIgZmVhdHVyZXMgdGhhdCBhbHJlYWR5IGV4aXN0XG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVMpLmZvckVhY2godHlwZU5hbWUgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2hvc3RbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSkge1xuICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9ERVBFTkRFTkNJRVNbdHlwZU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0RFUEVOREVOQ0lFU1t0eXBlTmFtZV07XG5cbiAgICAgICAgICBPYmplY3QuZW50cmllcyhldmVudHMpLmZvckVhY2goKFtldmVudE5hbWUsIGNhbGxiYWNrXSkgPT4ge1xuICAgICAgICAgICAgdGhpc1tjYWxsYmFja10gPSB0aGlzW2NhbGxiYWNrXS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5faG9zdC5saXN0ZW5UbyhcbiAgICAgICAgICAgICAgdGhpcy5faG9zdFt0eXBlTmFtZV0uRVZFTlRTW2V2ZW50TmFtZV0sXG4gICAgICAgICAgICAgIHRoaXNbY2FsbGJhY2tdXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9vbkZlYXR1cmVSZW1vdmVkKHR5cGVOYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0RFUEVOREVOQ0lFU1t0eXBlTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTW3R5cGVOYW1lXTtcblxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV2ZW50cykuZm9yRWFjaCgoW2V2ZW50TmFtZSwgY2FsbGJhY2tdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9ob3N0LnN0b3BMaXN0ZW5pbmcoXG4gICAgICAgICAgICAgIHRoaXMuX2hvc3RbdHlwZU5hbWVdLkVWRU5UU1tldmVudE5hbWVdLFxuICAgICAgICAgICAgICB0aGlzW2NhbGxiYWNrXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkaXNjYXJkKCkge1xuICAgICAgICAvLyBTdG9wIGxpc3RlbmluZyBmb3IgZmVhdHVyZSBldmVudHNcbiAgICAgICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nKFxuICAgICAgICAgIEhvc3RPYmplY3QuRVZFTlRTLmFkZEZlYXR1cmUsXG4gICAgICAgICAgdGhpcy5fb25GZWF0dXJlQWRkZWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5faG9zdC5zdG9wTGlzdGVuaW5nKFxuICAgICAgICAgIEhvc3RPYmplY3QuRVZFTlRTLnJlbW92ZUZlYXR1cmUsXG4gICAgICAgICAgdGhpcy5fb25GZWF0dXJlUmVtb3ZlZFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFN0b3AgbGlzdGVuaW5nIHRvIGZlYXR1cmUtc3BlY2lmaWMgZXZlbnRzXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY29uc3RydWN0b3IuRVZFTlRfREVQRU5ERU5DSUVTKS5mb3JFYWNoKHR5cGVOYW1lID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5faG9zdFt0eXBlTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fb25GZWF0dXJlUmVtb3ZlZCh0eXBlTmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBzdXBlci5kaXNjYXJkKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IEVWRU5UX0RFUEVOREVOQ0lFUyA9IEJhc2VDbGFzcy5FVkVOVF9ERVBFTkRFTkNJRVMgfHwge307XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhGZWF0dXJlRGVwZW5kZW50TWl4aW4sIHtcbiAgICAgIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIC4uLkVWRU5UX0RFUEVOREVOQ0lFUyxcbiAgICAgICAgfSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBGZWF0dXJlRGVwZW5kZW50TWl4aW47XG4gIH1cbn1cblxuLyoqXG4gKiBFdmVudCBkZXBlbmRlbmNpZXMgc2hvdWxkIGZvbGxvdyB0aGUgc2lnbmF0dXJlOlxuICoge1xuICogIEZlYXR1cmVOYW1lOiB7XG4gKiAgICAvLyBFdmVudHMgdGhhdCB0aGUgZmVhdHVyZSBzaG91bGQgc3RhcnQvc3RvcCBsaXN0ZW5pbmcgZm9yIHdoZW4gYSBmZWF0dXJlXG4gKiAgICAvLyBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdFxuICogICAge1xuICogICAgICBldmVudE5hbWU6IGNhbGxiYWNrTmFtZSxcbiAqICAgICAgLi4uXG4gKiAgICB9LFxuICogIH1cbiAqIH1cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSwge1xuICBFVkVOVF9ERVBFTkRFTkNJRVM6IHtcbiAgICB2YWx1ZToge30sXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2U7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbmltcG9ydCBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJ2NvcmUvRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSc7XG5cbi8qKlxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIGZlYXR1cmVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGUgQW5pbWF0aW9uRmVhdHVyZVxuICogYmVpbmcgcHJlc2VudCBvbiB0aGUgaG9zdC4gTGF5ZXIgYW5kIGFuaW1hdGlvbiBldmVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlXG4gKiBsaXN0ZW5lZCBmb3Igb25jZSBhIEFuaW1hdGlvbkZlYXR1cmUgaXMgYWRkZWQgdG8gdGhlIGhvc3QgYW5kIHN0b3BwZWQgb25jZSBpdFxuICogaXMgcmVtb3ZlZC5cbiAqXG4gKiBAaW50ZXJmYWNlXG4gKiBAZXh0ZW5kcyBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlXG4gKlxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UX0RFUEVOREVOQ0lFUyAtIEV2ZW50cyB0aGF0IHRoZSBmZWF0dXJlIHNob3VsZCBzdGFydC9zdG9wXG4gKiBsaXN0ZW5pbmcgZm9yIHdoZW4gYSBmZWF0dXJlIG9mIHR5cGUgRmVhdHVyZU5hbWUgaXMgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBob3N0LlxuICogQHByb3BlcnR5IHtPYmplY3R9IEVWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlIC0gRXZlbnRzIHRoYXQgYXJlXG4gKiBzcGVjaWZpYyB0byB0aGUgQW5pbWF0aW9uRmVhdHVyZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUuYWRkTGF5ZXI9J19vbkxheWVyQWRkZWQnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgYWRkTGF5ZXJcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUucmVtb3ZlTGF5ZXI9J19vbkxheWVyUmVtb3ZlZCddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW1vdmVMYXllclxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuQW5pbWF0aW9uRmVhdHVyZS5yZW5hbWVMYXllcj0nX29uTGF5ZXJSZW5hbWVkJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIHJlbmFtZUxheWVyXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLmFkZEFuaW1hdGlvbj0nX29uQW5pbWF0aW9uQWRkZWQnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIEFuaW1hdGlvbkZlYXR1cmUgYWRkQW5pbWF0aW9uXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5BbmltYXRpb25GZWF0dXJlLnJlbW92ZUFuaW1hdGlvbj0nX29uQW5pbWF0aW9uUmVtb3ZlZCddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gQW5pbWF0aW9uRmVhdHVyZSByZW1vdmVBbmltYXRpb25cbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUucmVuYW1lQW5pbWF0aW9uPSdfb25BbmltYXRpb25SZW5hbWVkJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBBbmltYXRpb25GZWF0dXJlIHJlbmFtZUFuaW1hdGlvblxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICovXG5jbGFzcyBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGV4dGVuZHMgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIGFuaW1hdGlvbiBsYXllciBhZGRlZCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IHdhcyBhZGRlZC5cbiAgICovXG4gIF9vbkxheWVyQWRkZWQoe25hbWV9KSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIGFuaW1hdGlvbiBsYXllciByZW1vdmVkIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzIHJlbW92ZWQuXG4gICAqL1xuICBfb25MYXllclJlbW92ZWQoe25hbWV9KSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIGFuaW1hdGlvbiBsYXllciByZW5hbWVkIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzIHJlbmFtZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUgb2YgdGhlIGxheWVyLlxuICAgKi9cbiAgX29uTGF5ZXJSZW5hbWVkKHtvbGROYW1lLCBuZXdOYW1lfSkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gYWRkZWQgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGFuIGFuaW1hdGlvbiB3YXMgYWRkZWQgdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIGFkZGVkLlxuICAgKi9cbiAgX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHt9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVkIHdoZW4gYW5pbWF0aW9uIHJlbW92ZWQgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGFuIGFuaW1hdGlvbiB3YXMgcmVtb3ZlZCBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZW1vdmVkLlxuICAgKi9cbiAgX29uQW5pbWF0aW9uUmVtb3ZlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBhbmltYXRpb24gcmVuYW1lZCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgYW4gYW5pbWF0aW9uIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvbGROYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlbmFtZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUgb2YgdGhlIGFuaW1hdGlvbi5cbiAgICovXG4gIF9vbkFuaW1hdGlvblJlbmFtZWQoe2xheWVyTmFtZSwgb2xkTmFtZSwgbmV3TmFtZX0pIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9XG4gICAqIGFuZCBleHRlbmRzIGEgc3BlY2lmaWVkIGJhc2UgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEJhc2VDbGFzcyAtIFRoZSBjbGFzcyB0byBleHRlbmQuXG4gICAqXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XG4gICAgY29uc3QgUGFyZW50Q2xhc3MgPSBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluKEJhc2VDbGFzcyk7XG4gICAgY29uc3QgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudE1peGluID0gY2xhc3MgZXh0ZW5kcyBQYXJlbnRDbGFzcyB7XG4gICAgICBfb25MYXllckFkZGVkKHtuYW1lfSkge31cblxuICAgICAgX29uTGF5ZXJSZW1vdmVkKHtuYW1lfSkge31cblxuICAgICAgX29uTGF5ZXJSZW5hbWVkKHtvbGROYW1lLCBuZXdOYW1lfSkge31cblxuICAgICAgX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHt9XG5cbiAgICAgIF9vbkFuaW1hdGlvblJlbW92ZWQoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHt9XG5cbiAgICAgIF9vbkFuaW1hdGlvblJlbmFtZWQoe2xheWVyTmFtZSwgb2xkTmFtZSwgbmV3TmFtZX0pIHt9XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbiwge1xuICAgICAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgLi4uUGFyZW50Q2xhc3MuRVZFTlRfREVQRU5ERU5DSUVTLFxuICAgICAgICAgIC4uLkFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuRVZFTlRfREVQRU5ERU5DSUVTLFxuICAgICAgICB9LFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRNaXhpbjtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLCB7XG4gIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xuICAgIHZhbHVlOiB7XG4gICAgICBBbmltYXRpb25GZWF0dXJlOiB7XG4gICAgICAgIGFkZExheWVyOiAnX29uTGF5ZXJBZGRlZCcsXG4gICAgICAgIHJlbW92ZUxheWVyOiAnX29uTGF5ZXJSZW1vdmVkJyxcbiAgICAgICAgcmVuYW1lTGF5ZXI6ICdfb25MYXllclJlbmFtZWQnLFxuICAgICAgICBhZGRBbmltYXRpb246ICdfb25BbmltYXRpb25BZGRlZCcsXG4gICAgICAgIHJlbW92ZUFuaW1hdGlvbjogJ19vbkFuaW1hdGlvblJlbW92ZWQnLFxuICAgICAgICByZW5hbWVBbmltYXRpb246ICdfb25BbmltYXRpb25SZW5hbWVkJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xuaW1wb3J0IEFuaW1hdGlvbkZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZnJvbSAnY29yZS9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlJztcblxuLyoqXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgdGhhdCBrZWVwcyB0cmFjayBvZiBsYXllcnMgYW5kIGFuaW1hdGlvbnMgb24gYSBob3N0LlxuICogVHJhY2tlZCBhc3NldHMgYXJlIG1hcmtlZCBhcyBpbmFjdGl2ZSB1bnRpbCBsYXllcnMgYW5kIGFuaW1hdGlvbnMgd2l0aCBtYXRjaGluZ1xuICogbmFtZXMgYXJlIGRldGVjdGVkIGFzIHByZXNlbnQgb24gdGhlIGhvc3QuXG4gKlxuICogQGludGVyZmFjZVxuICogQGV4dGVuZHMgQW5pbWF0aW9uRmVhdHVyZURlcGVuZGVudEludGVyZmFjZVxuICpcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBERUZBVUxUX0xBWUVSX09QVElPTlMgLSBEZWZhdWx0IG9wdGlvbnMgdG8gdXNlIHdoZW4gZXhlY3V0aW5nXG4gKiB7QGxpbmsgQW5pbWF0aW9uTGF5ZXJ9IG1ldGhvZHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW0RFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWU9MC41XSAtIERlZmF1bHQgdGltZSBpbiBzZWNvbmRzXG4gKiB0byB1c2Ugd2hlbiBleGVjdXRpbmcge0BsaW5rIEFuaW1hdGlvbkxheWVyLnNldEJsZW5kV2VpZ2h0fS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbREVGQVVMVF9MQVlFUl9PUFRJT05TLmFuaW1hdGlvbnM9e31dIC0gTWFwcyBhbmltYXRpb24gbmFtZXNcbiAqIHRvIGRlZmF1bHQgb3B0aW9ucyBvYmplY3RzIHRvIHVzZSBmb3IgbWFuYWdlZCBhbmltYXRpb25zLlxuICovXG5jbGFzcyBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UgZXh0ZW5kcyBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIHtcbiAgLyoqXG4gICAqIFN0YXJ0IHRyYWNraW5nIGtlZXBpbmcgdHJhY2sgb2Ygd2hldGhlciBhIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgcHJlc2VudFxuICAgKiBvbiB0aGUgaG9zdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBrZWVwIHRyYWNrIG9mLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgbGF5ZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0aW9ucy5ibGVuZFRpbWUgLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuXG4gICAqIG1hbmlwdWxhdGluZyBsYXllciB3ZWlnaHRzIG9uIHRoaXMgbGF5ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLmVhc2luZ0ZuIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW5cbiAgICogbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodHMgb24gdGhpcyBsYXllci5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zLmFuaW1hdGlvbnMgLSBBbmltYXRpb25zIHRvIGtlZXAgdHJhY2sgb2Ygb24gdGhlIGxheWVyLlxuICAgKiBBbmltYXRpb25zIGFyZSByZXByZXNlbnRlZCBhcyBrZXkvdmFsdWUgcGFpcnMgb2YgYW5pbWF0aW9uIG5hbWVzIGFuZCB0aGVpclxuICAgKiBvcHRpb25zLlxuICAgKi9cbiAgcmVnaXN0ZXJMYXllcihuYW1lLCBvcHRpb25zID0ge30pIHt9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRyYWNraW5nIGtlZXBpbmcgdHJhY2sgb2Ygd2hldGhlciBhbiBhbmltYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpc1xuICAgKiBwcmVzZW50IG9uIHRoZSBob3N0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCB3aWxsIG93biB0aGUgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byBrZWVwIHRyYWNrIG9mLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uLlxuICAgKi9cbiAgcmVnaXN0ZXJBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBvcHRpb25zID0ge30pIHt9XG5cbiAgLyoqXG4gICAqIFNldCBsYXllciB3ZWlnaHRzIG9uIHRyYWNrZWQgbGF5ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gbmFtZUZpbHRlciAtIFByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggdHJhY2tlZCBsYXllclxuICAgKiB3aXRoLiBCeSBkZWZhdWx0IGFsbCBsYXllcnMgd2lsbCBwYXNzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGJsZW5kVGltZSBvcHRpb24gaXMgdXNlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHNldHRpbmcgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGVhc2luZ0ZuIG9wdGlvbiBpcyB1c2VkLlxuICAgKi9cbiAgc2V0TGF5ZXJXZWlnaHRzKG5hbWVGaWx0ZXIgPSAoKSA9PiB0cnVlLCB3ZWlnaHQsIHNlY29uZHMsIGVhc2luZ0ZuKSB7fVxuXG4gIC8qKlxuICAgKiBTZXQgYWxsIHRyYWNrZWQgbGF5ZXJzJyB3ZWlnaHRzIHRvIDEuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGJsZW5kVGltZSBvcHRpb24gaXMgdXNlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHNldHRpbmcgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGVhc2luZ0ZuIG9wdGlvbiBpcyB1c2VkLlxuICAgKi9cbiAgZW5hYmxlKHNlY29uZHMsIGVhc2luZ0ZuKSB7fVxuXG4gIC8qKlxuICAgKiBTZXQgYWxsIHRyYWNrZWQgbGF5ZXJzJyB3ZWlnaHRzIHRvIDAuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGJsZW5kVGltZSBvcHRpb24gaXMgdXNlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIHNldHRpbmcgd2VpZ2h0XG4gICAqIG9uIGVhY2ggbGF5ZXIuIElmIHVuZGVmaW5lZCwgZWFjaCBsYXllcnMnIGVhc2luZ0ZuIG9wdGlvbiBpcyB1c2VkLlxuICAgKi9cbiAgZGlzYWJsZShzZWNvbmRzLCBlYXNpbmdGbikge31cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlfVxuICAgKiBhbmQgZXh0ZW5kcyBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBCYXNlQ2xhc3MgLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XG4gICAgY29uc3QgUGFyZW50Q2xhc3MgPSBBbmltYXRpb25GZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluKEJhc2VDbGFzcyk7XG4gICAgY29uc3QgTWFuYWdlZEFuaW1hdGlvbkxheWVyTWl4aW4gPSBjbGFzcyBleHRlbmRzIFBhcmVudENsYXNzIHtcbiAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG5cbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVycyA9IHt9O1xuICAgICAgfVxuXG4gICAgICBfb25GZWF0dXJlQWRkZWQodHlwZU5hbWUpIHtcbiAgICAgICAgc3VwZXIuX29uRmVhdHVyZUFkZGVkKHR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZU5hbWUgIT09ICdBbmltYXRpb25GZWF0dXJlJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzIHx8IHt9O1xuXG4gICAgICAgIC8vIERldGVjdCBuZXcgbGF5ZXJzXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5sYXllcnMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICB0aGlzLl9vbkxheWVyQWRkZWQoe25hbWV9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIF9vbkZlYXR1cmVSZW1vdmVkKHR5cGVOYW1lKSB7XG4gICAgICAgIHN1cGVyLl9vbkZlYXR1cmVSZW1vdmVkKHR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZU5hbWUgIT09ICdBbmltYXRpb25GZWF0dXJlJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzIHx8IHt9O1xuXG4gICAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGxheWVyc1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9tYW5hZ2VkTGF5ZXJzKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIHRoaXMuX29uTGF5ZXJSZW1vdmVkKHtuYW1lfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBfb25MYXllckFkZGVkKHtuYW1lfSkge1xuICAgICAgICAvLyBNYXJrIHRoZSBsYXllciBhcyBhY3RpdmUgaWYgaXQgaXMgbWFuYWdlZFxuICAgICAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5pc0FjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgICAvLyBEZXRlY3QgbmV3IGFuaW1hdGlvbnNcbiAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9ucyhuYW1lKS5mb3JFYWNoKGFuaW1OYW1lID0+IHtcbiAgICAgICAgICAgIHRoaXMuX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZTogbmFtZSwgYW5pbWF0aW9uTmFtZTogYW5pbU5hbWV9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25MYXllclJlbW92ZWQoe25hbWV9KSB7XG4gICAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGxheWVyIGlmIGl0IGlzIG1hbmFnZWRcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uaXNBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdLmFuaW1hdGlvbnMpLmZvckVhY2goXG4gICAgICAgICAgICBhbmltTmFtZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX29uQW5pbWF0aW9uUmVtb3ZlZCh7XG4gICAgICAgICAgICAgICAgbGF5ZXJOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbk5hbWU6IGFuaW1OYW1lLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9vbkxheWVyUmVuYW1lZCh7b2xkTmFtZSwgbmV3TmFtZX0pIHtcbiAgICAgICAgY29uc3QgbGF5ZXJPcHRpb25zID0gdGhpcy5fbWFuYWdlZExheWVyc1tvbGROYW1lXTtcblxuICAgICAgICAvLyBSZXBsYWNlIHRoZSBsYXllciBrZXkgd2l0aCB0aGUgbmV3IG5hbWVcbiAgICAgICAgaWYgKGxheWVyT3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuX21hbmFnZWRMYXllcnNbb2xkTmFtZV07XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuZXdOYW1lXSA9IGxheWVyT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25BbmltYXRpb25BZGRlZCh7bGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lfSkge1xuICAgICAgICAvLyBNYXJrIHRoZSBhbmltYXRpb24gYXMgYWN0aXZlIGlmIGl0IGlzIG1hbmFnZWRcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0gIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcbiAgICAgICAgICAgIGFuaW1hdGlvbk5hbWVcbiAgICAgICAgICBdLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfb25BbmltYXRpb25SZW1vdmVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XG4gICAgICAgIC8vIERlYWN0aXZhdGUgdGhlIGFuaW1hdGlvbiBpZiBpdCBpcyBtYW5hZ2VkXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgICAgXS5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9vbkFuaW1hdGlvblJlbmFtZWQoe2xheWVyTmFtZSwgb2xkTmFtZSwgbmV3TmFtZX0pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbb2xkTmFtZV0gIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBhbmltYXRpb24ga2V5IHdpdGggdGhlIG5ldyBuYW1lXG4gICAgICAgICAgY29uc3QgYW5pbU9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcbiAgICAgICAgICAgIG9sZE5hbWVcbiAgICAgICAgICBdO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tvbGROYW1lXTtcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tuZXdOYW1lXSA9IGFuaW1PcHRpb25zO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlZ2lzdGVyTGF5ZXIobmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggZGVmYXVsdCBvcHRpb25zIGZvciBlYWNoIG5ldyBsYXllclxuICAgICAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9MQVlFUl9PUFRJT05TLFxuICAgICAgICAgICAgYW5pbWF0aW9uczoge30sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBhbGwgb3B0aW9ucyBleGNlcHQgYW5pbWF0aW9uc1xuICAgICAgICBjb25zdCBsYXllck9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdO1xuICAgICAgICBvcHRpb25zID0gey4uLm9wdGlvbnN9O1xuICAgICAgICBjb25zdCBhbmltYXRpb25PcHRpb25zID0gb3B0aW9ucy5hbmltYXRpb25zIHx8IHt9O1xuICAgICAgICBkZWxldGUgb3B0aW9ucy5hbmltYXRpb25zO1xuICAgICAgICBPYmplY3QuYXNzaWduKGxheWVyT3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgbGF5ZXIgY2FuIGJlIG1hbmlwdWxhdGVkIG5vd1xuICAgICAgICBsYXllck9wdGlvbnMuaXNBY3RpdmUgPVxuICAgICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmxheWVycy5pbmNsdWRlcyhuYW1lKTtcblxuICAgICAgICAvLyBSZWdpc3RlciB0aGUgYW5pbWF0aW9uc1xuICAgICAgICBPYmplY3QuZW50cmllcyhhbmltYXRpb25PcHRpb25zKS5mb3JFYWNoKChbYW5pbU5hbWUsIGFuaW1PcHRpb25zXSkgPT4ge1xuICAgICAgICAgIHRoaXMucmVnaXN0ZXJBbmltYXRpb24obmFtZSwgYW5pbU5hbWUsIGFuaW1PcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlZ2lzdGVyQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBsYXllciBpZiBpdCBoYXNuJ3QgYmVlbiByZWdpc3RlcmVkIHlldFxuICAgICAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyTGF5ZXIobGF5ZXJOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBhbmltYXRpb24gb3B0aW9uc1xuICAgICAgICBjb25zdCBhbmltT3B0aW9ucyA9XG4gICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0gfHwge307XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYW5pbU9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXSA9IGFuaW1PcHRpb25zO1xuXG4gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGFuaW1hdGlvbiBjYW4gYmUgbWFuaXB1bGF0ZWQgbm93XG4gICAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlID1cbiAgICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uaXNBY3RpdmUgJiZcbiAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0QW5pbWF0aW9ucyhsYXllck5hbWUpLmluY2x1ZGVzKFxuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHNldExheWVyV2VpZ2h0cyhuYW1lRmlsdGVyID0gKCkgPT4gdHJ1ZSwgd2VpZ2h0LCBzZWNvbmRzLCBlYXNpbmdGbikge1xuICAgICAgICBjb25zdCBsYXllck5hbWVzID0gT2JqZWN0LmtleXModGhpcy5fbWFuYWdlZExheWVycykuZmlsdGVyKG5hbWVGaWx0ZXIpO1xuXG4gICAgICAgIGxheWVyTmFtZXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBjb25zdCBsYXllck9wdGlvbnMgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW25hbWVdO1xuXG4gICAgICAgICAgaWYgKGxheWVyT3B0aW9ucy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldExheWVyV2VpZ2h0KFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICB3ZWlnaHQsXG4gICAgICAgICAgICAgIHNlY29uZHMgIT09IHVuZGVmaW5lZCA/IHNlY29uZHMgOiBsYXllck9wdGlvbnMuYmxlbmRUaW1lLFxuICAgICAgICAgICAgICBlYXNpbmdGbiB8fCBsYXllck9wdGlvbnMuZWFzaW5nRm5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZW5hYmxlKHNlY29uZHMsIGVhc2luZ0ZuKSB7XG4gICAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKHVuZGVmaW5lZCwgMSwgc2Vjb25kcywgZWFzaW5nRm4pO1xuICAgICAgfVxuXG4gICAgICBkaXNhYmxlKHNlY29uZHMsIGVhc2luZ0ZuKSB7XG4gICAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKHVuZGVmaW5lZCwgMCwgc2Vjb25kcywgZWFzaW5nRm4pO1xuICAgICAgfVxuXG4gICAgICBpbnN0YWxsQXBpKCkge1xuICAgICAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihhcGksIHtcbiAgICAgICAgICByZWdpc3RlckxheWVyOiB0aGlzLnJlZ2lzdGVyTGF5ZXIuYmluZCh0aGlzKSxcbiAgICAgICAgICByZWdpc3RlckFuaW1hdGlvbjogdGhpcy5yZWdpc3RlckFuaW1hdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICAgIHNldExheWVyV2VpZ2h0czogdGhpcy5zZXRMYXllcldlaWdodHMuYmluZCh0aGlzKSxcbiAgICAgICAgICBlbmFibGU6IHRoaXMuZW5hYmxlLmJpbmQodGhpcyksXG4gICAgICAgICAgZGlzYWJsZTogdGhpcy5kaXNhYmxlLmJpbmQodGhpcyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhcGk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1hbmFnZWRBbmltYXRpb25MYXllck1peGluLCB7XG4gICAgICBERUZBVUxUX0xBWUVSX09QVElPTlM6IHtcbiAgICAgICAgdmFsdWU6IE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZS5ERUZBVUxUX0xBWUVSX09QVElPTlMsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gTWFuYWdlZEFuaW1hdGlvbkxheWVyTWl4aW47XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlLCB7XG4gIERFRkFVTFRfTEFZRVJfT1BUSU9OUzoge1xuICAgIHZhbHVlOiB7YmxlbmRUaW1lOiAwLjUsIGFuaW1hdGlvbnM6IHt9fSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0sXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbmltcG9ydCBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJ2NvcmUvRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSc7XG5cbi8qKlxuICogQ2xhc3MgZmFjdG9yeSBpbnRlcmZhY2UgZm9yIGZlYXR1cmVzIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGUgVGV4dFRvU3BlZWNoRmVhdHVyZVxuICogYmVpbmcgcHJlc2VudCBvbiB0aGUgaG9zdC4gU3BlZWNoIGV2ZW50cyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgbGlzdGVuZWQgZm9yIG9uY2UgYVxuICogVGV4dFRvU3BlZWNoRmVhdHVyZSBpcyBhZGRlZCB0byB0aGUgaG9zdCBhbmQgc3RvcHBlZCBvbmNlIGl0IGlzIHJlbW92ZWQuXG4gKlxuICogQGludGVyZmFjZVxuICogQGV4dGVuZHMgRmVhdHVyZURlcGVuZGVudEludGVyZmFjZVxuICpcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMgLSBFdmVudHMgdGhhdCB0aGUgZmVhdHVyZSBzaG91bGQgc3RhcnQvc3RvcFxuICogbGlzdGVuaW5nIGZvciB3aGVuIGEgZmVhdHVyZSBvZiB0eXBlIEZlYXR1cmVOYW1lIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgaG9zdC5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZSAtIEV2ZW50cyB0aGF0IGFyZVxuICogc3BlY2lmaWMgdG8gdGhlIFRleHRUb1NwZWVjaEZlYXR1cmUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnBsYXk9J19vblBsYXknXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgcGxheVxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5wYXVzZT0nX29uUGF1c2UnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgcGF1c2VcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUucmVzdW1lPSdfb25SZXN1bWUnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgcmVzdW1lXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnN0b3A9J19vblN0b3AnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgc3RvcFxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5zZW50ZW5jZT0nX29uU2VudGVuY2UnXSAtXG4gKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIFRleHRUb1NwZWVjaEZlYXR1cmUgc2VudGVuY2VcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRfREVQRU5ERU5DSUVTLlRleHRUb1NwZWVjaEZlYXR1cmUud29yZD0nX29uV29yZCddIC1cbiAqIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gVGV4dFRvU3BlZWNoRmVhdHVyZSB3b3JkXG4gKiBldmVudHMgYXJlIGVtaXR0ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UX0RFUEVOREVOQ0lFUy5UZXh0VG9TcGVlY2hGZWF0dXJlLnZpc2VtZT0nX29uVmlzZW1lJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHZpc2VtZVxuICogZXZlbnRzIGFyZSBlbWl0dGVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVF9ERVBFTkRFTkNJRVMuVGV4dFRvU3BlZWNoRmVhdHVyZS5zc21sPSdfb25Tc21sJ10gLVxuICogVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiBUZXh0VG9TcGVlY2hGZWF0dXJlIHNzbWxcbiAqIGV2ZW50cyBhcmUgZW1pdHRlZC5cbiAqL1xuY2xhc3MgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSBleHRlbmRzIEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2Uge1xuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggcGxheSBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblBsYXkoKSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCBwYXVzZSBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblBhdXNlKCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggcmVzdW1lIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uUmVzdW1lKCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggc3RvcCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblN0b3AoKSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCBzZW50ZW5jZSBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vblNlbnRlbmNlKCkge31cblxuICAvKipcbiAgICogRXhlY3V0ZWQgd2hlbiBzcGVlY2ggd29yZCBldmVudHMgYXJlIGNhdWdodC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vbldvcmQoKSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCB2aXNlbWUgZXZlbnRzIGFyZSBjYXVnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25WaXNlbWUoKSB7fVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlZCB3aGVuIHNwZWVjaCBzc21sIGV2ZW50cyBhcmUgY2F1Z2h0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uU3NtbCgpIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2V9XG4gICAqIGFuZCBleHRlbmRzIGEgc3BlY2lmaWVkIGJhc2UgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2xhc3N9IEJhc2VDbGFzcyAtIFRoZSBjbGFzcyB0byBleHRlbmQuXG4gICAqXG4gICAqIEByZXR1cm4ge0NsYXNzfSBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBgQmFzZUNsYXNzYCBhbmQgaW1wbGVtZW50cyB7QGxpbmsgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzKSB7XG4gICAgY29uc3QgUGFyZW50Q2xhc3MgPSBGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluKEJhc2VDbGFzcyk7XG4gICAgY29uc3QgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudE1peGluID0gY2xhc3MgZXh0ZW5kcyBQYXJlbnRDbGFzcyB7XG4gICAgICBfb25QbGF5KCkge31cblxuICAgICAgX29uUGF1c2UoKSB7fVxuXG4gICAgICBfb25SZXN1bWUoKSB7fVxuXG4gICAgICBfb25TdG9wKCkge31cblxuICAgICAgX29uU2VudGVuY2UoKSB7fVxuXG4gICAgICBfb25Xb3JkKCkge31cblxuICAgICAgX29uVmlzZW1lKCkge31cblxuICAgICAgX29uU3NtbCgpIHt9XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRNaXhpbiwge1xuICAgICAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgLi4uUGFyZW50Q2xhc3MuRVZFTlRfREVQRU5ERU5DSUVTLFxuICAgICAgICAgIC4uLlRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuRVZFTlRfREVQRU5ERU5DSUVTLFxuICAgICAgICB9LFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRNaXhpbjtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLCB7XG4gIEVWRU5UX0RFUEVOREVOQ0lFUzoge1xuICAgIHZhbHVlOiB7XG4gICAgICBUZXh0VG9TcGVlY2hGZWF0dXJlOiB7XG4gICAgICAgIHBsYXk6ICdfb25QbGF5JyxcbiAgICAgICAgcGF1c2U6ICdfb25QYXVzZScsXG4gICAgICAgIHJlc3VtZTogJ19vblJlc3VtZScsXG4gICAgICAgIHN0b3A6ICdfb25TdG9wJyxcbiAgICAgICAgc2VudGVuY2U6ICdfb25TZW50ZW5jZScsXG4gICAgICAgIHdvcmQ6ICdfb25Xb3JkJyxcbiAgICAgICAgdmlzZW1lOiAnX29uVmlzZW1lJyxcbiAgICAgICAgc3NtbDogJ19vblNzbWwnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi9NYXRoVXRpbHMnO1xuaW1wb3J0IHtRdWFkcmF0aWN9IGZyb20gJy4vYW5pbXBhY2svRWFzaW5nJztcbmltcG9ydCBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UgZnJvbSAnLi9hbmltcGFjay9NYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UgZnJvbSAnLi9hd3NwYWNrL1RleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UnO1xuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcblxuLyoqXG4gKiBEZWZhdWx0IG1hcHBpbmcgb2YgUG9sbHkgdmlzZW1lIG5hbWVzIHRvIGFuaW1hdGlvbiBvcHRpb25zIG9iamVjdHMuXG4gKlxuICogQHByb3BlcnR5IHtPYmplY3R9IFtzaWw9e25hbWU6ICdzaWwnfV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbcD17bmFtZTogJ3AnLCBvdmVycmlkZVdlaWdodDogMC45fV1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbdD17bmFtZTogJ3QnLCBibGVuZFRpbWU6IDAuMn1dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1M9e25hbWU6ICdTJ31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1Q9e25hbWU6ICdUJ31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2Y9e25hbWU6ICdmJywgb3ZlcnJpZGVXZWlnaHQ6IDAuNzV9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtrPXtuYW1lOiAnayd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtpPXtuYW1lOiAnaSd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtyPXtuYW1lOiAncid9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtzPXtuYW1lOiAncycsIGJsZW5kVGltZTogMC4yNX1dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW3U9e25hbWU6ICd1J31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW0A9e25hbWU6ICdAJ31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2E9e25hbWU6ICdhJ31dXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2U9e25hbWU6ICdlJywgYmxlbmRUaW1lOiAwLjJ9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtFPXtuYW1lOiAnRSd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtvPXtuYW1lOiAnbyd9XVxuICogQHByb3BlcnR5IHtPYmplY3R9IFtPPXtuYW1lOiAnTyd9XVxuICovXG5jb25zdCBEZWZhdWx0VmlzZW1lTWFwID0ge1xuICBzaWw6IHtuYW1lOiAnc2lsJ30sXG4gIHA6IHtuYW1lOiAncCcsIG92ZXJyaWRlV2VpZ2h0OiAwLjl9LFxuICB0OiB7bmFtZTogJ3QnLCBibGVuZFRpbWU6IDAuMn0sXG4gIFM6IHtuYW1lOiAnUyd9LFxuICBUOiB7bmFtZTogJ1QnfSxcbiAgZjoge25hbWU6ICdmJywgb3ZlcnJpZGVXZWlnaHQ6IDAuNzV9LFxuICBrOiB7bmFtZTogJ2snfSxcbiAgaToge25hbWU6ICdpJ30sXG4gIHI6IHtuYW1lOiAncid9LFxuICBzOiB7bmFtZTogJ3MnLCBibGVuZFRpbWU6IDAuMjV9LFxuICB1OiB7bmFtZTogJ3UnfSxcbiAgJ0AnOiB7bmFtZTogJ0AnfSxcbiAgYToge25hbWU6ICdhJ30sXG4gIGU6IHtuYW1lOiAnZScsIGJsZW5kVGltZTogMC4yfSxcbiAgRToge25hbWU6ICdFJ30sXG4gIG86IHtuYW1lOiAnbyd9LFxuICBPOiB7bmFtZTogJ08nfSxcbn07XG5cbi8qKlxuICogTGlwc3luYyBjb250cm9scyB0d28gdHlwZXMgb2YgbW92ZW1lbnQ6IGlkbGUgYW5pbWF0aW9uIHRoYXQgc2hvdWxkIHBsYXkgd2hpbGVcbiAqIHNwZWVjaCBpcyBwbGF5aW5nIGFuZCB2aXNlbWUgYW5pbWF0aW9ucyBjb3JyZXNwb25kaW5nIHRvIFBvbGx5IHZpc2VtZXMgd2hvc2VcbiAqIHdlaWdodHMgc2hvdWxkIGJlIHR1cm5lZCBvbiBhbmQgb2ZmIGFzIHRoZXkgYXJlIGVuY291bnRlcmVkIGluIHRoZSBQb2xseSBTU01MXG4gKiB0cmFuc2NyaXB0LiBMYXllcnMgb3duZWQgYnkgdGhpcyBmZWF0dXJlIHdpbGwgYmUgZW5hYmxlZCB3aGlsZSBzcGVlY2ggaXMgcGxheWluZ1xuICogYW5kIGRpc2FibGVkIG9uY2UgaXQgc3RvcHMuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZVxuICogQGFsaWFzIGNvcmUvTGlwc3luY0ZlYXR1cmVcbiAqIEBpbXBsZW1lbnRzIFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2VcbiAqIEBpbXBsZW1lbnRzIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZVxuICovXG5jbGFzcyBMaXBzeW5jRmVhdHVyZSBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmUubWl4KFxuICBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlLk1peGluLFxuICBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuTWl4aW5cbikge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCB0aGF0IG93bnMgdGhlIGZlYXR1cmUuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gdmlzZW1lT3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSB2aXNlbWUgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3Zpc2VtZU9wdGlvbnMuYmxlbmRUaW1lPTAuMTVdIC0gRGVmYXVsdCBhbW91bnQgb2YgdGltZSBpdFxuICAgKiB3aWxsIHRha2UgdG8gbWFuaXB1bGF0ZSBlYWNoIGZyZWVCbGVuZCB3ZWlnaHQgb24gdGhlIHZpc2VtZSBzdGF0ZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbdmlzZW1lT3B0aW9ucy5kZWNheVJhdGU9e2Ftb3VudDogLjUsIHNlY29uZHM6IC41fV0gLSBBbiBvYmplY3RcbiAgICogZGVzY3JpYmluZyB0aGUgMC0xIGZhY3RvciB2aXNlbWUgd2VpZ2h0IHdpbGwgZGVjYXkgaWYgdGhlIHZpc2VtZSBkdXJhdGlvbiBpc1xuICAgKiBsb25nZXIgdGhhbiB0aGUgYmxlbmRUaW1lIGFuZCB0aGUgbnVtYmVyIG9mIHNlY29uZHMgaXQgd291bGQgdGFrZSB0byBkZWNheVxuICAgKiBieSB0aGF0IGZhY3Rvci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt2aXNlbWVPcHRpb25zLmVhc2luZ0ZuPVF1YWRyYXRpYy5Jbk91dF0gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvblxuICAgKiB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgdmlzZW1lIGZyZWVCbGVuZCB3ZWlnaHRzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbdmlzZW1lT3B0aW9ucy4ubGF5ZXJzPVtdXSAtIEFuIGFycmF5IG9mIGxheWVyIG9wdGlvbnNcbiAgICogb2JqZWN0cyB0byByZWdpc3RlciBhcyB2aXNlbWUgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge09iamVjdD19IHRhbGtpbmdPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIHRhbGtpbmcgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3RhbGtpbmdPcHRpb25zLmJsZW5kVGltZT0wLjc1XSAtIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG9cbiAgICogZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSB0YWxraW5nIGlkbGUgbGF5ZXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdGFsa2luZ09wdGlvbnMuZWFzaW5nRm49UXVhZHJhdGljLkluT3V0XSAtIERlZmF1bHQgZWFzaW5nXG4gICAqIGZ1bmN0aW9uIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyB3ZWlnaHRzIG9uIHRoZSB0YWxraW5nIGlkbGUgbGF5ZXJzLlxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbdGFsa2luZ09wdGlvbnMubGF5ZXJzPVtdXSAtIEFuIGFycmF5IG9mIGxheWVyIG9wdGlvbnNcbiAgICogb2JqZWN0cyB0byByZWdpc3RlciBhcyB0YWxraW5nIGxheWVycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt2aXNlbWVMZWFkVGltZT0uMDY3XSAtIFRoZSBhbW91bnQgb2YgdGltZSB0byBpbnN0cnVjdCB0aGVcbiAgICogVGV4dFRvU3BlZWNoRmVhdHVyZSB0byBlbWl0IHNwZWVjaG1hcmtzIGJlZm9yZSBlYWNoIG9uZSdzIGFjdHVhbCB0aW1lc3RhbXBcbiAgICogaXMgcmVhY2hlZC4gVGhpcyB3aWxsIHNldCB0aGUgJ3NwZWVjaE1hcmtPZmZzZXQnIHZhcmlhYmxlIG9uIHRoZSBUZXh0VG9TcGVlY2hGZWF0dXJlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgaG9zdCxcbiAgICB7XG4gICAgICBibGVuZFRpbWU6IHZpc2VtZUJsZW5kVGltZSA9IDAuMTUsXG4gICAgICBkZWNheVJhdGU6IHthbW91bnQgPSAwLjUsIHNlY29uZHMgPSAwLjV9ID0ge30sXG4gICAgICBlYXNpbmdGbjogdmlzZW1lRWFzaW5nRm4gPSBRdWFkcmF0aWMuSW5PdXQsXG4gICAgICBsYXllcnM6IHZpc2VtZUxheWVycyA9IFtdLFxuICAgIH0gPSB7fSxcbiAgICB7XG4gICAgICBibGVuZFRpbWU6IHRhbGtpbmdCbGVuZFRpbWUgPSAwLjc1LFxuICAgICAgZWFzaW5nRm46IHRhbGtpbmdFYXNpbmdGbiA9IFF1YWRyYXRpYy5Jbk91dCxcbiAgICAgIGxheWVyczogdGFsa2luZ0xheWVycyA9IFtdLFxuICAgIH0gPSB7fSxcbiAgICB2aXNlbWVMZWFkVGltZSA9IDAuMDY3XG4gICkge1xuICAgIHN1cGVyKGhvc3QpO1xuXG4gICAgdGhpcy5fdmlzZW1lTGF5ZXJzID0ge307XG4gICAgdGhpcy5fdGFsa2luZ0xheWVycyA9IHt9O1xuICAgIHRoaXMudmlzZW1lTGVhZFRpbWUgPSB2aXNlbWVMZWFkVGltZTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSB2aXNlbWUgbGF5ZXJzXG4gICAgdmlzZW1lTGF5ZXJzLmZvckVhY2goKHtuYW1lLCBhbmltYXRpb24sIHZpc2VtZU1hcCA9IERlZmF1bHRWaXNlbWVNYXB9KSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyVmlzZW1lTGF5ZXIobmFtZSwge1xuICAgICAgICBhbmltYXRpb24sXG4gICAgICAgIHZpc2VtZU1hcCxcbiAgICAgICAgZGVjYXlSYXRlOiB7YW1vdW50LCBzZWNvbmRzfSxcbiAgICAgICAgYmxlbmRUaW1lOiB2aXNlbWVCbGVuZFRpbWUsXG4gICAgICAgIGVhc2luZ0ZuOiB2aXNlbWVFYXNpbmdGbixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gUmVnaXN0ZXIgdGhlIHRhbGtpbmcgbGF5ZXJzXG4gICAgdGFsa2luZ0xheWVycy5mb3JFYWNoKCh7bmFtZSwgYW5pbWF0aW9ufSkgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlclRhbGtpbmdMYXllcihuYW1lLCB7XG4gICAgICAgIGFuaW1hdGlvbixcbiAgICAgICAgYmxlbmRUaW1lOiB0YWxraW5nQmxlbmRUaW1lLFxuICAgICAgICBlYXNpbmdGbjogdGFsa2luZ0Vhc2luZ0ZuLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIHRoYXQgcmVnaXN0ZXJlZCB2aXNlbWUgYW5pbWF0aW9ucyBhcmUgRnJlZUJsZW5kU3RhdGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgdmlzZW1lIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24uXG4gICAqL1xuICBfcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKSB7XG4gICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25UeXBlKFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgICkgIT09ICdmcmVlQmxlbmQnXG4gICAgICApIHtcbiAgICAgICAgLy8gV2FybiBhbmQgZGVhY3RpdmF0ZSBpZiB0aGUgcmVnaXN0ZXJlZCBzdGF0ZSBpcyBub3QgZnJlZUJsZW5kXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgQ2Fubm90IHJlZ2lzdGVyIExpcHN5bmMgdmlzZW1lIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBWaXNlbWUgYW5pbWF0aW9ucyBtdXN0IGJlIG9mIHR5cGUgJ2ZyZWVCbGVuZCcuYFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1tcbiAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgIF0uaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBibGVuZFdlaWdodHMgY2FuIGJlIG1hbmlwdWxhdGVkIG5vd1xuICAgICAgICBjb25zdCB3ZWlnaHROYW1lcyA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZE5hbWVzKFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltYXRpb25OYW1lXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHt2aXNlbWVNYXB9ID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICBdO1xuXG4gICAgICAgIE9iamVjdC52YWx1ZXModmlzZW1lTWFwKS5mb3JFYWNoKHZpc2VtZU9wdGlvbnMgPT4ge1xuICAgICAgICAgIHZpc2VtZU9wdGlvbnMuaXNBY3RpdmUgPSB3ZWlnaHROYW1lcy5pbmNsdWRlcyh2aXNlbWVPcHRpb25zLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGFkZGVkIGZlYXR1cmUgaXMgVGV4dFRvU3BlZWNoLCB1cGRhdGUgaXRzIHNwZWVjaE1hcmtPZmZzZXQgdmFyaWFibGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZSAtIE5hbWUgb2YgdGhlIHR5cGUgb2YgZmVhdHVyZSB0aGF0IHdhcyBhZGRlZC5cbiAgICovXG4gIF9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSkge1xuICAgIHRoaXMuX3Zpc2VtZUxheWVycyA9IHRoaXMuX3Zpc2VtZUxheWVycyB8fCB7fTtcbiAgICB0aGlzLl90YWxraW5nTGF5ZXJzID0gdGhpcy5fdGFsa2luZ0xheWVycyB8fCB7fTtcblxuICAgIHN1cGVyLl9vbkZlYXR1cmVBZGRlZCh0eXBlTmFtZSk7XG5cbiAgICBpZiAodHlwZU5hbWUgPT09ICdUZXh0VG9TcGVlY2hGZWF0dXJlJykge1xuICAgICAgdGhpcy5faG9zdC5UZXh0VG9TcGVlY2hGZWF0dXJlLnNwZWVjaG1hcmtPZmZzZXQgPVxuICAgICAgICAtdGhpcy5fdmlzZW1lTGVhZFRpbWUgfHwgMDtcbiAgICB9XG4gIH1cblxuICBfb25MYXllckFkZGVkKHtuYW1lfSkge1xuICAgIHN1cGVyLl9vbkxheWVyQWRkZWQoe25hbWV9KTtcblxuICAgIC8vIFZhbGlkYXRlIHRoZSB2aXNlbWUgYW5pbWF0aW9uXG4gICAgaWYgKHRoaXMuX3Zpc2VtZUxheWVyc1tuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlclZpc2VtZUFuaW1hdGlvbihuYW1lLCB0aGlzLl92aXNlbWVMYXllcnNbbmFtZV0pO1xuICAgIH1cbiAgfVxuXG4gIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XG4gICAgc3VwZXIuX29uQW5pbWF0aW9uQWRkZWQoe2xheWVyTmFtZX0pO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhlIHZpc2VtZSBhbmltYXRpb25cbiAgICBpZiAodGhpcy5fdmlzZW1lTGF5ZXJzW2xheWVyTmFtZV0gPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyVmlzZW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgdGhpcy5fdmlzZW1lTGF5ZXJzW2xheWVyTmFtZV0pO1xuICAgIH1cbiAgfVxuXG4gIF9vblBsYXkoKSB7XG4gICAgLy8gVHVybiBvbiB0aGUgbGF5ZXIgd2VpZ2h0c1xuICAgIHRoaXMuZW5hYmxlKCk7XG5cbiAgICAvLyBTZXQgdGhlIGN1cnJlbnQgYW5pbWF0aW9uc1xuICAgIFt0aGlzLl92aXNlbWVMYXllcnMsIHRoaXMuX3RhbGtpbmdMYXllcnNdLmZvckVhY2gobGF5ZXJzID0+IHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGxheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZV0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlKSB7XG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnJlc3VtZUFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIF9vblBhdXNlKCkge1xuICAgIHRoaXMuX29uU3RvcCgpO1xuICB9XG5cbiAgX29uUmVzdW1lKCkge1xuICAgIHRoaXMuX29uUGxheSgpO1xuICB9XG5cbiAgX29uU3RvcCgpIHtcbiAgICAvLyBUdXJuIG9mZiB0aGUgbGF5ZXIgd2VpZ2h0c1xuICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgLy8gUGF1c2UgdGhlIGN1cnJlbnQgYW5pbWF0aW9uc1xuICAgIFt0aGlzLl92aXNlbWVMYXllcnMsIHRoaXMuX3RhbGtpbmdMYXllcnNdLmZvckVhY2gobGF5ZXJzID0+IHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGxheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZV0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXS5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdLmlzQWN0aXZlKSB7XG4gICAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBhdXNlQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdmlzZW1lIGV2ZW50cyBhcmUgY2F1Z2h0LCB0dXJuIG9uIHdlaWdodCBvZiB0aGUgbmV3IHZpc2VtZSBmb3IgdGhlIGR1cmF0aW9uXG4gICAqIG9mIHRoZSBzcGVlY2ggbWFyaywgdGhlbiB0dXJuIHdlaWdodCBiYWNrIG9mZi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IC0gRXZlbnQgZGF0YSBwYXNzZWQgZnJvbSB0aGUgc3BlZWNoLlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQubWFyayAtIFNwZWVjaG1hcmsgb2JqZWN0LlxuICAgKi9cbiAgYXN5bmMgX29uVmlzZW1lKHttYXJrfSkge1xuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX3Zpc2VtZUxheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbU5hbWVdKSA9PiB7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGNhbiBiZSBtYW5pcHVsYXRlZFxuICAgICAgY29uc3Qge2lzQWN0aXZlLCB2aXNlbWVNYXB9ID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgIGFuaW1OYW1lXG4gICAgICBdO1xuXG4gICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGFrZSB2YXJpYWJsZXMgZnJvbSB0aGUgdmlzZW1lIGlmIHRoZXkgZXhpc3QgYW5kIGRlZmF1bHQgdG8gdGhlIGxheWVyXG4gICAgICBjb25zdCB7XG4gICAgICAgIG5hbWU6IHZpc2VtZSxcbiAgICAgICAgaXNBY3RpdmU6IGlzVmlzZW1lQWN0aXZlLFxuICAgICAgICBkZWNheVJhdGUsXG4gICAgICAgIGJsZW5kVGltZSxcbiAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgIG92ZXJyaWRlV2VpZ2h0LFxuICAgICAgfSA9IHtcbiAgICAgICAgLi4udGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLFxuICAgICAgICAuLi52aXNlbWVNYXBbbWFyay52YWx1ZV0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB2aXNlbWVOYW1lcyA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZE5hbWVzKFxuICAgICAgICBsYXllck5hbWUsXG4gICAgICAgIGFuaW1OYW1lXG4gICAgICApO1xuXG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIG5ldyB2aXNlbWUgaGFzIGFuIGFjdGl2ZSBmcmVlQmxlbmQgd2VpZ2h0XG4gICAgICBpZiAoIWlzVmlzZW1lQWN0aXZlIHx8ICF2aXNlbWVOYW1lcy5pbmNsdWRlcyh2aXNlbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRmluZCB0aGUgcGVhayB3ZWlnaHQgZm9yIHRoZSB2aXNlbWUgYW5kIHRoZSBhbW91bnQgb2YgdGltZSBpdCBzaG91bGRcbiAgICAgIC8vIHRha2UgdG8gcmVhY2ggaXRcbiAgICAgIGxldCB3ZWlnaHQgPSAxO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBtYXJrLmR1cmF0aW9uIC8gMTAwMDtcbiAgICAgIGlmIChkdXJhdGlvbiA8IGJsZW5kVGltZSkge1xuICAgICAgICBjb25zdCBsZXJwRmFjdG9yID0gYmxlbmRUaW1lID4gMCA/IGR1cmF0aW9uIC8gYmxlbmRUaW1lIDogMTtcbiAgICAgICAgd2VpZ2h0ID1cbiAgICAgICAgICBvdmVycmlkZVdlaWdodCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG92ZXJyaWRlV2VpZ2h0XG4gICAgICAgICAgICA6IE1hdGhVdGlscy5sZXJwKDAsIDEsIGxlcnBGYWN0b3IpO1xuICAgICAgfVxuICAgICAgY29uc3QgYmxlbmRJblRpbWUgPSBNYXRoLm1pbihkdXJhdGlvbiwgYmxlbmRUaW1lKTtcblxuICAgICAgLy8gRmluZCB0aGUgYW1vdW50IGFuZCB0aW1lIHZpc2VtZSB3aWxsIGJlIGhlbGQgZm9yXG4gICAgICBjb25zdCBob2xkVGltZSA9IGR1cmF0aW9uIC0gYmxlbmRUaW1lO1xuXG4gICAgICBpZiAoaG9sZFRpbWUgPCAwKSB7XG4gICAgICAgIC8vIFBlcmZvcm0gaW4gLT4gb3V0IGFuaW1hdGlvblxuICAgICAgICB0aGlzLl9hbmltYXRlU2ltcGxlVmlzZW1lKFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltTmFtZSxcbiAgICAgICAgICB2aXNlbWUsXG4gICAgICAgICAgd2VpZ2h0LFxuICAgICAgICAgIGJsZW5kSW5UaW1lLFxuICAgICAgICAgIGJsZW5kVGltZSxcbiAgICAgICAgICBlYXNpbmdGblxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGVycEZhY3RvciA9XG4gICAgICAgICAgZGVjYXlSYXRlLnNlY29uZHMgPiAwID8gaG9sZFRpbWUgLyBkZWNheVJhdGUuc2Vjb25kcyA6IDE7XG4gICAgICAgIC8vIFBlcmZvcm0gaW4gLT4gaG9sZCAtPiBvdXQgYW5pbWF0aW9uXG4gICAgICAgIGNvbnN0IGRlY2F5V2VpZ2h0ID0gTWF0aFV0aWxzLmxlcnAoXG4gICAgICAgICAgd2VpZ2h0LFxuICAgICAgICAgIHdlaWdodCAqIGRlY2F5UmF0ZS5hbW91bnQsXG4gICAgICAgICAgTWF0aC5taW4oMSwgbGVycEZhY3RvcilcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fYW5pbWF0ZUhlbGRWaXNlbWUoXG4gICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgIGFuaW1OYW1lLFxuICAgICAgICAgIHZpc2VtZSxcbiAgICAgICAgICB3ZWlnaHQsXG4gICAgICAgICAgZGVjYXlXZWlnaHQsXG4gICAgICAgICAgYmxlbmRJblRpbWUsXG4gICAgICAgICAgaG9sZFRpbWUsXG4gICAgICAgICAgYmxlbmRUaW1lLFxuICAgICAgICAgIGVhc2luZ0ZuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQW5pbWF0ZSBhIHZpc2VtZSBibGVuZCB3ZWlnaHQgdG93YXJkcyBhIHZhbHVlIGFuZCB0aGVuIGJhY2sgdG8gemVyby5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIHZpc2VtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1OYW1lIC0gTmFtZSBvZiB0aGUgZnJlZWJsZW5kIGFuaW1hdGlvbiB0aGF0IGNvbnRhaW5zXG4gICAqIHRoZSB2aXNlbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2aXNlbWVOYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgd2VpZ2h0IHRvIG1hbmlwdWxhdGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBQZWFrIHdlaWdodCB0byBhbmltYXRlIHRvd2FyZHMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBibGVuZEluVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZVxuICAgKiBwZWFrIHdlaWdodC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGJsZW5kT3V0VGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIGFuaW1hdGUgYmFja1xuICAgKiB0byB6ZXJvIGFmdGVyIHJlYWNoaW5nIHRoZSBwZWFrIHdlaWdodC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGR1cmluZyBhbmltYXRpb24uXG4gICAqL1xuICBfYW5pbWF0ZVNpbXBsZVZpc2VtZShcbiAgICBsYXllck5hbWUsXG4gICAgYW5pbU5hbWUsXG4gICAgdmlzZW1lTmFtZSxcbiAgICBwZWFrV2VpZ2h0LFxuICAgIGJsZW5kSW5UaW1lLFxuICAgIGJsZW5kT3V0VGltZSxcbiAgICBlYXNpbmdGblxuICApIHtcbiAgICAvLyBBbmltYXRlIHRvd2FyZHMgdGhlIHBlYWsgdmFsdWVcbiAgICBjb25zdCB3ZWlnaHRQcm9taXNlID0gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxuICAgICAgbGF5ZXJOYW1lLFxuICAgICAgYW5pbU5hbWUsXG4gICAgICB2aXNlbWVOYW1lLFxuICAgICAgcGVha1dlaWdodCxcbiAgICAgIGJsZW5kSW5UaW1lLFxuICAgICAgZWFzaW5nRm5cbiAgICApO1xuXG4gICAgLy8gQW5pbWF0ZSBiYWNrIHRvIHplcm8gaWYgdGhlcmUgd2FzIG5vIHdlaWdodCBpbnRlcnJ1cHRpb25cbiAgICB3ZWlnaHRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKCF3ZWlnaHRQcm9taXNlLmNhbmNlbGVkKSB7XG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgICBsYXllck5hbWUsXG4gICAgICAgICAgYW5pbU5hbWUsXG4gICAgICAgICAgdmlzZW1lTmFtZSxcbiAgICAgICAgICAwLFxuICAgICAgICAgIGJsZW5kT3V0VGltZSxcbiAgICAgICAgICBlYXNpbmdGblxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuaW1hdGUgYSB2aXNlbWUgYmxlbmQgd2VpZ2h0IHRvd2FyZHMgYSB2YWx1ZSBhbmQgdGhlbiBiYWNrIHRvIHplcm8uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSB2aXNlbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltTmFtZSAtIE5hbWUgb2YgdGhlIGZyZWVibGVuZCBhbmltYXRpb24gdGhhdCBjb250YWluc1xuICAgKiB0aGUgdmlzZW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmlzZW1lTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHdlaWdodCB0byBtYW5pcHVsYXRlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGVha1dlaWdodCAtIFBlYWsgd2VpZ2h0IHRvIGFuaW1hdGUgdG93YXJkcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlY2F5V2VpZ2h0IC0gV2VpZ2h0IHRvIGFuaW1hdGUgdG93YXJkcyBhZnRlciByZWFjaGluZyB0aGVcbiAgICogcGVhayB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBibGVuZEluVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZVxuICAgKiBwZWFrIHdlaWdodC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGhvbGRUaW1lIC0gQW1vdW50IG9mIHRpbWUgaXQgc2hvdWxkIHRha2UgdG8gcmVhY2ggdGhlIGRlY2F5XG4gICAqIHdlaWdodCBhZnRlciB0aGUgcGVhayB3ZWlnaHQgaGFzIGJlZW4gcmVhY2hlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGJsZW5kT3V0VGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHNob3VsZCB0YWtlIHRvIGFuaW1hdGUgYmFja1xuICAgKiB0byB6ZXJvIGFmdGVyIHJlYWNoaW5nIHRoZSBkZWNheSB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBkdXJpbmcgYW5pbWF0aW9uLlxuICAgKi9cbiAgYXN5bmMgX2FuaW1hdGVIZWxkVmlzZW1lKFxuICAgIGxheWVyTmFtZSxcbiAgICBhbmltTmFtZSxcbiAgICB2aXNlbWVOYW1lLFxuICAgIHBlYWtXZWlnaHQsXG4gICAgZGVjYXlXZWlnaHQsXG4gICAgYmxlbmRJblRpbWUsXG4gICAgaG9sZFRpbWUsXG4gICAgYmxlbmRPdXRUaW1lLFxuICAgIGVhc2luZ0ZuXG4gICkge1xuICAgIC8vIEFuaW1hdGUgdG93YXJkcyB0aGUgcGVhayB2YWx1ZVxuICAgIGNvbnN0IHN0YXJ0UHJvbWlzZSA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgIGxheWVyTmFtZSxcbiAgICAgIGFuaW1OYW1lLFxuICAgICAgdmlzZW1lTmFtZSxcbiAgICAgIHBlYWtXZWlnaHQsXG4gICAgICBibGVuZEluVGltZSxcbiAgICAgIGVhc2luZ0ZuXG4gICAgKTtcblxuICAgIGF3YWl0IHN0YXJ0UHJvbWlzZTtcblxuICAgIGlmICghc3RhcnRQcm9taXNlLmNhbmNlbGVkKSB7XG4gICAgICAvLyBBbmltYXRlIHRvd2FyZHMgdGhlIGRlY2F5IHZhbHVlIGlmIHRoZXJlIHdhcyBubyB3ZWlnaHQgaW50ZXJydXB0aW9uXG4gICAgICBjb25zdCBob2xkUHJvbWlzZSA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICBhbmltTmFtZSxcbiAgICAgICAgdmlzZW1lTmFtZSxcbiAgICAgICAgZGVjYXlXZWlnaHQsXG4gICAgICAgIGhvbGRUaW1lLFxuICAgICAgICBlYXNpbmdGblxuICAgICAgKTtcblxuICAgICAgYXdhaXQgaG9sZFByb21pc2U7XG5cbiAgICAgIGlmICghaG9sZFByb21pc2UuY2FuY2VsZWQpIHtcbiAgICAgICAgLy8gQW5pbWF0ZSBiYWNrIHRvIHplcm8gaWYgdGhlcmUgd2FzIG5vIHdlaWdodCBpbnRlcnJ1cHRpb25cbiAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxuICAgICAgICAgIGxheWVyTmFtZSxcbiAgICAgICAgICBhbmltTmFtZSxcbiAgICAgICAgICB2aXNlbWVOYW1lLFxuICAgICAgICAgIDAsXG4gICAgICAgICAgYmxlbmRPdXRUaW1lLFxuICAgICAgICAgIGVhc2luZ0ZuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgdG8gbmVnYXRpdmVseSBvZmZzZXQgc3BlZWNobWFya1xuICAgKiBlbWlzc2lvbiBieS5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB2aXNlbWVMZWFkVGltZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzZW1lTGVhZFRpbWU7XG4gIH1cblxuICBzZXQgdmlzZW1lTGVhZFRpbWUoc2Vjb25kcykge1xuICAgIHRoaXMuX3Zpc2VtZUxlYWRUaW1lID0gc2Vjb25kcztcblxuICAgIGlmICh0aGlzLl9ob3N0LlRleHRUb1NwZWVjaEZlYXR1cmUpIHtcbiAgICAgIHRoaXMuX2hvc3QuVGV4dFRvU3BlZWNoRmVhdHVyZS5zcGVlY2htYXJrT2Zmc2V0ID0gLXNlY29uZHM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgb3ducyBhIGZyZWVCbGVuZCBhbmltYXRpb25cbiAgICogd2l0aCBibGVuZFdlaWdodHMgY29ycmVzcG9uZGluZyB0byB2aXNlbWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8ga2VlcCB0cmFjayBvZi5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5pbWF0aW9uPSd2aXNlbWVzJ10gLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gb24gdGhlXG4gICAqIGxheWVyIHRoYXQgd2lsbCBiZSBwbGF5ZWQgZHVyaW5nIHNwZWVjaC4gVGhpcyBhbmltYXRpb24gbXVzdCBiZSBvZiB0eXBlXG4gICAqIGZyZWVCbGVuZC5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBkZWNheVJhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWNheVJhdGUuYW1vdW50PTAuNV0gLSBUaGUgcGVyY2VudGFnZSB0byBkZWNyZWFzZSB0aGUgdmlzZW1lJ3NcbiAgICogcGVhayB2YWx1ZSBieSBvdmVyIHRpbWUgb25jZSB0aGUgcGVhayB2YWx1ZSBoYXMgYmVlbiByZWFjaGVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RlY2F5UmF0ZS5zZWNvbmRzPTAuNV0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0b1xuICAgKiBkZWNyZWFzZSB0aGUgdmlzZW1lJ3Mgd2VpZ2h0IG9uY2UgaXQgaGFzIHJlYWNoZWQgaXRzIHBlYWsgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gW29wdGlvbnMuYmxlbmRUaW1lPVtMaXBzeW5jRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lXXtAbGluayBMaXBzeW5jRmVhdHVyZSNERUZBVUxUX0xBWUVSX09QVElPTlMjYmxlbmRUaW1lfV0gLVxuICAgKiBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHVzZSB3aGVuIG1hbmlwdWxhdGluZyBhbmltYXRpb24gYmxlbmRXZWlnaHRzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXG4gICAqIG1hbmlwdWxhdGluZyBhbmltYXRpb24gYmxlbmRXZWlnaHRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMudmlzZW1lTWFwPURlZmF1bHRWaXNlbWVNYXBdIC0gT2JqZWN0IGNvbnRhaW5pbmcga2V5L3ZhbHVlIHBhaXJzIG9mXG4gICAqIFBvbGx5IHZpc2VtZSBuYW1lcyBtYXBwZWQgdG8gb2JqZWN0cyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBjb3JyZXNwb25kaW5nXG4gICAqIGFuaW1hdGlvbiBibGVuZFdlaWdodCBhbmQgYW55IG90aGVyIGFuaW1hdGlvbiBvcHRpb25zIHRvIHVzZSBzdWNoIGFzIHZpc2VtZVxuICAgKiBzcGVjaWZpYyBibGVuZCB0aW1lcyBhbmQgZWFzaW5nIGZ1bmN0aW9ucy5cbiAgICovXG4gIHJlZ2lzdGVyVmlzZW1lTGF5ZXIoXG4gICAgbGF5ZXJOYW1lLFxuICAgIHtcbiAgICAgIGFuaW1hdGlvbiA9ICd2aXNlbWVzJyxcbiAgICAgIGRlY2F5UmF0ZSA9IHthbW91bnQ6IDAuNSwgc2Vjb25kczogMC41fSxcbiAgICAgIGJsZW5kVGltZSA9IExpcHN5bmNGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWUsXG4gICAgICBlYXNpbmdGbixcbiAgICAgIHZpc2VtZU1hcCA9IERlZmF1bHRWaXNlbWVNYXAsXG4gICAgfSA9IHt9XG4gICkge1xuICAgIC8vIFJlZ2lzdGVyIHRoZSBsYXllciBhbmQgYW5pbWF0aW9uXG4gICAgdGhpcy5yZWdpc3RlckxheWVyKGxheWVyTmFtZSwge1xuICAgICAgZGVjYXlSYXRlLFxuICAgICAgYmxlbmRUaW1lLFxuICAgICAgZWFzaW5nRm4sXG4gICAgICBhbmltYXRpb25zOiB7W2FuaW1hdGlvbl06IHt2aXNlbWVNYXB9fSxcbiAgICB9KTtcbiAgICB0aGlzLl92aXNlbWVMYXllcnNbbGF5ZXJOYW1lXSA9IGFuaW1hdGlvbjtcblxuICAgIC8vIFZhbGlkYXRlIHRoZSB2aXNlbWUgYW5pbWF0aW9uXG4gICAgdGhpcy5fcmVnaXN0ZXJWaXNlbWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGtlZXBpbmcgdHJhY2sgb2YgYW4gYW5pbWF0aW9uIGxheWVyIHRoYXQgY29udGFpbnMgYSBsb29waW5nIGFuaW1hdGlvblxuICAgKiB0byBiZSBwbGF5ZWQgZHVyaW5nIHNwZWVjaC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuaW1hdGlvbj0nc3RhbmRfdGFsayddIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIG9uIHRoZVxuICAgKiBsYXllciB0aGF0IHdpbGwgYmUgcGxheWVkIGR1cmluZyBzcGVlY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5ibGVuZFRpbWU9W0xpcHN5bmNGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWVde0BsaW5rIExpcHN5bmNGZWF0dXJlI0RFRkFVTFRfTEFZRVJfT1BUSU9OUyNibGVuZFRpbWV9XSAtXG4gICAqIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIHRoZSBsYXllcidzIHdlaWdodHMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLmVhc2luZ0ZuIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW5cbiAgICogbWFuaXB1bGF0aW5nIHRoZSBsYXllcidzIHdlaWdodHMuXG4gICAqL1xuICByZWdpc3RlclRhbGtpbmdMYXllcihcbiAgICBsYXllck5hbWUsXG4gICAge1xuICAgICAgYW5pbWF0aW9uID0gJ3N0YW5kX3RhbGsnLFxuICAgICAgYmxlbmRUaW1lID0gTGlwc3luY0ZlYXR1cmUuREVGQVVMVF9MQVlFUl9PUFRJT05TLmJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuLFxuICAgIH0gPSB7fVxuICApIHtcbiAgICAvLyBSZWdpc3RlciB0aGUgbGF5ZXIgYW5kIGFuaW1hdGlvblxuICAgIHRoaXMucmVnaXN0ZXJMYXllcihsYXllck5hbWUsIHtcbiAgICAgIGJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuLFxuICAgICAgYW5pbWF0aW9uczoge1thbmltYXRpb25dOiB7fX0sXG4gICAgfSk7XG4gICAgdGhpcy5fdGFsa2luZ0xheWVyc1tsYXllck5hbWVdID0gYW5pbWF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuYW1lc3BhY2UgdG8gdGhlIGhvc3Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBjb250YWluIHByb3BlcnRpZXNcbiAgICogYW5kIG1ldGhvZHMgZnJvbSB0aGUgZmVhdHVyZSB0aGF0IHVzZXJzIG9mIHRoZSBob3N0IG5lZWQgYWNjZXNzIHRvLlxuICAgKlxuICAgKiBAc2VlIExpcHN5bmNGZWF0dXJlXG4gICAqL1xuICBpbnN0YWxsQXBpKCkge1xuICAgIC8qKlxuICAgICAqIEBpbm5lclxuICAgICAqIEBuYW1lc3BhY2UgTGlwc3luY0ZlYXR1cmVcbiAgICAgKi9cbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgKiBAbmFtZSByZWdpc3RlckxheWVyXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI3JlZ2lzdGVyTGF5ZXJcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxuICAgICAqIEBuYW1lIHJlZ2lzdGVyQW5pbWF0aW9uXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI3JlZ2lzdGVyQW5pbWF0aW9uXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgKiBAbmFtZSBzZXRMYXllcldlaWdodHNcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2Ujc2V0TGF5ZXJXZWlnaHRzXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgKiBAbmFtZSBlbmFibGVcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQHNlZSBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UjZW5hYmxlXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTGlwc3luY0ZlYXR1cmVcbiAgICAgKiBAbmFtZSBkaXNhYmxlXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBzZWUgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlI2Rpc2FibGVcbiAgICAgKi9cblxuICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBMaXBzeW5jRmVhdHVyZVxuICAgICAgICogQGluc3RhbmNlXG4gICAgICAgKiBAbWV0aG9kXG4gICAgICAgKiBAc2VlIGNvcmUvTGlwc3luY0ZlYXR1cmUjcmVnaXN0ZXJWaXNlbWVMYXllclxuICAgICAgICovXG4gICAgICByZWdpc3RlclZpc2VtZUxheWVyOiB0aGlzLnJlZ2lzdGVyVmlzZW1lTGF5ZXIuYmluZCh0aGlzKSxcbiAgICAgIC8qKlxuICAgICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9MaXBzeW5jRmVhdHVyZSNyZWdpc3RlclRhbGtpbmdMYXllclxuICAgICAgICovXG4gICAgICByZWdpc3RlclRhbGtpbmdMYXllcjogdGhpcy5yZWdpc3RlclRhbGtpbmdMYXllci5iaW5kKHRoaXMpLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIExpcHN5bmNGZWF0dXJlXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG5hbWUgdmlzZW1lTGVhZFRpbWVcbiAgICAgKiBAc2VlIGNvcmUvTGlwc3luY0ZlYXR1cmUjdmlzZW1lTGVhZFRpbWVcbiAgICAgKi9cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXBpLCAndmlzZW1lTGVhZFRpbWUnLCB7XG4gICAgICBnZXQ6ICgpID0+IHRoaXMudmlzZW1lTGVhZFRpbWUsXG4gICAgICBzZXQ6IHNlY29uZHMgPT4ge1xuICAgICAgICB0aGlzLnZpc2VtZUxlYWRUaW1lID0gc2Vjb25kcztcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXBpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpcHN5bmNGZWF0dXJlO1xuZXhwb3J0IHtEZWZhdWx0VmlzZW1lTWFwfTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4vLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtY2xhc3Nlcy1wZXItZmlsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHkgKi9cbmltcG9ydCBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlIGZyb20gJ2NvcmUvYXdzcGFjay9UZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlJztcblxuLyoqXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgdGhhdCByZWdpc3RlcnMgY2FsbGJhY2sgbWV0aG9kIHdoZW4gYSBzc21sIHNwZWVjaG1hcmsgZXZlbnQgaXMgZW1pdHRlZC5cbiAqXG4gKiBAaW50ZXJmYWNlXG4gKiBAZXh0ZW5kcyBUZXh0VG9TcGVlY2hGZWF0dXJlRGVwZW5kZW50SW50ZXJmYWNlXG4gKi9cbmNsYXNzIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlIGV4dGVuZHMgVGV4dFRvU3BlZWNoRmVhdHVyZURlcGVuZGVudEludGVyZmFjZSB7XG4gIC8qKlxuICAgKiBXaGVuIHNzbWwgZXZlbnRzIGFyZSBjYXVnaHQsIHRoaXMgd2lsbCB0cnkgdG8gcGFyc2UgdGhlIHNwZWVjaCBtYXJrIHZhbHVlIGFuZCBleGVjdXRlIGFueSBmdW5jdGlvbiB3aGljaCBtZWV0cyBjcml0ZXJpYSBkZWZpbmVkIGluIHRoZSB2YWx1ZS5cbiAgICogU3BlZWNoIG1hcmsgdmFsdWUgd2lsbCBiZSB0cmVhdGVkIGFzIHN0cmluZ2lmaWVkIGpzb24gZm9ybWF0IGNvbnRhaW5pbmcgcmVxdWlyZWQgZmVhdHVyZSBuYW1lLCBmdW5jdGlvbiBuYW1lIGFuZCBhcmd1bWVudCBhcnJheSB0byBwYXNzIGluLlxuICAgKiBFeGFtcGxlIHNwZWVjaCBtYXJrIHZhbHVlIG1pZ2h0IGxvb2sgbGlrZTogJ3tcImZlYXR1cmVcIjpcIkdlc3R1cmVGZWF0dXJlXCIsIFwibWV0aG9kXCI6XCJzd2l0Y2hUb0dlc3R1cmVcIiwgXCJhcmdzXCI6W1wiZ2VucmljQVwiLCAwLjVdfSdcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50IC0gRXZlbnQgZGF0YSBwYXNzZWQgZnJvbSB0aGUgc3BlZWNoLlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnQubWFyayAtIFNwZWVjaG1hcmsgb2JqZWN0LlxuICAgKi9cbiAgX29uU3NtbCh7bWFya30pIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlfVxuICAgKiBhbmQgZXh0ZW5kcyBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBCYXNlQ2xhc3MgLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlfS5cbiAgICovXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MpIHtcbiAgICBjb25zdCBQYXJlbnRDbGFzcyA9IFRleHRUb1NwZWVjaEZlYXR1cmVEZXBlbmRlbnRJbnRlcmZhY2UuTWl4aW4oQmFzZUNsYXNzKTtcbiAgICBjb25zdCBTU01MU3BlZWNoTWFya01peGluID0gY2xhc3MgZXh0ZW5kcyBQYXJlbnRDbGFzcyB7XG4gICAgICBfb25Tc21sKHttYXJrfSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHtmZWF0dXJlLCBtZXRob2QsIGFyZ3N9ID0gSlNPTi5wYXJzZShtYXJrLnZhbHVlKTtcbiAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5uYW1lID09PSBmZWF0dXJlKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXNbbWV0aG9kXTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAmJiB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRnVuY3Rpb24gJHttZXRob2R9IGRvZXMgbm90IGV4aXN0IHdpdGhpbiBmZWF0dXJlICR7ZmVhdHVyZX1gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaChlKSB7fVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gU1NNTFNwZWVjaE1hcmtNaXhpbjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTU01MU3BlZWNobWFya0ludGVyZmFjZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlIGZyb20gJy4vYW5pbXBhY2svTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlJztcbmltcG9ydCBTU01MU3BlZWNobWFya0ludGVyZmFjZSBmcm9tICcuL2F3c3BhY2svU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UnO1xuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcbmltcG9ydCBEZWZlcnJlZCBmcm9tICcuL0RlZmVycmVkJztcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcblxuY29uc3QgRGVmYXVsdEdlc3R1cmVXb3JkcyA9IHtcbiAgYmlnOiBbXG4gICAgJ2FkZCcsXG4gICAgJ2Fib3ZlJyxcbiAgICAnYXV0aG9yaXR5JyxcbiAgICAnYmlnJyxcbiAgICAnY292ZXInLFxuICAgICdmdWxsJyxcbiAgICAnZmx5JyxcbiAgICAnZ3JvdycsXG4gICAgJ2dyb3d0aCcsXG4gICAgJ2hpZ2gnLFxuICAgICdodWdlJyxcbiAgICAnaW5jcmVhc2UnLFxuICAgICdtYWpvcicsXG4gICAgJ21ham9yaXR5JyxcbiAgICAnbGFyZ2UnLFxuICAgICdsZWFkZXInLFxuICAgICdsb3QnLFxuICAgICdyYWlzZScsXG4gICAgJ3Jpc2UnLFxuICAgICd0YWxsJyxcbiAgXSxcbiAgaGVhcnQ6IFtcbiAgICAnYWNjZXB0JyxcbiAgICAnYWRtaXQnLFxuICAgICdiZWxpZXZlJyxcbiAgICAnY2FyZScsXG4gICAgJ2ZlZWxpbmcnLFxuICAgICdmZWVsJyxcbiAgICAnZnJpZW5kJyxcbiAgICAnZ3JhdGVmdWwnLFxuICAgICdoYXBweScsXG4gICAgJ2hlYXJ0JyxcbiAgICAnaHVtYW4nLFxuICAgICdwYWluJyxcbiAgICAnc2F2ZScsXG4gICAgJ3NhZmUnLFxuICAgICdraW5kJyxcbiAgICAnbG92ZScsXG4gIF0sXG4gIGluOiBbXG4gICAgJ2luY2x1ZGUnLFxuICAgICdpbmNsdWRpbmcnLFxuICAgICdpbnNpZGUnLFxuICAgICdpbnRvJyxcbiAgICAnbm93JyxcbiAgICAnbmVhcicsXG4gICAgJ25lYXJlc3QnLFxuICAgICdjbG9zZXN0JyxcbiAgICAndGhlcmVpbicsXG4gICAgJ3dpdGhpbicsXG4gIF0sXG4gIG1hbnk6IFtcbiAgICAnYWxsJyxcbiAgICAnYWx3YXlzJyxcbiAgICAnYW55JyxcbiAgICAnYW55b25lJyxcbiAgICAnYW1vbmcnLFxuICAgICdhcmVhJyxcbiAgICAnYXJvdW5kJyxcbiAgICAnYmVhdXRpZnVsJyxcbiAgICAnZW50aXJlJyxcbiAgICAnZW52aXJvbm1lbnQnLFxuICAgICdlbnZpcm9ubWVudHMnLFxuICAgICdlbnZpcm9ubWVudGFsJyxcbiAgICAnZXZlcnlib2R5JyxcbiAgICAnZXZlcnlvbmUnLFxuICAgICdldmVyeXRoaW5nJyxcbiAgICAnYXVkaWVuY2UnLFxuICAgICd0b3RhbCcsXG4gICAgJ2dyb3VwJyxcbiAgICAnZ3JvdXBzJyxcbiAgICAnbWlsbGlvbicsXG4gICAgJ21pbGxpb25zJyxcbiAgICAnb3RoZXJzJyxcbiAgICAnYmlsbGlvbicsXG4gICAgJ2JpbGxpb25zJyxcbiAgICAnaHVuZHJlZCcsXG4gICAgJ2h1bmRyZWRzJyxcbiAgICAnbWFueScsXG4gICAgJ3Rob3VzYW5kJyxcbiAgICAndGhvdXNhbmRzJyxcbiAgICAnd29ybGQnLFxuICAgICd3b3JsZHMnLFxuICAgICdvdXRzaWRlJyxcbiAgICAncmV2ZWFsJyxcbiAgXSxcbiAgbW92ZW1lbnQ6IFtcbiAgICAnYXdheScsXG4gICAgJ2Fjcm9zcycsXG4gICAgJ2FoZWFkJyxcbiAgICAnYWxvbmcnLFxuICAgICdmYXInLFxuICAgICdmYXN0JyxcbiAgICAnZm9sbG93JyxcbiAgICAnZ28nLFxuICAgICdsZWF2ZScsXG4gICAgJ21vdmUnLFxuICAgICdtb3ZlbWVudCcsXG4gICAgJ3Rocm91Z2gnLFxuICAgICd0aHJvdWdob3V0JyxcbiAgICAndG93YXJkJyxcbiAgICAndHJhdmVsJyxcbiAgICAndHVybmVkJyxcbiAgICAncGFzc2VkJyxcbiAgXSxcbiAgb25lOiBbXG4gICAgJ3NpbmdsZScsXG4gICAgJ29uZScsXG4gICAgJ29uY2UnLFxuICAgICdmaXJzdCcsXG4gICAgJ2ZpcnN0bHknLFxuICAgICdvbmx5JyxcbiAgICAnc29sbycsXG4gICAgJ3dhcm5lZCcsXG4gICAgJ3RydWx5JyxcbiAgICAndXAnLFxuICAgICdhbG9uZScsXG4gIF0sXG4gIGFnZ3Jlc3NpdmU6IFtcbiAgICAncG93ZXInLFxuICAgICdwb3dlcnMnLFxuICAgICdwb3dlcmZ1bCcsXG4gICAgJ2Fzc2VydCcsXG4gICAgJ2Fzc2VydGl2ZScsXG4gICAgJ3N0cm9uZycsXG4gICAgJ3N0cm9uZ2VyJyxcbiAgICAnc3Ryb25nZXN0JyxcbiAgICAnc3RyZW5ndGgnLFxuICAgICdmbGV4JyxcbiAgICAnZGFuZycsXG4gICAgJ2RhbW4nLFxuICAgICdkYW1uaXQnLFxuICAgICdkYXJuJyxcbiAgICAnc2h1Y2tzJyxcbiAgICAnZG9oJyxcbiAgICAnZHJhdCcsXG4gICAgJ2FuZ3J5JyxcbiAgICAnYW5ncmllcicsXG4gICAgJ2FuZ3JpZXN0JyxcbiAgICAnYWdncmVzc2l2ZScsXG4gICAgJ2Fubm95ZWQnLFxuICAgICdhbm5veWluZycsXG4gICAgJ2F0dGFjaycsXG4gICAgJ2F0dGFja2luZycsXG4gICAgJ29mZmVuc2UnLFxuICAgICdvZmZlbnNpdmUnLFxuICAgICdiYXR0bGUnLFxuICBdLFxuICB5b3U6IFsneW91JywgJ3lhbGwnLCBcInknYWxsXCIsICd5b3VyJywgJ3lvdXJzJywgJ3Rob3UnLCAndGh5J10sXG4gIGRlZmVuc2U6IFtcbiAgICAnZGVmZW5zZScsXG4gICAgJ2ZlYXInLFxuICAgICdyZXB1bHNlZCcsXG4gICAgJ3NjYXJlZCcsXG4gICAgJ3NjYXJ5JyxcbiAgICAnc2NhcmllcicsXG4gICAgJ3NjYXJpZXN0JyxcbiAgICAnZmVhcmZ1bCcsXG4gICAgJ2FmcmFpZCcsXG4gICAgJ2Nvd2VyJyxcbiAgICAnY293ZXJzJyxcbiAgICAnY293ZXJpbmcnLFxuICAgICdoaWRlb3VzJyxcbiAgICAnZG9vbWVkJyxcbiAgICAndGVycmlmaWVkJyxcbiAgICAndGVycmlmeScsXG4gICAgJ3RlcnJpZnlpbmcnLFxuICAgICd0ZXJyaWZpZXMnLFxuICAgICdzcG9va3knLFxuICAgICdzcG9va2llcicsXG4gICAgJ3Nwb29raWVzdCcsXG4gIF0sXG4gIHdhdmU6IFtcbiAgICAnaGVsbG8nLFxuICAgICdoaScsXG4gICAgJ2hpeWEnLFxuICAgICdob3dkeScsXG4gICAgJ3dlbGNvbWUnLFxuICAgICdhbG9oYScsXG4gICAgJ2hleWEnLFxuICAgICdoZXknLFxuICAgICdieWUnLFxuICAgICdnb29kYnllJyxcbiAgICAnaG9sYScsXG4gICAgJ2FkaW9zJyxcbiAgICAnY2hhbycsXG4gIF0sXG4gIHNlbGY6IFsnbXknLCAnSScsICdteXNlbGYnLCAnc2VsZicsIFwiSSd2ZVwiLCAnSXZlJywgJ21lJywgJ21pbmUnLCAnb3duJ10sXG59O1xuXG4vKipcbiAqIEdlc3R1cmUgYWxsb3dzIHlvdSB0byBwbGF5IGFuaW1hdGlvbnMgb24gZGVtYW5kIG9uIG9uZSBvciBtb3JlIGxheWVycyBmcm9tIHNjcmlwdFxuICogb3Igc3NtbC4gSWYgZ2VzdHVyZSBpcyBwbGF5ZWQgdGhhdCBpcyBhIFF1ZXVlU3RhdGUsIHRoZSBxdWV1ZSB3aWxsIGF1dG9tYXRpY2FsbHlcbiAqIGJlIHByb2dyZXNzZWQgYWZ0ZXIgYSBnaXZlbiBob2xkIHRpbWUgaWYgYSBsb29waW5nIHF1ZXVlZCBzdGF0ZSBpcyByZWFjaGVkLiBHZXN0dXJlXG4gKiBsYXllcnMgY2FuIG9wdGlvbmFsbHkgYmUgYXV0b21hdGljYWxseSBkaXNhYmxlZCB3aGVuIG5vIGdlc3R1cmUgYW5pbWF0aW9uIGlzXG4gKiBpbiBwcm9ncmVzcy5cbiAqXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlXG4gKiBAaW1wbGVtZW50cyBTU01MU3BlZWNobWFya0ludGVyZmFjZVxuICogQGltcGxlbWVudHMgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlXG4gKi9cbmNsYXNzIEdlc3R1cmVGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZS5taXgoXG4gIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlLk1peGluLFxuICBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuTWl4aW5cbikge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIGZvciB0aGUgZmVhdHVyZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmhvbGRUaW1lID0gM10gLSBBbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIHRoYXQgbXVzdFxuICAgKiBlbGFwc2UgYmVmb3JlIGFkdmFuY2luZyBhIGdlc3R1cmUgdGhhdCdzIGEge0BsaW5rIFF1ZXVlU3RhdGV9IHdoZW4gdGhlIGN1cnJlbnRcbiAgICogc3RhdGUgaW4gdGhlIHF1ZXVlIGlzIHNldCB0byBsb29wIGluZmluaXRlbHkuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5pbXVtSW50ZXJ2YWwgPSAwLjI1XSAtIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lXG4gICAqIGluIHNlY29uZHMgdGhhdCBtdXN0IGVsYXBzZSBiZWZvcmUgYW5vdGhlciBnZXN0dXJlIGNhbiBiZSBwbGF5ZWQuXG4gICAqIEBwYXJhbSAge09iamVjdH0gbGF5ZXJzIC0gQW4gb2JqZWN0IHRoYXQgbWFwcyBsYXllciBuYW1lcyB0byBsYXllciBvcHRpb25zLlxuICAgKiBUaGVzZSBhcmUgdGhlIGxheWVycyB0aGF0IHdpbGwgYmUgcmVnaXN0ZXJlZCBhcyB0cmFja2VkIGdlc3R1cmUgbGF5ZXJzLiBTZWVcbiAgICoge0BsaW5rIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZSNyZWdpc3RlckxheWVyfSBmb3IgbW9yZSBpbmZvcm1hdGlvblxuICAgKiBvbiBleHBlY3RlZCBmb3JtYXQgZm9yIGVhY2ggbGF5ZXIgb3B0aW9ucyBvYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihob3N0LCB7aG9sZFRpbWUgPSAzLCBtaW5pbXVtSW50ZXJ2YWwgPSAxLCBsYXllcnMgPSB7fX0gPSB7fSkge1xuICAgIHN1cGVyKGhvc3QpO1xuXG4gICAgdGhpcy5ob2xkVGltZSA9IGhvbGRUaW1lO1xuICAgIHRoaXMubWluaW11bUludGVydmFsID0gbWluaW11bUludGVydmFsO1xuXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGdlc3R1cmUgbGF5ZXJzXG4gICAgT2JqZWN0LmVudHJpZXMobGF5ZXJzKS5mb3JFYWNoKChbbmFtZSwgb3B0aW9ucyA9IHt9XSkgPT4ge1xuICAgICAgdGhpcy5yZWdpc3RlckxheWVyKG5hbWUsIG9wdGlvbnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHZhbGlkIGhvbGQgdGltZSB2YWx1ZS4gSWYgaG9sZCB0aW1lIGlzbid0IGRlZmluZWQgZm9yIHRoZSBhbmltYXRpb24sXG4gICAqIHRyeSB0byB1c2UgdGhlIGhvbGQgdGltZSBmb3IgdGhlIGxheWVyLiBJZiB0aGF0J3Mgbm90IGRlZmluZWQsIGZhbGwgYmFjayB0b1xuICAgKiB0aGUgaG9sZCB0aW1lIGZvciB0aGUgZmVhdHVyZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGxheWVyIC0gTWFuYWdlZCBsYXllciBvcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFuaW1hdGlvbiAtIE1hbmFnZWQgYW5pbWF0aW9uIG9wdGlvbnMgb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgX2dldEhvbGRUaW1lKGxheWVyLCBhbmltYXRpb24pIHtcbiAgICBjb25zdCBsYXllckhvbGRUaW1lID1cbiAgICAgIGxheWVyLmhvbGRUaW1lICE9PSB1bmRlZmluZWQgPyBsYXllci5ob2xkVGltZSA6IHRoaXMuaG9sZFRpbWU7XG5cbiAgICByZXR1cm4gYW5pbWF0aW9uLmhvbGRUaW1lICE9PSB1bmRlZmluZWRcbiAgICAgID8gYW5pbWF0aW9uLmhvbGRUaW1lXG4gICAgICA6IGxheWVySG9sZFRpbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgdmFsaWQgbWluaW11bSBpbnRlcnZhbCB2YWx1ZS4gSWYgbWluaW11bSBpbnRlcnZhbCBpc24ndCBkZWZpbmVkIGZvclxuICAgKiB0aGUgYW5pbWF0aW9uLCB0cnkgdG8gdXNlIHRoZSBtaW5pbXVtIGludGVydmFsIGZvciB0aGUgbGF5ZXIuIElmIHRoYXQncyBub3RcbiAgICogZGVmaW5lZCwgZmFsbCBiYWNrIHRvIHRoZSBtaW5pbXVtIGludGVydmFsIGZvciB0aGUgZmVhdHVyZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGxheWVyIC0gTWFuYWdlZCBsYXllciBvcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFuaW1hdGlvbiAtIE1hbmFnZWQgYW5pbWF0aW9uIG9wdGlvbnMgb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgX2dldE1pbmltdW1JbnRlcnZhbChsYXllciwgYW5pbWF0aW9uKSB7XG4gICAgY29uc3QgbGF5ZXJNaW5pbXVtSW50ZXJ2YWwgPVxuICAgICAgbGF5ZXIubWluaW11bUludGVydmFsICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBsYXllci5taW5pbXVtSW50ZXJ2YWxcbiAgICAgICAgOiB0aGlzLm1pbmltdW1JbnRlcnZhbDtcblxuICAgIHJldHVybiBhbmltYXRpb24ubWluaW11bUludGVydmFsICE9PSB1bmRlZmluZWRcbiAgICAgID8gYW5pbWF0aW9uLm1pbmltdW1JbnRlcnZhbFxuICAgICAgOiBsYXllck1pbmltdW1JbnRlcnZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3Ige0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNwbGF5TmV4dEFuaW1hdGlvbn0gZXZlbnQuIElmIHRoZVxuICAgKiBldmVudCBpcyBlbWl0dGVkIGZvciBhIG1hbmFnZWQgYW5pbWF0aW9uIGFuZCB0aGUgbmV3IHF1ZXVlZCBzdGF0ZSBjYW5ub3RcbiAgICogYWR2YW5jZSBvbiBpdHMgb3duLCBzdGFydCBhIG5ldyB0aW1lciBwcm9taXNlIHRoYXQgd2lsbCBhZHZhbmNlIHRoZSBxdWV1ZVxuICAgKiBvbmNlIGl0IHJlc29sdmVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgb2JqZWN0IHBhc3NlZCBmcm9tIHBsYXlOZXh0QW5pbWF0aW9uIGV2ZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBxdWV1ZSBzdGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBxdWV1ZSBzdGF0ZSBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2FuQWR2YW5jZSAtIFdoZXRoZXIgb3Igbm90IHRoZSBjdXJyZW50IHN0YXRlIGluIHRoZSBxdWV1ZVxuICAgKiBjYW4gYWR2YW5jZSBvbiBpdHMgb3duLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUXVldWVFbmQgLSBXaGV0aGVyIHRoZSBjdXJyZW50IHN0YXRlIGluIHRoZSBxdWV1ZSBpcyB0aGUgbGFzdFxuICAgKiBzdGF0ZSBpbiB0aGUgcXVldWUuXG4gICAqL1xuICBfb25OZXh0KHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIGNhbkFkdmFuY2UsIGlzUXVldWVFbmR9KSB7XG4gICAgLy8gRXhpdCBpZiB0aGlzIGlzbid0IGEgbWFuYWdlZCBsYXllclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRXhpdCBpZiBpdCBpc24ndCBhIG1hbmFnZWQgYW5pbWF0aW9uXG4gICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXTtcbiAgICBpZiAoYW5pbWF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTdGFydCBhIG5ldyB0aW1lciBmb3IgbG9vcGluZyBzdGF0ZXMgdGhhdCBhcmVuJ3QgdGhlIGVuZCBvZiB0aGUgcXVldWVcbiAgICBpZiAoIWNhbkFkdmFuY2UgJiYgIWlzUXVldWVFbmQgJiYgbGF5ZXIuY3VycmVudEdlc3R1cmUgPT09IGFuaW1hdGlvbk5hbWUpIHtcbiAgICAgIGNvbnN0IGhvbGRUaW1lID0gdGhpcy5fZ2V0SG9sZFRpbWUobGF5ZXIsIGFuaW1hdGlvbik7XG4gICAgICBsYXllci5ob2xkVGltZXIuY2FuY2VsKCk7XG5cbiAgICAgIC8vIFNraXAgdG8gdGhlIG5leHQgYW5pbWF0aW9uIHJpZ2h0IGF3YXkgaWYgaG9sZCB0aW1lIGlzIHplcm9cbiAgICAgIGlmIChob2xkVGltZSA8PSAwKSB7XG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5wbGF5TmV4dEFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBXYWl0IGZvciB0aGUgZ2l2ZW4gaG9sZCB0aW1lIGJlZm9yZSBwcm9ncmVzc2luZ1xuICAgICAgZWxzZSB7XG4gICAgICAgIGxheWVyLmhvbGRUaW1lciA9IFV0aWxzLndhaXQoaG9sZFRpbWUsIHtcbiAgICAgICAgICBvbkZpbmlzaDogKCkgPT4ge1xuICAgICAgICAgICAgLy8gQWR2YW5jZSB0aGUgcXVldWUgdG8gdGhlIG5leHQgc3RhdGVcbiAgICAgICAgICAgIGlmIChsYXllci5jdXJyZW50R2VzdHVyZSA9PT0gYW5pbWF0aW9uTmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUucGxheU5leHRBbmltYXRpb24oXG4gICAgICAgICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbk5hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjc3RvcEFuaW1hdGlvbn0gZXZlbnQuIElmIHRoZVxuICAgKiBldmVudCBpcyBlbWl0dGVkIGZvciBhIG1hbmFnZWQgYW5pbWF0aW9uIGNhbmNlbCB0aGUgbGF5ZXIncyBzdG9yZWQgdGltZXJzLlxuICAgKiBJZiB0aGUgbGF5ZXIgaXMgc2V0IHRvIGF1dG8tZGlzYWJsZSBzZXQgaXRzIHdlaWdodCB0byAwLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgb2JqZWN0IHBhc3NlZCBmcm9tIHBsYXlOZXh0QW5pbWF0aW9uIGV2ZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBzdG9wcGVkIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgc3RvcHBlZC5cbiAgICovXG4gIF9vblN0b3Aoe2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZX0pIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGlzIG1hbmFnZWRcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIGlzIG1hbmFnZWRcbiAgICBjb25zdCBhbmltYXRpb24gPSBsYXllci5hbmltYXRpb25zW2FuaW1hdGlvbk5hbWVdO1xuICAgIGlmIChhbmltYXRpb24gIT09IHVuZGVmaW5lZCAmJiBhbmltYXRpb25OYW1lID09PSBsYXllci5jdXJyZW50R2VzdHVyZSkge1xuICAgICAgbGF5ZXIuY3VycmVudEdlc3R1cmUgPSBudWxsO1xuICAgICAgbGF5ZXIucGxheVRpbWVyID0gbnVsbDtcbiAgICAgIGxheWVyLmhvbGRUaW1lci5jYW5jZWwoKTtcblxuICAgICAgLy8gVHVybiBvZmYgbGF5ZXIgd2VpZ2h0XG4gICAgICBpZiAobGF5ZXIuYXV0b0Rpc2FibGUpIHtcbiAgICAgICAgdGhpcy5zZXRMYXllcldlaWdodHMobmFtZSA9PiBuYW1lID09PSBsYXllck5hbWUsIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9vbkFuaW1hdGlvbkFkZGVkKHtsYXllck5hbWUsIGFuaW1hdGlvbk5hbWV9KSB7XG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG5cbiAgICBpZiAobGF5ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYW5pbWF0aW9uID0gbGF5ZXIuYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXTtcblxuICAgICAgLy8gUmVnaXN0ZXIgdGhlIGFuaW1hdGlvbiBhcyBhY3RpdmUgaWYgaXQgaXMgdW5tYW5hZ2VkXG4gICAgICBpZiAoYW5pbWF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xuICAgICAgfVxuICAgICAgLy8gTWFyayB0aGUgYW5pbWF0aW9uIGFzIGFjdGl2ZSBpZiBpdCBpcyBtYW5hZ2VkXG4gICAgICBlbHNlIHtcbiAgICAgICAgYW5pbWF0aW9uLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWdpc3RlckxheWVyKG5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyLnJlZ2lzdGVyTGF5ZXIobmFtZSwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGhvbGRUaW1lcjogRGVmZXJyZWQucmVzb2x2ZSgpLFxuICAgICAgcGxheVRpbWVyOiBudWxsLFxuICAgICAgY3VycmVudEdlc3R1cmU6IG51bGwsXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5pc0FjdGl2ZSkge1xuICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbnMobmFtZSkuZm9yRWFjaChhbmltID0+IHtcbiAgICAgICAgLy8gQXV0b21hdGljYWxseSByZWdpc3RlciBhbGwgYW5pbWF0aW9ucyBvbiB0aGUgbGF5ZXJcbiAgICAgICAgaWYgKHRoaXMuX21hbmFnZWRMYXllcnNbbmFtZV0uYW5pbWF0aW9uc1thbmltXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5yZWdpc3RlckFuaW1hdGlvbihcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBhbmltLFxuICAgICAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tuYW1lXS5hbmltYXRpb25zW2FuaW1dXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUcnkgdG8gZmFsbCBiYWNrIHRvIGEgZGVmYXVsdCB3b3JkIGFycmF5XG4gICAgaWYgKCEob3B0aW9ucy53b3JkcyBpbnN0YW5jZW9mIEFycmF5KSAmJiAhKG9wdGlvbnMud29yZHMgaW5zdGFuY2VvZiBTZXQpKSB7XG4gICAgICBvcHRpb25zLndvcmRzID0gRGVmYXVsdEdlc3R1cmVXb3Jkc1thbmltYXRpb25OYW1lXSB8fCBbXTtcbiAgICB9XG5cbiAgICBzdXBlci5yZWdpc3RlckFuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBvYmplY3QgdGhhdCBtYXBzIHNzbWwgbWFyayBzeW50YXggcmVxdWlyZWQgdG8gcGxheSBlYWNoIGdlc3R1cmUgdG9cbiAgICogdGhlIHdvcmRzIGFycmF5IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGdlc3R1cmUuIFdvcmRzIGFycmF5cyBhcmUgZGVmaW5lZCBhdCB3aGVuXG4gICAqIHRoZSBnZXN0dXJlIGFuaW1hdGlvbiBpcyByZWdpc3RlcmVkLiBHZXN0dXJlcyB3aXRob3V0IGFzc29jaWF0ZWQgd29yZHMgd2lsbFxuICAgKiBiZSBleGNsdWRlZCBmcm9tIHRoZSByZXN1bHQuIFRoZSByZXN1bHRpbmcgb2JqZWN0IGNhbiBiZSB1c2VkIGFzIGFuIGlucHV0XG4gICAqIGZvciB7QGxpbmsgVGV4dFRvU3BlZWNoVXRpbHMuYXV0b0dlbmVyYXRlU1NNTE1hcmtzfSB0byB1cGRhdGUgYSBzcGVlY2ggc3RyaW5nXG4gICAqIHdpdGggdGhlIG1hcmt1cCByZXF1aXJlZCB0byBwbGF5IGdlc3R1cmVzIHRpbWVkIHdpdGggdGhlaXIgYXNzb2NpYXRlZCB3b3Jkcy5cbiAgICpcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIGNyZWF0ZUdlc3R1cmVNYXAoKSB7XG4gICAgY29uc3QgZ2VzdHVyZU1hcCA9IHt9O1xuXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fbWFuYWdlZExheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwge2FuaW1hdGlvbnN9XSkgPT4ge1xuICAgICAgT2JqZWN0LmVudHJpZXMoYW5pbWF0aW9ucykuZm9yRWFjaChcbiAgICAgICAgKFtcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxuICAgICAgICAgIHtob2xkVGltZSwgbWluaW11bUludGVydmFsLCB3b3JkcywgdHJhbnNpdGlvblRpbWV9LFxuICAgICAgICBdKSA9PiB7XG4gICAgICAgICAgLy8gT25seSBzdG9yZSBnZXN0dXJlcyB0aGF0IGhhdmUgYW55IGFzc29jaWF0ZWQgd29yZHNcbiAgICAgICAgICBpZiAod29yZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAuLi4oaG9sZFRpbWUgJiYgeyBob2xkVGltZSB9KSxcbiAgICAgICAgICAgICAgLi4uKG1pbmltdW1JbnRlcnZhbCAmJiB7IG1pbmltdW1JbnRlcnZhbCB9KSxcbiAgICAgICAgICAgICAgLi4uKHRyYW5zaXRpb25UaW1lICYmIHsgdHJhbnNpdGlvblRpbWUgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ge1xuICAgICAgICAgICAgICBmZWF0dXJlOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICAgICAgICAgIG1ldGhvZDogJ3BsYXlHZXN0dXJlJyxcbiAgICAgICAgICAgICAgYXJnczogW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9uc10sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBnZXN0dXJlTWFwW0pTT04uc3RyaW5naWZ5KGtleSldID0gd29yZHM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdlc3R1cmVNYXA7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgc3NtbCBtYXJrIHN5bnRheCByZXF1aXJlZCB0byBwbGF5IGVhY2ggZ2VzdHVyZVxuICAgKiB0aGF0IGRvZXMgbm90IGhhdmUgYW55IGFzc29jaWF0ZWQgd29yZHMuIFRoZSByZXN1bHRpbmcgYXJyYXkgY2FuIGJlIHVzZWQgYXNcbiAgICogYW4gaW5wdXQgZm9yIHtAbGluayBUZXh0VG9TcGVlY2hVdGlscy5hdXRvR2VuZXJhdGVTU01MTWFya3N9IG9yXG4gICAqIHtAbGluayBUZXh0VG9TcGVlY2hVdGlscy5hZGRNYXJrc1RvVW5tYXJrZWRTZW50ZW5jZXN9IHRvIHVwZGF0ZSBhIHNwZWVjaFxuICAgKiBzdHJpbmcgd2l0aCB0aGUgbWFya3VwIHJlcXVpcmVkIHRvIHBsYXkgcmFuZG9tIGdlc3R1cmVzIGF0IGVhY2ggdW5tYXJrZWRcbiAgICogc2VudGVuY2UgaW4gdGhlIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IGxheWVycyAtIEFuIGFycmF5IG9mIG5hbWVzIG9mIG1hbmFnZWQgbGF5ZXJzIHRvIGdlbmVyYXRlXG4gICAqIG1hcmtzIGZvci4gSWYgdW5kZWZpbmVkLCB1c2UgYWxsIG1hbmFnZWQgbGF5ZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59XG4gICAqL1xuICBjcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5KGxheWVycykge1xuICAgIGNvbnN0IGdlbmVyaWNHZXN0dXJlcyA9IFtdO1xuICAgIGxheWVycyA9IGxheWVycyB8fCBPYmplY3Qua2V5cyh0aGlzLl9tYW5hZ2VkTGF5ZXJzKTtcblxuICAgIGxheWVycy5mb3JFYWNoKGxheWVyTmFtZSA9PiB7XG4gICAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcblxuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBpcyBtYW5hZ2VkXG4gICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmVudHJpZXMobGF5ZXIuYW5pbWF0aW9ucykuZm9yRWFjaChcbiAgICAgICAgKFtcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxuICAgICAgICAgIHsgaG9sZFRpbWUsIG1pbmltdW1JbnRlcnZhbCwgd29yZHMsIHRyYW5zaXRpb25UaW1lIH0sXG4gICAgICAgIF0pID0+IHtcbiAgICAgICAgICAvLyBPbmx5IHN0b3JlIGdlc3R1cmVzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgYXNzb2NpYXRlZCB3b3Jkc1xuICAgICAgICAgIGlmICghd29yZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAuLi4oaG9sZFRpbWUgJiYgeyBob2xkVGltZSB9KSxcbiAgICAgICAgICAgICAgLi4uKG1pbmltdW1JbnRlcnZhbCAmJiB7IG1pbmltdW1JbnRlcnZhbCB9KSxcbiAgICAgICAgICAgICAgLi4uKHRyYW5zaXRpb25UaW1lICYmIHsgdHJhbnNpdGlvblRpbWUgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICBmZWF0dXJlOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICAgICAgICAgIG1ldGhvZDogJ3BsYXlHZXN0dXJlJyxcbiAgICAgICAgICAgICAgYXJnczogW2xheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgb3B0aW9uc10sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFnZW5lcmljR2VzdHVyZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICBnZW5lcmljR2VzdHVyZXMucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBnZW5lcmljR2VzdHVyZXM7XG4gIH1cblxuICAvKipcbiAgICogUGxheSBhIG1hbmFnZWQgZ2VzdHVyZSBhbmltYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgZ2VzdHVyZVxuICAgKiBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGdlc3R1cmUgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25hbCBnZXN0dXJlIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0aW9ucy5ob2xkVGltZSAtIFRoaXMgb3B0aW9uIG9ubHkgYXBwbGllcyB0byB7QGxpbmsgUXVldWVTdGF0ZX1cbiAgICogZ2VzdHVyZXMuIFdoZW4gYSBRdWV1ZVN0YXRlIGdlc3R1cmUgcHJvZ3Jlc3NlcyB0byBhIGxvb3Bpbmcgc3RhdGUsIHRoaXMgb3B0aW9uXG4gICAqIGRlZmluZXMgaG93IG1hbnkgc2Vjb25kcyBzaG91bGQgZWxhcHNlIGJlZm9yZSBtb3ZpbmcgdGhlIHF1ZXVlIGZvcndhcmQuIElmXG4gICAqIHVuZGVmaW5lZCwgaXQgd2lsbCBmYWxsIGJhY2sgZmlyc3QgdG8gdGhlIGhvbGRUaW1lIGRlZmluZWQgaW4gdGhlIG9wdGlvbnMgd2hlblxuICAgKiB0aGUgZ2VzdHVyZSBhbmltYXRpb24gd2FzIHJlZ2lzdGVyZWQgYW5kIHRoZW4gdG8gdGhlIGhvbGRUaW1lIGRlZmluZWQgb24gdGhlXG4gICAqIGZlYXR1cmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gb3B0aW9ucy5taW5pbXVtSW50ZXJ2YWwgLSBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZSB0aGF0XG4gICAqIG11c3QgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgYSBnZXN0dXJlIHdhcyBwbGF5ZWQuXG4gICAqL1xuICBwbGF5R2VzdHVyZShcbiAgICBsYXllck5hbWUsXG4gICAgYW5pbWF0aW9uTmFtZSxcbiAgICB7aG9sZFRpbWUsIG1pbmltdW1JbnRlcnZhbCwgdHJhbnNpdGlvblRpbWUsIGZvcmNlID0gZmFsc2V9ID0ge31cbiAgKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgcmVnaXN0ZXJlZFxuICAgIGlmIChcbiAgICAgIHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltYXRpb25OYW1lXSA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwge1xuICAgICAgICBob2xkVGltZSxcbiAgICAgICAgbWluaW11bUludGVydmFsLFxuICAgICAgICB0cmFuc2l0aW9uVGltZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xuICAgIGNvbnN0IGFuaW1hdGlvbiA9IGxheWVyLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV07XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyBhY3RpdmVcbiAgICBpZiAoIWFuaW1hdGlvbi5pc0FjdGl2ZSkge1xuICAgICAgLy8gQ3JlYXRlIHdhcm5pbmcgbWVzc2FnZSBiYXNlZCBvbiB3aGljaCBvYmplY3QgZG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gbGF5ZXIuaXNBY3RpdmUgPyAnYW5pbWF0aW9uJyA6ICdsYXllcic7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFNraXBwaW5nIGdlc3R1cmUgJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gJHt0eXBlTmFtZX0gZXhpc3RzIHdpdGggdGhpcyBuYW1lIHlldC5gO1xuXG4gICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgICByZXR1cm4gRGVmZXJyZWQuY2FuY2VsKHtyZWFzb246ICdpbmFjdGl2ZScsIHZhbHVlOiB0eXBlTmFtZX0pO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBnZXN0dXJlIGlzIGFscmVhZHkgcGxheWluZ1xuICAgIGNvbnN0IHtjdXJyZW50R2VzdHVyZX0gPSBsYXllcjtcbiAgICBpZiAoY3VycmVudEdlc3R1cmUgPT09IGFuaW1hdGlvbk5hbWUgJiYgIWZvcmNlKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFNraXBwaW5nIGdlc3R1cmUgJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gVGhlIGdlc3R1cmUgaXMgYWxyZWFkeSBwbGF5aW5nLiBVc2Ugb3B0aW9ucy5mb3JjZSB0byBmb3JjZSB0aGUgZ2VzdHVyZSByZXBsYXksIHdoaWNoIG1heSByZXN1bHQgaW4gYSBoYXJkIHRyYW5zaXRpb24uYDtcblxuICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIERlZmVycmVkLmNhbmNlbCh7cmVhc29uOiAncGxheWluZycsIHZhbHVlOiBhbmltYXRpb25OYW1lfSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGFuaW1hdGlvbiBvcHRpb25zXG4gICAgaWYgKGhvbGRUaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFuaW1hdGlvbi5ob2xkVGltZSA9IGhvbGRUaW1lO1xuICAgIH1cblxuICAgIGlmIChtaW5pbXVtSW50ZXJ2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYW5pbWF0aW9uLm1pbmltdW1JbnRlcnZhbCA9IG1pbmltdW1JbnRlcnZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWluaW11bUludGVydmFsID0gdGhpcy5fZ2V0TWluaW11bUludGVydmFsKGxheWVyLCBhbmltYXRpb24pO1xuICAgIH1cblxuICAgIC8vIENoZWNrIHRoZSBpbnRlcnZhbFxuICAgIGlmICghZm9yY2UgJiYgbGF5ZXIucGxheVRpbWVyICE9PSBudWxsICYmIGxheWVyLnBsYXlUaW1lciA8IG1pbmltdW1JbnRlcnZhbCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgU2tpcHBpbmcgZ2VzdHVyZSAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBNaW5pbXVtIGludGVydmFsICR7bWluaW11bUludGVydmFsfSBoYXMgbm90IGJlZW4gbWV0LmBcbiAgICAgICk7XG4gICAgICByZXR1cm4gRGVmZXJyZWQuY2FuY2VsKHtcbiAgICAgICAgcmVhc29uOiAnbWluaW11bUludGVydmFsJyxcbiAgICAgICAgdmFsdWU6IG1pbmltdW1JbnRlcnZhbCAtIGxheWVyLnBsYXlUaW1lcixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBsYXkgdGhlIGFuaW1hdGlvblxuICAgIGxheWVyLmN1cnJlbnRHZXN0dXJlID0gYW5pbWF0aW9uTmFtZTtcbiAgICBsYXllci5wbGF5VGltZXIgPSAwO1xuICAgIGxheWVyLmhvbGRUaW1lci5jYW5jZWwoKTtcbiAgICBpZiAobGF5ZXIuYXV0b0Rpc2FibGUpIHtcbiAgICAgIHRoaXMuc2V0TGF5ZXJXZWlnaHRzKG5hbWUgPT4gbmFtZSA9PT0gbGF5ZXJOYW1lLCAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBsYXlBbmltYXRpb24oXG4gICAgICBsYXllck5hbWUsXG4gICAgICBhbmltYXRpb25OYW1lLFxuICAgICAgdHJhbnNpdGlvblRpbWVcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlKGRlbHRhVGltZSkge1xuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xuXG4gICAgLy8gSW5jcmVtZW50IHRoZSB0aW1lcnNcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl9tYW5hZ2VkTGF5ZXJzKS5mb3JFYWNoKChbbmFtZSwgb3B0aW9uc10pID0+IHtcbiAgICAgIGlmIChvcHRpb25zLmlzQWN0aXZlICYmICF0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuZ2V0UGF1c2VkKG5hbWUpKSB7XG4gICAgICAgIG9wdGlvbnMuaG9sZFRpbWVyLmV4ZWN1dGUoZGVsdGFUaW1lKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5wbGF5VGltZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBvcHRpb25zLnBsYXlUaW1lciArPSBkZWx0YVRpbWUgLyAxMDAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpbnN0YWxsQXBpKCkge1xuICAgIC8qKlxuICAgICAqIEBpbm5lclxuICAgICAqIEBuYW1lc3BhY2UgR2VzdHVyZUZlYXR1cmVcbiAgICAgKi9cbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XG5cbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgR2VzdHVyZUZlYXR1cmVcbiAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICogQG1ldGhvZFxuICAgICAgICogQHNlZSBHZXN0dXJlRmVhdHVyZSNjcmVhdGVHZXN0dXJlTWFwXG4gICAgICAgKi9cbiAgICAgIGNyZWF0ZUdlc3R1cmVNYXA6IHRoaXMuY3JlYXRlR2VzdHVyZU1hcC5iaW5kKHRoaXMpLFxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgR2VzdHVyZUZlYXR1cmVcbiAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICogQG1ldGhvZFxuICAgICAgICogQHNlZSBHZXN0dXJlRmVhdHVyZSNjcmVhdGVHZW5lcmljR2VzdHVyZUFycmF5XG4gICAgICAgKi9cbiAgICAgIGNyZWF0ZUdlbmVyaWNHZXN0dXJlQXJyYXk6IHRoaXMuY3JlYXRlR2VuZXJpY0dlc3R1cmVBcnJheS5iaW5kKHRoaXMpLFxuICAgICAgLyoqXG4gICAgICAgKiBAbWVtYmVyb2YgR2VzdHVyZUZlYXR1cmVcbiAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICogQG1ldGhvZFxuICAgICAgICogQHNlZSBHZXN0dXJlRmVhdHVyZSNwbGF5R2VzdHVyZVxuICAgICAgICovXG4gICAgICBwbGF5R2VzdHVyZTogdGhpcy5wbGF5R2VzdHVyZS5iaW5kKHRoaXMpLFxuICAgIH0pO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdlc3R1cmVGZWF0dXJlLCB7XG4gIERFRkFVTFRfTEFZRVJfT1BUSU9OUzoge1xuICAgIHZhbHVlOiB7XG4gICAgICAuLi5HZXN0dXJlRmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMsXG4gICAgICBhdXRvRGlzYWJsZTogdHJ1ZSxcbiAgICB9LFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSxcbiAgRVZFTlRfREVQRU5ERU5DSUVTOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIC4uLkdlc3R1cmVGZWF0dXJlLkVWRU5UX0RFUEVOREVOQ0lFUyxcbiAgICAgIEFuaW1hdGlvbkZlYXR1cmU6IHtcbiAgICAgICAgLi4uR2VzdHVyZUZlYXR1cmUuRVZFTlRfREVQRU5ERU5DSUVTLkFuaW1hdGlvbkZlYXR1cmUsXG4gICAgICAgIHBsYXlOZXh0QW5pbWF0aW9uOiAnX29uTmV4dCcsXG4gICAgICAgIHN0b3BBbmltYXRpb246ICdfb25TdG9wJyxcbiAgICAgICAgaW50ZXJydXB0QW5pbWF0aW9uOiAnX29uU3RvcCdcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBHZXN0dXJlRmVhdHVyZTtcbmV4cG9ydCB7RGVmYXVsdEdlc3R1cmVXb3Jkc307XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuaW1wb3J0IFV0aWxzIGZyb20gJ2NvcmUvVXRpbHMnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcclxuaW1wb3J0IHtMaW5lYXJ9IGZyb20gJy4vRWFzaW5nJztcclxuXHJcbi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gb2YgdXNlZnVsIGFuaW1hdGlvbiBmdW5jdGlvbnMuXHJcbiAqXHJcbiAqIEBoaWRlY29uc3RydWN0b3JcclxuICovXHJcbmNsYXNzIEFuaW1hdGlvblV0aWxzIHtcclxuICBzdGF0aWMgbGVycChmcm9tLCB0bywgZmFjdG9yKSB7XHJcbiAgICBjb25zb2xlLndhcm4oYEFuaW1hdGlvblV0aWxzLmxlcnAgaXMgYmVpbmcgZGVwcmVjYXRlZC4gVXNlIE1hdGhVdGlscy5sZXJwIGluc3RlYWQuYCk7XHJcblxyXG4gICAgcmV0dXJuIE1hdGhVdGlscy5sZXJwKGZyb20sIHRvLCBmYWN0b3IpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xhbXAgYSBudW1iZXIgYmV0d2VlbiAyIHZhbHVlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFZhbHVlIHRvIGNsYW1wLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWluPTBdIC0gTWludW11bSB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heD0xXSAtIE1heGltdW0gdmFsdWUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHN0YXRpYyBjbGFtcCh2YWx1ZSwgbWluID0gMCwgbWF4ID0gMSkge1xyXG4gICAgY29uc29sZS53YXJuKGBBbmltYXRpb25VdGlscy5jbGFtcCBpcyBiZWluZyBkZXByZWNhdGVkLiBVc2UgTWF0aFV0aWxzLmNsYW1wIGluc3RlYWQuYCk7XHJcblxyXG4gICAgcmV0dXJuIE1hdGhVdGlscy5jbGFtcCh2YWx1ZSwgbWluLCBtYXgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgZGVmZXJyZWQgcHJvbWlzZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSB0aGUgdmFsdWUgb2YgYSBudW1lcmljXHJcbiAgICogcHJvcGVydHkgb2YgdGhpcyBvYmplY3Qgb3ZlciB0aW1lLiBQYXNzIGRlbHRhIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHRoZVxyXG4gICAqIGRlZmVycmVkIHByb21pc2UncyBleGVjdXRlIG1ldGhvZCBpbiBhbiB1cGRhdGUgbG9vcCB0byBhbmltYXRlIHRoZSBwcm9wZXJ0eVxyXG4gICAqIHRvd2FyZHMgdGhlIHRhcmdldCB2YWx1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0eU93bmVyIC0gT2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnR5IHRvIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlOYW1lIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gYW5pbWF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gdGFyZ2V0VmFsdWUgLSBUYXJnZXQgdmFsdWUgdG8gcmVhY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBvYmplY3RcclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc2Vjb25kcz0wXSAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHdpbGwgdGFrZSB0byByZWFjaFxyXG4gICAqIHRoZSB0YXJnZXQgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZWFzaW5nRm49TGluZWFyLkluT3V0XSAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5vbkZpbmlzaF0gLSBDYWxsYmFjayB0byBleGVjdXRlIG9uY2UgdGhlIGFuaW1hdGlvbiBjb21wbGV0ZXMuXHJcbiAgICogVGhlIHRhcmdldCB2YWx1ZSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMub25Qcm9ncmVzcyAtIENhbGxiYWNrIHRvIGV4ZWN1dGUgZWFjaCB0aW1lIHRoZSBhbmltYXRpb25cclxuICAgKiBwcm9wZXJ0eSBpcyB1cGRhdGVkIGR1cmluZyB0aGUgYW5pbWF0aW9uLiBUaGUgcHJvcGVydHkncyB2YWx1ZSBhdCB0aGUgdGltZSBvZlxyXG4gICAqIHRoZSB1cGRhdGUgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvcHRpb25zLm9uQ2FuY2VsIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgdXNlciBjYW5jZWxzIHRoZVxyXG4gICAqIGFuaW1hdGlvbiBiZWZvcmUgY29tcGxldGlvbi4gVGhlIGFuaW1hdGlvbiBwcm9wZXJ0eSdzIHZhbHVlIGF0IHRoZSB0aW1lIG9mXHJcbiAgICogY2FuY2VsIGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlci5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5vbkVycm9yIC0gQ2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgYW5pbWF0aW9uIHN0b3BzXHJcbiAgICogYmVjYXVzZSBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4gVGhlIGVycm9yIG1lc3NhZ2UgaXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSBSZXNvbHZlcyB3aXRoIHRoZSBwcm9wZXJ0eSdzIHZhbHVlIG9uY2UgaXQgcmVhY2hlcyB0aGVcclxuICAgKiB0YXJnZXQgdmFsdWUuXHJcbiAgICovXHJcbiAgc3RhdGljIGludGVycG9sYXRlUHJvcGVydHkoXHJcbiAgICBwcm9wZXJ0eU93bmVyLFxyXG4gICAgcHJvcGVydHlOYW1lLFxyXG4gICAgdGFyZ2V0VmFsdWUsXHJcbiAgICB7c2Vjb25kcyA9IDAsIGVhc2luZ0ZuLCBvbkZpbmlzaCwgb25Qcm9ncmVzcywgb25DYW5jZWwsIG9uRXJyb3J9ID0ge31cclxuICApIHtcclxuICAgIC8vIE1ha2Ugc3VyZSBwcm9wZXJ0eSBpcyBhbiBvYmplY3RcclxuICAgIGlmICghKHByb3BlcnR5T3duZXIgaW5zdGFuY2VvZiBPYmplY3QpKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBpbnRlcnBvbGF0ZSBwcm9wZXJ0eSAke3Byb3BlcnR5TmFtZX0uIFByb3BlcnR5IG93bmVyIG11c3QgYmUgYW4gb2JqZWN0LmBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIG9uRXJyb3IoZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWFrZSBzdXJlIHByb3BlcnR5IGlzIG51bWVyaWNcclxuICAgIGlmIChOdW1iZXIuaXNOYU4oTnVtYmVyKHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSkpKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBpbnRlcnBvbGF0ZSBwcm9wZXJ0eSAke3Byb3BlcnR5TmFtZX0uIFByb3BlcnR5IG11c3QgYmUgbnVtZXJpYy5gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkVycm9yKGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgdGFyZ2V0IHZhbHVlIGlzIG51bWVyaWNcclxuICAgIGlmIChOdW1iZXIuaXNOYU4oTnVtYmVyKHRhcmdldFZhbHVlKSkpIHtcclxuICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGludGVycG9sYXRlIHByb3BlcnR5ICR7cHJvcGVydHlOYW1lfSB0byB2YWx1ZSAke3RhcmdldFZhbHVlfS4gVGFyZ2V0IHZhbHVlIG11c3QgYmUgbnVtZXJpYy5gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkVycm9yKGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc29sdmUgaW1tZWRpYXRlbHkgaWYgdGhlIHRhcmdldCBoYXMgYWxyZWFkeSBiZWVuIHJlYWNoZWRcclxuICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSBwcm9wZXJ0eU93bmVyW3Byb3BlcnR5TmFtZV07XHJcblxyXG4gICAgaWYgKHN0YXJ0VmFsdWUgPT09IHRhcmdldFZhbHVlKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb25GaW5pc2ggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkZpbmlzaCh0YXJnZXRWYWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZXNvbHZlKHRhcmdldFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZWZhdWx0IHRvIGxpbmVhciBpbnRlcnBvbGF0aW9uXHJcbiAgICBpZiAodHlwZW9mIGVhc2luZ0ZuICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGlmIChlYXNpbmdGbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgYEludmFsaWQgcHJvcGVydHkgaW50ZXJwb2xhdGlvbiBlYXNpbmdGbi4gRGVmYXVsdGluZyB0byBsaW5lYXIgaW50ZXJwb2xhdGlvbi5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZWFzaW5nRm4gPSBMaW5lYXIuSW5PdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW50ZXJwb2xhdG9yID0gVXRpbHMud2FpdChzZWNvbmRzLCB7XHJcbiAgICAgIG9uRmluaXNoOiAoKSA9PiB7XHJcbiAgICAgICAgcHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdID0gdGFyZ2V0VmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb25GaW5pc2ggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIG9uRmluaXNoKHRhcmdldFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvbkNhbmNlbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgb25DYW5jZWwocHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+IHtcclxuICAgICAgICBpZiAocHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdICE9PSB0YXJnZXRWYWx1ZSkge1xyXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBsZXJwIGZhY3RvclxyXG4gICAgICAgICAgY29uc3QgZWFzZUZhY3RvciA9IGVhc2luZ0ZuKHByb2dyZXNzKTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIGVhc2VGYWN0b3IgIT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgYEludmFsaWQgcHJvcGVydHkgaW50ZXJwb2xhdGlvbiBlYXNpbmdGbi4gRWFzaW5nRm4gbXVzdCByZXR1cm4gYSBudW1iZXIuYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpbnRlcnBvbGF0b3IucmVqZWN0KGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSB2YWx1ZVxyXG4gICAgICAgICAgcHJvcGVydHlPd25lcltwcm9wZXJ0eU5hbWVdID0gTWF0aFV0aWxzLmxlcnAoXHJcbiAgICAgICAgICAgIHN0YXJ0VmFsdWUsXHJcbiAgICAgICAgICAgIHRhcmdldFZhbHVlLFxyXG4gICAgICAgICAgICBlYXNlRmFjdG9yXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2lnbmFsIHByb2dyZXNzXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvblByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBvblByb2dyZXNzKHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTaWduYWwgY29tcGxldGlvbiBvbmNlIHRpbWUgaXMgdXBcclxuICAgICAgICBpZiAocHJvZ3Jlc3MgPT09IDEpIHtcclxuICAgICAgICAgIHByb3BlcnR5T3duZXJbcHJvcGVydHlOYW1lXSA9IHRhcmdldFZhbHVlO1xyXG4gICAgICAgICAgaW50ZXJwb2xhdG9yLnJlc29sdmUodGFyZ2V0VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgb25FcnJvcixcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBpbnRlcnBvbGF0b3I7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBbmltYXRpb25VdGlscztcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJy4uL0FuaW1hdGlvblV0aWxzJztcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhIHN0YXRlIGluIG91ciBhbmltYXRpb24gc3lzdGVtLlxuICpcbiAqIEBhYnN0cmFjdFxuICovXG5jbGFzcyBBYnN0cmFjdFN0YXRlIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcbiAgICogdW5pcXVlIGZvciB0aGUgY29udGFpbmVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvIGFuZCBzaG91bGQgYmUgdmFsaWRhdGVkIGF0XG4gICAqIHRoZSBjb250YWluZXIgbGV2ZWwuIElmIG5vIG5hbWUgaXMgZ2l2ZW4gaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBjb25zdHJ1Y3RvclxuICAgKiBuYW1lLlxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm5hbWUgPVxuICAgICAgb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgdGhpcy5fd2VpZ2h0ID1cbiAgICAgIG9wdGlvbnMud2VpZ2h0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBNYXRoVXRpbHMuY2xhbXAob3B0aW9ucy53ZWlnaHQsIDAsIDEpXG4gICAgICAgIDogMDtcbiAgICB0aGlzLl9pbnRlcm5hbFdlaWdodCA9IHRoaXMuX3dlaWdodDtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xuICAgICAgZmluaXNoOiBEZWZlcnJlZC5yZXNvbHZlKCksXG4gICAgICB3ZWlnaHQ6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICAgIHBsYXk6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICB9O1xuXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcyA9IHtcbiAgICAgIG9uRmluaXNoOiB1bmRlZmluZWQsXG4gICAgICBvbkVycm9yOiB1bmRlZmluZWQsXG4gICAgICBvbkNhbmNlbDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RhdGUgaXMgY3VycmVudGx5IHBhdXNlZC5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBwYXVzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdXNlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0LlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IHdlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd2VpZ2h0O1xuICB9XG5cbiAgc2V0IHdlaWdodCh3ZWlnaHQpIHtcbiAgICB0aGlzLl93ZWlnaHQgPSBNYXRoVXRpbHMuY2xhbXAod2VpZ2h0LCAwLCAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB3ZWlnaHQgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgd2VpZ2h0UGVuZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0ICYmIHRoaXMuX3Byb21pc2VzLndlaWdodC5wZW5kaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQgb3ZlciB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGhlIHRhcmdldCB3ZWlnaHQgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXG4gICAqIHRhcmdldCB3ZWlnaHQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICBzZXRXZWlnaHQod2VpZ2h0LCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQuY2FuY2VsKCk7XG4gICAgd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCk7XG5cbiAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxuICAgICAgdGhpcyxcbiAgICAgICd3ZWlnaHQnLFxuICAgICAgd2VpZ2h0LFxuICAgICAge3NlY29uZHMsIGVhc2luZ0ZufVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGludGVybmFsIHdlaWdodC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgaW50ZXJuYWxXZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVybmFsV2VpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIE11bHRpcGxpZXMgdGhlIHVzZXIgd2VpZ2h0IGJ5IGEgZmFjdG9yIHRvIGRldGVybWluZSB0aGUgaW50ZXJuYWwgd2VpZ2h0LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZmFjdG9yIC0gMC0xIG11bHRpcGxpZXIgdG8gYXBwbHkgdG8gdGhlIHVzZXIgd2VpZ2h0LlxuICAgKi9cbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XG4gICAgdGhpcy5faW50ZXJuYWxXZWlnaHQgPSB0aGlzLl93ZWlnaHQgKiBmYWN0b3I7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFueSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIGV2YWx1YXRlZCBldmVyeSBmcmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cbiAgICovXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcbiAgICBpZiAoIXRoaXMuX3BhdXNlZCkge1xuICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9wcm9taXNlcykuZm9yRWFjaChwcm9taXNlID0+IHtcbiAgICAgICAgcHJvbWlzZS5leGVjdXRlKGRlbHRhVGltZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgcGxheWJhY2sgb2YgdGhlIHN0YXRlIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBzdGF0ZSBmaW5pc2hlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoID0gb25GaW5pc2g7XG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yID0gb25FcnJvcjtcbiAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsID0gb25DYW5jZWw7XG5cbiAgICB0aGlzLl9wcm9taXNlcy5wbGF5ID0gbmV3IERlZmVycmVkKHVuZGVmaW5lZCwgb25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcbiAgICB0aGlzLl9wcm9taXNlcy5maW5pc2ggPSBEZWZlcnJlZC5hbGwoW1xuICAgICAgdGhpcy5fcHJvbWlzZXMucGxheSxcbiAgICAgIHRoaXMuX3Byb21pc2VzLndlaWdodCxcbiAgICBdKTtcblxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XG4gIH1cblxuICAvKipcbiAgICogUGF1c2UgcGxheWJhY2sgb2YgdGhlIHN0YXRlLiBUaGlzIHByZXZlbnRzIHBlbmRpbmcgcHJvbWlzZXMgZnJvbSBiZWluZyBleGVjdXRlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwYXVzZSgpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBwbGF5YmFjayBvZiB0aGUgc3RhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgc3RhdGUgZmluaXNoZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5fcHJvbWlzZXMucGxheS5wZW5kaW5nKSB7XG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoID0gb25GaW5pc2ggfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaDtcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvciA9IG9uRXJyb3IgfHwgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yO1xuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbCA9IG9uQ2FuY2VsIHx8IHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWw7XG5cbiAgICAgIHRoaXMuX3Byb21pc2VzLnBsYXkgPSBuZXcgRGVmZXJyZWQoXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCxcbiAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yLFxuICAgICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uQ2FuY2VsXG4gICAgICApO1xuICAgICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoID0gRGVmZXJyZWQuYWxsKFtcbiAgICAgICAgdGhpcy5fcHJvbWlzZXMucGxheSxcbiAgICAgICAgdGhpcy5fcHJvbWlzZXMud2VpZ2h0LFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgcGxheWJhY2sgb2YgdGhlIHN0YXRlIGFuZCBjYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XG5cbiAgICBPYmplY3QudmFsdWVzKHRoaXMuX3Byb21pc2VzKS5mb3JFYWNoKHByb21pc2UgPT4ge1xuICAgICAgcHJvbWlzZS5jYW5jZWwoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgcGxheWJhY2sgb2YgdGhlIHN0YXRlIGFuZCByZXNvbHZlIGFueSBwZW5kaW5nIHByb21pc2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0b3AoKSB7XG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcblxuICAgIE9iamVjdC52YWx1ZXModGhpcy5fcHJvbWlzZXMpLmZvckVhY2gocHJvbWlzZSA9PiB7XG4gICAgICBwcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCBhbnkgcGVuZGluZyBwcm9taXNlcyBhbmQgcmVtb3ZlIHJlZmVyZW5jZSB0byB0aGVtLlxuICAgKi9cbiAgZGlzY2FyZCgpIHtcbiAgICB0aGlzLmNhbmNlbCgpO1xuXG4gICAgZGVsZXRlIHRoaXMuX3Byb21pc2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlIHRoZSBpbnRlcm5hbCB3ZWlnaHQgdG8gMC4gU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgc3dpdGNoaW5nIG9yIHRyYW5zaXRpb25pbmdcbiAgICogdG8gYSBuZXcgc3RhdGUuXG4gICAqL1xuICBkZWFjdGl2YXRlKCkge1xuICAgIHRoaXMudXBkYXRlSW50ZXJuYWxXZWlnaHQoMCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQWJzdHJhY3RTdGF0ZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgQWJzdHJhY3RTdGF0ZSBmcm9tICcuL0Fic3RyYWN0U3RhdGUnO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzIGZvciBzbW9vdGggdHJhbnNpdGlvbmluZyBiZXR3ZWVuIHN0YXRlcyBvbiBhbiBhbmltYXRpb24gbGF5ZXIuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0U3RhdGVcclxuICovXHJcbmNsYXNzIFRyYW5zaXRpb25TdGF0ZSBleHRlbmRzIEFic3RyYWN0U3RhdGUge1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5fdG8gPSBudWxsO1xyXG4gICAgdGhpcy5fZnJvbSA9IFtdO1xyXG4gICAgdGhpcy5fd2VpZ2h0UHJvbWlzZSA9IERlZmVycmVkLnJlc29sdmUoKTtcclxuICB9XHJcblxyXG4gIGdldCBpbnRlcm5hbFdlaWdodCgpIHtcclxuICAgIC8vIEZpbmQgdGhlIGNvbWJpbmVkIHdlaWdodCBvZiBhbGwgc3ViLXN0YXRlc1xyXG4gICAgbGV0IHRvdGFsV2VpZ2h0ID0gMDtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdG90YWxXZWlnaHQgKz0gdGhpcy5fdG8ud2VpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHRvdGFsV2VpZ2h0ICs9IHN0YXRlLndlaWdodDtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0b3RhbFdlaWdodCAqIHRoaXMuX2ludGVybmFsV2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XHJcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLnVwZGF0ZUludGVybmFsV2VpZ2h0KHRoaXMuX2ludGVybmFsV2VpZ2h0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgc3ViLXN0YXRlcyB0aGUgdHJhbnNpdGlvbiBpcyBjb250cm9sbGluZyBhbmQgc3RhcnQgbmV3IHdlaWdodFxyXG4gICAqIGFuaW1hdGlvbnMgb24gZWFjaCBvbmUuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBlYWNoIHRpbWUgdGhlIGN1cnJlbnQgc3RhdGUgb2ZcclxuICAgKiBhbiBhbmltYXRpb24gbGF5ZXIgZ2V0cyB1cGRhdGVkIHRvIGEgbmV3IHZhbHVlIGFuZCBhIHRyYW5zaXRpb24gdGltZSBncmVhdGVyXHJcbiAgICogdGhhdCB6ZXJvIGlzIHNwZWNpZmllZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0U3RhdGU+fSBbY3VycmVudFN0YXRlcz1bXV0gLSBTdGF0ZXMgd2hvc2Ugd2VpZ2h0IHZhbHVlc1xyXG4gICAqIHdpbGwgYmUgYW5pbWF0ZWQgdG8gMC5cclxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U3RhdGU9fSB0YXJnZXRTdGF0ZSAtIFN0YXRlIHdob3NlIHdlaWdodCB3aWxsIGJlIGFuaW1hdGVkXHJcbiAgICogdG8gMS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIGluIHNlY29uZHMgdGFrZSBmb3JcclxuICAgKiB3ZWlnaHQgYW5pbWF0aW9ucyB0byBjb21wbGV0ZS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciB3ZWlnaHQgYW5pbWF0aW9ucy5cclxuICAgKiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ29tcGxldGUgLSBGdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgYWxsIHdlaWdodCBhbmltYXRpb25zXHJcbiAgICogY29tcGxldGUuXHJcbiAgICovXHJcbiAgY29uZmlndXJlKFxyXG4gICAgY3VycmVudFN0YXRlcyA9IFtdLFxyXG4gICAgdGFyZ2V0U3RhdGUsXHJcbiAgICB0cmFuc2l0aW9uVGltZSxcclxuICAgIGVhc2luZ0ZuLFxyXG4gICAgb25Db21wbGV0ZVxyXG4gICkge1xyXG4gICAgLy8gRGVhY3RpdmF0ZSBhbnkgc3RhdGVzIHRoYXQgYXJlbid0IGluIHRoZSBuZXcgY29uZmlndXJhdGlvblxyXG4gICAgaWYgKHRoaXMuX3RvID09PSB0YXJnZXRTdGF0ZSB8fCBjdXJyZW50U3RhdGVzLmluY2x1ZGVzKHRoaXMuX3RvKSkge1xyXG4gICAgICB0aGlzLl90byA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9mcm9tID0gdGhpcy5fZnJvbS5maWx0ZXIoXHJcbiAgICAgIHN0YXRlID0+IHN0YXRlICE9PSB0YXJnZXRTdGF0ZSAmJiAhY3VycmVudFN0YXRlcy5pbmNsdWRlcyhzdGF0ZSlcclxuICAgICk7XHJcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcclxuXHJcbiAgICB0aGlzLl9mcm9tID0gY3VycmVudFN0YXRlcztcclxuICAgIHRoaXMuX3RvID0gdGFyZ2V0U3RhdGU7XHJcbiAgICB0aGlzLnJlc2V0KHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbiwgb25Db21wbGV0ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGFydCBuZXcgd2VpZ2h0IGFuaW1hdGlvbnMgc3RhdGUgdGhlIHRyYW5zaXRpb24gY29udHJvbHMuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZFxyXG4gICAqIGlmIGFuIGFuaW1hdGlvbiBpcyBwbGF5ZWQgd2l0aCBhIHRyYW5zaXRpb24gdGltZSBncmVhdGVyIHRoYW4gemVybyBhbmQgYSB0cmFuc3Rpb25cclxuICAgKiB0byB0aGF0IGFuaW1hdGlvbiB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cmFuc2l0aW9uVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHdpbGwgaW4gc2Vjb25kcyB0YWtlIGZvclxyXG4gICAqIHdlaWdodCBhbmltYXRpb25zIHRvIGNvbXBsZXRlLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIHdlaWdodCBhbmltYXRpb25zLlxyXG4gICAqIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25Db21wbGV0ZSAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSBhbGwgd2VpZ2h0IGFuaW1hdGlvbnNcclxuICAgKiBjb21wbGV0ZS5cclxuICAgKi9cclxuICByZXNldCh0cmFuc2l0aW9uVGltZSwgZWFzaW5nRm4sIG9uQ29tcGxldGUpIHtcclxuICAgIC8vIFN0b3AgYW55IHBlbmRpbmcgcHJvbWlzZXNcclxuICAgIHRoaXMuX3dlaWdodFByb21pc2UuY2FuY2VsKCk7XHJcblxyXG4gICAgLy8gU3RhcnQgdHdlZW5pbmcgd2VpZ2h0IHRvIDAgZm9yIHRoZSBjdXJyZW50IHN0YXRlc1xyXG4gICAgY29uc3Qgd2VpZ2h0UHJvbWlzZXMgPSB0aGlzLl9mcm9tLm1hcChzdGF0ZSA9PlxyXG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMCwgdHJhbnNpdGlvblRpbWUsIGVhc2luZ0ZuKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBTdGFydCB0d2VlbmluZyB3ZWlnaHQgdG8gMSBmb3IgdGhlIHRhcmdldCBzdGF0ZVxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHdlaWdodFByb21pc2VzLnB1c2godGhpcy5fdG8uc2V0V2VpZ2h0KDEsIHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbikpO1xyXG4gICAgICB0aGlzLm5hbWUgPSB0aGlzLl90by5uYW1lO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5uYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl93ZWlnaHRQcm9taXNlID0gRGVmZXJyZWQuYWxsKHdlaWdodFByb21pc2VzLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgICAgc3RhdGUuY2FuY2VsKCk7XHJcbiAgICAgICAgc3RhdGUuZGVhY3RpdmF0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHR5cGVvZiBvbkNvbXBsZXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25Db21wbGV0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCA9IG9uRmluaXNoO1xyXG4gICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkVycm9yID0gb25FcnJvcjtcclxuICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWwgPSBvbkNhbmNlbDtcclxuXHJcbiAgICBjb25zdCBwcm9taXNlcyA9IFt0aGlzLl93ZWlnaHRQcm9taXNlXTtcclxuXHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5yZXN1bWUoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl9wcm9taXNlcy5wbGF5ID0gdGhpcy5fdG8ucGxheShcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICBvbk5leHRcclxuICAgICAgKTtcclxuICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl9wcm9taXNlcy5wbGF5KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wcm9taXNlcy5maW5pc2ggPSBEZWZlcnJlZC5hbGwocHJvbWlzZXMsIG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xyXG4gIH1cclxuXHJcbiAgcGF1c2UoKSB7XHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5wYXVzZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLnBhdXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnBhdXNlKCk7XHJcbiAgfVxyXG5cclxuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpIHtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICghdGhpcy5fcHJvbWlzZXMucGxheS5wZW5kaW5nKSB7XHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25GaW5pc2ggPSBvbkZpbmlzaCB8fCB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoO1xyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IgPSBvbkVycm9yIHx8IHRoaXMuX3BsYXlDYWxsYmFja3Mub25FcnJvcjtcclxuICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbCA9IG9uQ2FuY2VsIHx8IHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJvbWlzZXMgPSBbdGhpcy5fd2VpZ2h0UHJvbWlzZV07XHJcblxyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucmVzdW1lKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZXMucGxheSA9IHRoaXMuX3RvLnJlc3VtZShcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICBvbk5leHRcclxuICAgICAgKTtcclxuICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl9wcm9taXNlcy5wbGF5KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wcm9taXNlcy5maW5pc2ggPSBEZWZlcnJlZC5hbGwoXHJcbiAgICAgIHByb21pc2VzLFxyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRmluaXNoLFxyXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IsXHJcbiAgICAgIHRoaXMuX3BsYXlDYWxsYmFja3Mub25DYW5jZWxcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuZmluaXNoO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUucGF1c2UoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLl90bykge1xyXG4gICAgICB0aGlzLl90by5jYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl93ZWlnaHRQcm9taXNlLmNhbmNlbCgpO1xyXG5cclxuICAgIHJldHVybiBzdXBlci5jYW5jZWwoKTtcclxuICB9XHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICB0aGlzLl9mcm9tLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBzdGF0ZS5wYXVzZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RvKSB7XHJcbiAgICAgIHRoaXMuX3RvLnN0b3AoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3VwZXIuc3RvcCgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGRlbHRhVGltZSkge1xyXG4gICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcblxyXG4gICAgdGhpcy5fZnJvbS5mb3JFYWNoKHN0YXRlID0+IHtcclxuICAgICAgc3RhdGUudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8udXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNjYXJkKCkge1xyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG5cclxuICAgIHRoaXMuX3dlaWdodFByb21pc2UuY2FuY2VsKCk7XHJcbiAgICBkZWxldGUgdGhpcy5fd2VpZ2h0UHJvbWlzZTtcclxuICAgIHRoaXMuX3RvID0gbnVsbDtcclxuICAgIHRoaXMuX2Zyb20ubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5fdG8pIHtcclxuICAgICAgdGhpcy5fdG8uZGVhY3RpdmF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2Zyb20uZm9yRWFjaChzdGF0ZSA9PiB7XHJcbiAgICAgIHN0YXRlLmRlYWN0aXZhdGUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvblN0YXRlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuLyogZXNsaW50LWRpc2FibGUgbWF4LWNsYXNzZXMtcGVyLWZpbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eS1mdW5jdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgZ2V0dGVyLXJldHVybiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvciAqL1xuaW1wb3J0IFRyYW5zaXRpb25TdGF0ZSBmcm9tICcuL3N0YXRlL1RyYW5zaXRpb25TdGF0ZSc7XG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnLi4vRGVmZXJyZWQnO1xuXG4vKipcbiAqIENsYXNzIGZhY3RvcnkgaW50ZXJmYWNlIGZvciBjb250cm9sbGluZyBwbGF5YmFjayBvZiBhIGNvbGxlY3Rpb24gb2YgYW5pbWF0aW9ucy5cbiAqIE9uZSBhbmltYXRpb24gY2FuIGJlIHBsYXllZCBhdCBhbnkgZ2l2ZW4gdGltZSwgY3Jvc3NmYWRpbmcgYmV0d2VlbiBhbmltYXRpb25zXG4gKiB3aWxsIHJlc3VsdCBpbiBwbGF5aW5nIGEge0BsaW5rIFRyYW5zaXRpb25TdGF0ZX0uXG4gKlxuICogQGludGVyZmFjZVxuICovXG5jbGFzcyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2Uge1xuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgcGxheWVyIGlzIHVwZGF0aW5nIHN0YXRlcy5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgZ2V0IHBhdXNlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGF1c2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHNlY29uZHMgaXQgdGFrZXMgdG8gdHJhbnNpdGlvbiB0byBhIG5ld1xuICAgKiBhbmltYXRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgdHJhbnNpdGlvblRpbWUoKSB7fVxuXG4gIHNldCB0cmFuc2l0aW9uVGltZShzZWNvbmRzKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBkZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlbiB0cmFuc2l0aW9uaW5nIGFuZFxuICAgKiBzZXR0aW5nIHdlaWdodHMuXG4gICAqXG4gICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICovXG4gIGdldCBlYXNpbmdGbigpIHt9XG5cbiAgc2V0IGVhc2luZ0ZuKGZuKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGF0ZSB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IGluIGNvbnRyb2wgb2YuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7QWJzdHJhY3RTdGF0ZX1cbiAgICovXG4gIGdldCBjdXJyZW50U3RhdGUoKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBzdGF0ZSB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IGluIGNvbnRyb2wgb2YuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGN1cnJlbnRBbmltYXRpb24oKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBsYXllciBpcyBjdXJyZW50bHkgdHJhbnNpdGlvbmluZyB0byBhIG5ldyBhbmltYXRpb24uXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCBpc1RyYW5zaXRpb25pbmcoKSB7fVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGxheWVyJ3MgY3VycmVudCBzdGF0ZSB0byBhIG5ldyB2YWx1ZS4gSWYgdHJhbnNpdGlvblRpbWUgaXMgZGVmaW5lZFxuICAgKiBhbmQgZ3JlYXRlciB0aGFuIHplcm8sIHBlcmZvcm0gYSBzbW9vdGggYmxlbmQgYmV0d2VlbiBhbnkgc3RhdGVzIHRoYXQgY3VycmVudGx5XG4gICAqIGhhdmUgbm9uLXplcm8gd2VpZ2h0IHZhbHVlcyBhbmQgdGhlIG5ldyBzdGF0ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nfG51bGwpfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUgdG8gdHJhbnNpdGlvbiB0by5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBsYXlNZXRob2QgLSBOYW1lIG9mIHRoZSBvcGVyYXRpb24gYmVpbmcgcHJlcGFyZWQgZm9yLCB0byBiZVxuICAgKiB1c2VkIGluIGVycm9yIG1lc3NhZ2luZy5cbiAgICogQHBhcmFtIHtudW1iZXI9fSB0cmFuc2l0aW9uVGltZSAtIEFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgaXQgd2lsbCB0YWtlIHRvXG4gICAqIHN3aXRjaCB0byB0aGUgbmV3IHN0YXRlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoZW4gdHJhbnNpdGlvbmluZyB0byBhXG4gICAqIG5ldyBzdGF0ZSBvdmVyIHRpbWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC5cbiAgICovXG4gIF9wcmVwYXJlQ3VycmVudFN0YXRlKG5hbWUsIHBsYXlNZXRob2QsIHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbiwgb25FcnJvcikge31cblxuICAvKipcbiAgICogU3RhcnQgcGxheWJhY2sgYW4gYW5pbWF0aW9uIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gcGxheS5cbiAgICogQHBhcmFtIHtudW1iZXI9fSB0cmFuc2l0aW9uVGltZSAtIEFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSBiZWZvcmUgdGhlXG4gICAqIG5ldyBzdGF0ZSBoYXMgZnVsbCBpbmZsdWVuY2UgZm9yIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gRWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgYmxlbmRpbmcgaWYgdHJhbnNpdGlvblRpbWVcbiAgICogaXMgZ3JlYXRlciB0aGFuIHplcm8uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgYW5pbWF0aW9uIGZpbmlzaGVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIGFuaW1hdGlvbiBlbmNvdW50ZXJzXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uTmV4dCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgYW4gYW5pbWF0aW9uIHF1ZXVlIGlzXG4gICAqIHBsYXllZCBhbmQgaXQgYWR2YW5jZXMgdG8gdGhlIG5leHQgYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICBwbGF5QW5pbWF0aW9uKFxuICAgIG5hbWUsXG4gICAgdHJhbnNpdGlvblRpbWUsXG4gICAgZWFzaW5nRm4sXG4gICAgb25GaW5pc2gsXG4gICAgb25FcnJvcixcbiAgICBvbkNhbmNlbCxcbiAgICBvbk5leHRcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgcGxheWJhY2sgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGNhbmNlbEFuaW1hdGlvbigpIHt9XG5cbiAgLyoqXG4gICAqIFBhdXNlIHBsYXliYWNrIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwYXVzZUFuaW1hdGlvbigpIHt9XG5cbiAgLyoqXG4gICAqIFJlc3VtZSBwbGF5YmFjayBvZiBhbiBhbmltYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gbmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byByZXN1bWUgcGxheWJhY2sgZm9yLiBEZWZhdWx0XG4gICAqIGlzIHRoZSBsYXllcidzIGN1cnJlbnQgYW5pbWF0aW9uIG5hbWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gdHJhbnNpdGlvblRpbWUgLSBBbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgYmVmb3JlIHRoZVxuICAgKiBuZXcgc3RhdGUgaGFzIGZ1bGwgaW5mbHVlbmNlIGZvciB0aGUgbGF5ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgd2hlbiB0aGUgc3RhdGUgZmluaXNoZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkVycm9yIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3RhdGUgZW5jb3VudGVyc1xuICAgKiBhbiBlcnJvciBkdXJpbmcgcGxheWJhY2suXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkNhbmNlbCAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgcGxheWJhY2sgaXMgY2FuY2VsZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk5leHQgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIGFuIGFuaW1hdGlvbiBxdWV1ZSBpc1xuICAgKiBwbGF5ZWQgYW5kIGl0IGFkdmFuY2VzIHRvIHRoZSBuZXh0IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgcmVzdW1lQW5pbWF0aW9uKFxuICAgIG5hbWUsXG4gICAgdHJhbnNpdGlvblRpbWUsXG4gICAgZWFzaW5nRm4sXG4gICAgb25GaW5pc2gsXG4gICAgb25FcnJvcixcbiAgICBvbkNhbmNlbCxcbiAgICBvbk5leHRcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBTdG9wIHBsYXliYWNrIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdG9wQW5pbWF0aW9uKCkge31cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjdXJyZW50IGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cbiAgICovXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHt9XG5cbiAgLyoqXG4gICAqIERpc2NhcmQgdGhlIHRyYW5zaXRpb24gc3RhdGUuXG4gICAqL1xuICBkaXNjYXJkKCkge31cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlfSBhbmQgZXh0ZW5kc1xuICAgKiBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBbQmFzZUNsYXNzID0gY2xhc3N7fV0gLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIEFuaW1hdGlvblBsYXllckludGVyZmFjZX0uXG4gICAqL1xuICBzdGF0aWMgTWl4aW4oQmFzZUNsYXNzID0gY2xhc3Mge30pIHtcbiAgICBjb25zdCBBbmltYXRpb25QbGF5ZXJNaXhpbiA9IGNsYXNzIGV4dGVuZHMgQmFzZUNsYXNzIHtcbiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICAgICAgICBzdXBlcihvcHRpb25zLCAuLi5hcmdzKTtcblxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uU3RhdGUgPSBuZXcgVHJhbnNpdGlvblN0YXRlKCk7XG4gICAgICAgIHRoaXMuX3N0YXRlcyA9IHRoaXMuX3N0YXRlcyAhPT0gdW5kZWZpbmVkID8gdGhpcy5fc3RhdGVzIDogbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uVGltZSA9XG4gICAgICAgICAgTnVtYmVyKG9wdGlvbnMudHJhbnNpdGlvblRpbWUpID49IDBcbiAgICAgICAgICAgID8gTnVtYmVyKG9wdGlvbnMudHJhbnNpdGlvblRpbWUpXG4gICAgICAgICAgICA6IDA7XG5cbiAgICAgICAgdGhpcy5fZWFzaW5nRm4gPVxuICAgICAgICAgIHR5cGVvZiBvcHRpb25zLmVhc2luZ0ZuID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5lYXNpbmdGbiA6IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgZ2V0IHBhdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhdXNlZDtcbiAgICAgIH1cblxuICAgICAgZ2V0IHRyYW5zaXRpb25UaW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvblRpbWU7XG4gICAgICB9XG5cbiAgICAgIHNldCB0cmFuc2l0aW9uVGltZShzZWNvbmRzKSB7XG4gICAgICAgIHNlY29uZHMgPSBOdW1iZXIoc2Vjb25kcyk7XG5cbiAgICAgICAgaWYgKCEoc2Vjb25kcyA+PSAwKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3Qgc2V0IHRyYW5zaXRpb24gdGltZSBmb3IgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IHRvICR7c2Vjb25kc30uIFNlY29uZHMgbXVzdCBiZSBhIG51bWVyaWMgdmFsdWUgZ3JlYXRoZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRpbWUgPSBzZWNvbmRzO1xuICAgICAgfVxuXG4gICAgICBnZXQgZWFzaW5nRm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lYXNpbmdGbjtcbiAgICAgIH1cblxuICAgICAgc2V0IGVhc2luZ0ZuKGZuKSB7XG4gICAgICAgIHRoaXMuX2Vhc2luZ0ZuID0gZm47XG4gICAgICB9XG5cbiAgICAgIGdldCBjdXJyZW50U3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGU7XG4gICAgICB9XG5cbiAgICAgIGdldCBjdXJyZW50QW5pbWF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZS5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGdldCBpc1RyYW5zaXRpb25pbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUgPT09IHRoaXMuX3RyYW5zaXRpb25TdGF0ZTtcbiAgICAgIH1cblxuICAgICAgX3ByZXBhcmVDdXJyZW50U3RhdGUoXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHBsYXlNZXRob2QsXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxuICAgICAgICBlYXNpbmdGbixcbiAgICAgICAgb25FcnJvclxuICAgICAgKSB7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsICYmICF0aGlzLl9zdGF0ZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3QgJHtwbGF5TWV0aG9kfSBhbmltYXRpb24gJHtuYW1lfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgb25FcnJvcihlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0U3RhdGUgPSBuYW1lICE9PSBudWxsID8gdGhpcy5fc3RhdGVzLmdldChuYW1lKSA6IG51bGw7XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuZXcgc3RhdGUgaXNuJ3QgYWxyZWFkeSBwbGF5aW5nXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRBbmltYXRpb24gIT09IG5hbWUpIHtcbiAgICAgICAgICAvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzdGF0ZSBpbW1lZGlhdGVseVxuICAgICAgICAgIGlmICh0cmFuc2l0aW9uVGltZSA8PSAwKSB7XG4gICAgICAgICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHNldCBpdHMgd2VpZ2h0IHRvIDBcbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLmNhbmNlbCgpO1xuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUud2VpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlLmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlID0gdGFyZ2V0U3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEJsZW5kIHRvIHRoZSBuZXcgc3RhdGUgb3ZlciB0aW1lXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gdHJhbnNpdGlvbiBvdXQgb2YgYW55IHN0YXRlcyB3aXRoIG5vbi16ZXJvIHdlaWdodFxuICAgICAgICAgICAgY29uc3QgY3VycmVudFN0YXRlcyA9IFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldLmZpbHRlcihcbiAgICAgICAgICAgICAgcyA9PiBzICE9PSB0YXJnZXRTdGF0ZSAmJiAocy53ZWlnaHQgfHwgcy53ZWlnaHRQZW5kaW5nKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0cmFuc2l0aW9uIHN0YXRlIHdpdGggbmV3IGlucHV0c1xuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLmNvbmZpZ3VyZShcbiAgICAgICAgICAgICAgY3VycmVudFN0YXRlcyxcbiAgICAgICAgICAgICAgdGFyZ2V0U3RhdGUsXG4gICAgICAgICAgICAgIHRyYW5zaXRpb25UaW1lLFxuICAgICAgICAgICAgICBlYXNpbmdGbixcbiAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZSA9IHRhcmdldFN0YXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25TdGF0ZS53ZWlnaHQgPSAwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSB0aGlzLl90cmFuc2l0aW9uU3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBsYXlNZXRob2QgPT09ICdwbGF5Jykge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS5jYW5jZWwoKTtcblxuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUgPT09IHRoaXMuX3RyYW5zaXRpb25TdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLnJlc2V0KHRyYW5zaXRpb25UaW1lLCBlYXNpbmdGbiwgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSB0YXJnZXRTdGF0ZTtcbiAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvblN0YXRlLndlaWdodCA9IDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgd2VpZ2h0IGZvciB0aGUgbmV3IGN1cnJlbnQgc3RhdGUgc28gaXQgaGFzIGZ1bGwgaW5mbHVlbmNlIGZvciB0aGUgcGxheWVyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZS53ZWlnaHQgPSAxO1xuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICAgICAgfVxuXG4gICAgICBwbGF5QW5pbWF0aW9uKFxuICAgICAgICBuYW1lLFxuICAgICAgICB0cmFuc2l0aW9uVGltZSxcbiAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgIG9uRmluaXNoLFxuICAgICAgICBvbkVycm9yLFxuICAgICAgICBvbkNhbmNlbCxcbiAgICAgICAgb25OZXh0XG4gICAgICApIHtcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICBsZXQgcmVqZWN0ID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5fcHJlcGFyZUN1cnJlbnRTdGF0ZShcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAncGxheScsXG4gICAgICAgICAgICB0cmFuc2l0aW9uVGltZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gdHJhbnNpdGlvblRpbWVcbiAgICAgICAgICAgICAgOiB0aGlzLl90cmFuc2l0aW9uVGltZSxcbiAgICAgICAgICAgIGVhc2luZ0ZuICE9PSB1bmRlZmluZWQgPyBlYXNpbmdGbiA6IHRoaXMuX2Vhc2luZ0ZuLFxuICAgICAgICAgICAgb25FcnJvclxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBlcnJvciA9IGU7XG4gICAgICAgICAgcmVqZWN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWplY3QpIHtcbiAgICAgICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUucGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwsIG9uTmV4dCk7XG4gICAgICB9XG5cbiAgICAgIHBhdXNlQW5pbWF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZS5wYXVzZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXN1bWVBbmltYXRpb24oXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHRyYW5zaXRpb25UaW1lLFxuICAgICAgICBlYXNpbmdGbixcbiAgICAgICAgb25GaW5pc2gsXG4gICAgICAgIG9uRXJyb3IsXG4gICAgICAgIG9uQ2FuY2VsLFxuICAgICAgICBvbk5leHRcbiAgICAgICkge1xuICAgICAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgIG5hbWUgPSB0aGlzLl9jdXJyZW50U3RhdGUubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgbGV0IHJlamVjdCA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuX3ByZXBhcmVDdXJyZW50U3RhdGUoXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgJ3Jlc3VtZScsXG4gICAgICAgICAgICB0cmFuc2l0aW9uVGltZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gdHJhbnNpdGlvblRpbWVcbiAgICAgICAgICAgICAgOiB0aGlzLl90cmFuc2l0aW9uVGltZSxcbiAgICAgICAgICAgIGVhc2luZ0ZuICE9PSB1bmRlZmluZWQgPyBlYXNpbmdGbiA6IHRoaXMuX2Vhc2luZ0ZuLFxuICAgICAgICAgICAgb25FcnJvclxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBlcnJvciA9IGU7XG4gICAgICAgICAgcmVqZWN0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWplY3QpIHtcbiAgICAgICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUucmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KTtcbiAgICAgIH1cblxuICAgICAgY2FuY2VsQW5pbWF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZS5jYW5jZWwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RvcEFuaW1hdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUuc3RvcCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGUoZGVsdGFUaW1lKSB7XG4gICAgICAgIGlmIChzdXBlci51cGRhdGUpIHtcbiAgICAgICAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlKGRlbHRhVGltZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGlzY2FyZCgpIHtcbiAgICAgICAgaWYgKHN1cGVyLmRpc2NhcmQpIHtcbiAgICAgICAgICBzdXBlci5kaXNjYXJkKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uU3RhdGUuZGlzY2FyZCgpO1xuICAgICAgICBkZWxldGUgdGhpcy5fdHJhbnNpdGlvblN0YXRlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gQW5pbWF0aW9uUGxheWVyTWl4aW47XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbi8qIGVzbGludC1kaXNhYmxlIG1heC1jbGFzc2VzLXBlci1maWxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHktZnVuY3Rpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIGdldHRlci1yZXR1cm4gKi9cblxuaW1wb3J0IFV0aWxzIGZyb20gJy4uLy4uL1V0aWxzJztcblxuLyoqXG4gKiBDbGFzcyBmYWN0b3J5IGludGVyZmFjZSBmb3IgbWFuaXB1bGF0aW5nIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQWJzdHJhY3RTdGF0ZX0uXG4gKlxuICogQGludGVyZmFjZVxuICovXG5jbGFzcyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZSB7XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHN0YXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBYnN0cmFjdFN0YXRlfVxuICAgKi9cbiAgZ2V0U3RhdGUobmFtZSkge31cblxuICAvKipcbiAgICogR2V0cyBhbiBhcnJheSBvZiB0aGUgbmFtZXMgb2YgYWxsIHN0YXRlcyBpbiB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAdHlwZSB7QXJyYXkuPHN0cmluZz59XG4gICAqL1xuICBnZXRTdGF0ZU5hbWVzKCkge31cblxuICAvKipcbiAgICogQWRkIGEgbmV3IHN0YXRlIHRvIGJlIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRhaW5lci4gU3RhdGVzIGFyZSBzdG9yZWQga2V5ZWRcbiAgICogYnkgdGhlaXIgbmFtZSBwcm9wZXJ0eSwgd2hpY2ggbXVzdCBiZSB1bmlxdWUuIElmIGl0IGlzbid0LCBhIG51bWJlciB3aWxsXG4gICAqIGJlIGFkZGVkIG9yIGluY3JlbWVudGVkIHVudGlsIGEgdW5pcXVlIGtleSBpcyBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTdGF0ZX0gc3RhdGUgLSBTdGF0ZSB0byBhZGQgdG8gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVbmlxdWUgbmFtZSBvZiB0aGUgc3RhdGUuXG4gICAqL1xuICBhZGRTdGF0ZShzdGF0ZSkge31cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHN0YXRlIHdpdGggdGhlIGdpdmVuIG5hbWUgZnJvbSB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHJlbW92ZS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgYSBzdGF0ZSB3YXMgcmVtb3ZlZC5cbiAgICovXG4gIHJlbW92ZVN0YXRlKG5hbWUpIHt9XG5cbiAgLyoqXG4gICAqIFJlbmFtZXMgYSBzdGF0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGluIHRoZSBjb250YWluZXIuIE5hbWUgbXVzdCBiZSB1bmlxdWVcbiAgICogdG8gdGhlIGNvbnRhaW5lciwgaWYgaXQgaXNuJ3QgdGhlIG5hbWUgd2lsbCBiZSBpbmNyZW1lbnRlZCB1bnRpbCBpdCBpcyB1bmlxdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50TmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHJlbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOYW1lIHRvIHVwZGF0ZSB0aGUgc3RhdGUgd2l0aC5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVcGRhdGVkIG5hbWUgZm9yIHRoZSBzdGF0ZS5cbiAgICovXG4gIHJlbmFtZVN0YXRlKGN1cnJlbnROYW1lLCBuZXdOYW1lKSB7fVxuXG4gIC8qKlxuICAgKiBEaXNjYXJkcyBhbGwgc3RhdGVzLlxuICAgKi9cbiAgZGlzY2FyZFN0YXRlcygpIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlfSBhbmQgZXh0ZW5kc1xuICAgKiBhIHNwZWNpZmllZCBiYXNlIGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NsYXNzfSBbQmFzZUNsYXNzID0gY2xhc3N7fV0gLSBUaGUgY2xhc3MgdG8gZXh0ZW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtDbGFzc30gQSBjbGFzcyB0aGF0IGV4dGVuZHMgYEJhc2VDbGFzc2AgYW5kIGltcGxlbWVudHMge0BsaW5rIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlfS5cbiAgICovXG4gIHN0YXRpYyBNaXhpbihCYXNlQ2xhc3MgPSBjbGFzcyB7fSkge1xuICAgIC8qKlxuICAgICAqIFRoaXMgbWl4aW4gYWRkcyBmdW5jdGlvbmFsaXR5IGZvciBtYW5pcHVsYXRpbmcgdW5pcXVlbHktbmFtZWQgYW5pbWF0aW9uIHN0YXRlcyBpblxuICAgICAqIGEgbWFwLlxuICAgICAqL1xuICAgIGNvbnN0IFN0YXRlQ29udGFpbmVyTWl4aW4gPSBjbGFzcyBleHRlbmRzIEJhc2VDbGFzcyB7XG4gICAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIob3B0aW9ucywgLi4uYXJncyk7XG5cbiAgICAgICAgdGhpcy5fc3RhdGVzID0gdGhpcy5fc3RhdGVzICE9PSB1bmRlZmluZWQgPyB0aGlzLl9zdGF0ZXMgOiBuZXcgTWFwKCk7XG4gICAgICB9XG5cbiAgICAgIGdldFN0YXRlKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5nZXQobmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGdldFN0YXRlTmFtZXMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5fc3RhdGVzLmtleXMoKV07XG4gICAgICB9XG5cbiAgICAgIGFkZFN0YXRlKHN0YXRlKSB7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhdGUgaXMgbm90IGFscmVhZHkgaW4gdGhpcyBjb250YWluZXJcbiAgICAgICAgaWYgKFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldLmluY2x1ZGVzKHN0YXRlKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBDYW5ub3QgYWRkIGFuaW1hdGlvbiB0byBzdGF0ZSAke3RoaXMubmFtZX0uIEFuaW1hdGlvbiB3YXMgYWxyZWFkeSBhZGRlZC5gXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RhdGUgbmFtZSBpcyB1bmlxdWVcbiAgICAgICAgY29uc3QgdW5pcXVlTmFtZSA9IFV0aWxzLmdldFVuaXF1ZU5hbWUoc3RhdGUubmFtZSwgW1xuICAgICAgICAgIC4uLnRoaXMuX3N0YXRlcy5rZXlzKCksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmIChzdGF0ZS5uYW1lICE9PSB1bmlxdWVOYW1lKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYEFuaW1hdGlvbiBuYW1lICR7c3RhdGUubmFtZX0gaXMgbm90IHVuaXF1ZSBmb3Igc3RhdGUgJHt0aGlzLm5hbWV9LiBOZXcgYW5pbWF0aW9uIHdpbGwgYmUgYWRkZWQgd2l0aCBuYW1lICR7dW5pcXVlTmFtZX0uYFxuICAgICAgICAgICk7XG4gICAgICAgICAgc3RhdGUubmFtZSA9IHVuaXF1ZU5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdGF0ZXMuc2V0KHN0YXRlLm5hbWUsIHN0YXRlKTtcblxuICAgICAgICByZXR1cm4gc3RhdGUubmFtZTtcbiAgICAgIH1cblxuICAgICAgcmVtb3ZlU3RhdGUobmFtZSkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3RhdGUgaXMgaW4gdGhpcyBjb250YWluZXJcbiAgICAgICAgaWYgKCF0aGlzLl9zdGF0ZXMgfHwgIXRoaXMuX3N0YXRlcy5oYXMobmFtZSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgRGlkIG5vdCByZW1vdmUgYW5pbWF0aW9uICR7bmFtZX0gZnJvbSBzdGF0ZSAke3RoaXMubmFtZX0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3RhdGVzLmdldChuYW1lKS5kaXNjYXJkKCk7XG4gICAgICAgIHRoaXMuX3N0YXRlcy5kZWxldGUobmFtZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZW5hbWVTdGF0ZShjdXJyZW50TmFtZSwgbmV3TmFtZSkge1xuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXRlIGlzIGluIHRoaXMgY29udGFpbmVyXG4gICAgICAgIGlmICghdGhpcy5fc3RhdGVzIHx8ICF0aGlzLl9zdGF0ZXMuaGFzKGN1cnJlbnROYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3QgcmVuYW1lIGFuaW1hdGlvbiAke2N1cnJlbnROYW1lfSBpbiAke3RoaXMubmFtZX0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3N0YXRlcy5nZXQoY3VycmVudE5hbWUpO1xuXG4gICAgICAgIC8vIEV4aXQgaWYgdGhlIG5hbWVzIGFyZSB0aGUgc2FtZVxuICAgICAgICBpZiAoY3VycmVudE5hbWUgPT09IG5ld05hbWUpIHtcbiAgICAgICAgICByZXR1cm4gY3VycmVudE5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdW5pcXVlXG4gICAgICAgIGNvbnN0IHVuaXF1ZU5hbWUgPSBVdGlscy5nZXRVbmlxdWVOYW1lKFxuICAgICAgICAgIG5ld05hbWUsXG4gICAgICAgICAgWy4uLnRoaXMuX3N0YXRlcy5rZXlzKCldLmZpbHRlcihzID0+IHMubmFtZSAhPT0gY3VycmVudE5hbWUpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKG5ld05hbWUgIT09IHVuaXF1ZU5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgQW5pbWF0aW9uIG5hbWUgJHtuZXdOYW1lfSBpcyBub3QgdW5pcXVlIGluIHN0YXRlICR7dGhpcy5uYW1lfS4gQW5pbWF0aW9uIHdpbGwgYmUgcmVuYW1lZCB0byAke3VuaXF1ZU5hbWV9LmBcbiAgICAgICAgICApO1xuICAgICAgICAgIG5ld05hbWUgPSB1bmlxdWVOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUubmFtZSA9IG5ld05hbWU7XG4gICAgICAgIHRoaXMuX3N0YXRlcy5kZWxldGUoY3VycmVudE5hbWUpO1xuICAgICAgICB0aGlzLl9zdGF0ZXMuc2V0KHN0YXRlLm5hbWUsIHN0YXRlKTtcblxuICAgICAgICByZXR1cm4gc3RhdGUubmFtZTtcbiAgICAgIH1cblxuICAgICAgZGlzY2FyZFN0YXRlcygpIHtcbiAgICAgICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgICAgIHN0YXRlLmRpc2NhcmQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXRlcztcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdGF0ZUNvbnRhaW5lck1peGluO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBTdGF0ZUNvbnRhaW5lckludGVyZmFjZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgQWJzdHJhY3RTdGF0ZSBmcm9tICcuL0Fic3RyYWN0U3RhdGUnO1xuaW1wb3J0IEFuaW1hdGlvblBsYXllckludGVyZmFjZSBmcm9tICcuLi9BbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xuXG4vKipcbiAqIENsYXNzIGZvciBwbGF5aW5nIGFuIG9yZGVyZWQgYXJyYXkgb2YgYW5pbWF0aW9uIHN0YXRlcyBpbiBzZXF1ZW5jZS5cbiAqXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdFN0YXRlXG4gKiBAaW1wbGVtZW50cyBAQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlXG4gKi9cbmNsYXNzIFF1ZXVlU3RhdGUgZXh0ZW5kcyBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UuTWl4aW4oXG4gIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlLk1peGluKEFic3RyYWN0U3RhdGUpXG4pIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyBmb3IgdGhlIHN0YXRlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmF1dG9BZHZhbmNlPXRydWVdIC0gV2hldGhlciB0byBhdXRtYXRpY2FsbHkgYWR2YW5jZVxuICAgKiB0byB0aGUgbmV4dCBzdGF0ZSBpbiB0aGUgcXVldWUgYXMgZWFjaCBzdGF0ZSBjb21wbGV0ZXMuXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0U3RhdGU+fSBbcXVldWVTdGF0ZXM9W11dIC0gQXJyYXkgb2Ygc3RhdGVzIHRvIGJlIHBsYXllZFxuICAgKiBpbiBvcmRlci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgcXVldWVTdGF0ZXMgPSBbXSkge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgcXVldWVTdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICB0aGlzLmFkZFN0YXRlKHN0YXRlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3F1ZXVlID0gdGhpcy5fc3RhdGVzLmtleXMoKTtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgdGhlIGFuaW1hdGlvbiBxdWV1ZSBoYXMgcmVhY2hlZCB0aGUgZW5kLlxuICAgKi9cbiAgZ2V0IGRvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RvbmU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaW50ZXJuYWwgd2VpZ2h0LlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCBpbnRlcm5hbFdlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlXG4gICAgICA/IHRoaXMuX2N1cnJlbnRTdGF0ZS5pbnRlcm5hbFdlaWdodCAqIHRoaXMuX2ludGVybmFsV2VpZ2h0XG4gICAgICA6IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVzdGFydCB0aGUgcXVldWUgaXRlcmF0b3IuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzZXQoKSB7XG4gICAgdGhpcy5fcXVldWUgPSB0aGlzLl9zdGF0ZXMua2V5cygpO1xuICAgIGNvbnN0IHt2YWx1ZSwgZG9uZX0gPSB0aGlzLl9xdWV1ZS5uZXh0KCk7XG4gICAgdGhpcy5fZG9uZSA9IGRvbmU7XG5cbiAgICByZXR1cm4gdmFsdWUgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNdWx0aXBsaWVzIHRoZSB1c2VyIHdlaWdodCBieSBhIGZhY3RvciB0byBkZXRlcm1pbmUgdGhlIGludGVybmFsIHdlaWdodC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBtdWx0aXBsaWVyIHRvIGFwcGx5IHRvIHRoZSB1c2VyIHdlaWdodC5cbiAgICovXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgbmV4dCBhbmltYXRpb24gaW4gdGhlIHF1ZXVlLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25OZXh0IC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBlYWNoIHRpbWUgYW4gYW5pbWF0aW9uIGNvbXBsZXRlc1xuICAgKiBhbmQgdGhlIHF1ZXVlIG1vdmVzIHRvIHRoZSBuZXh0IGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbd3JhcD1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0byBzdGFydCB0aGUgcXVldWUgZnJvbSB0aGVcbiAgICogYmVnaW5uaW5nIGFnYWluIGlmIHRoZSBlbmQgaGFzIGJlZW4gcmVhY2hlZC5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgbmV4dChvbk5leHQsIHdyYXAgPSBmYWxzZSkge1xuICAgIC8vIE1vdmUgdGhlIHF1ZXVlIGZvcndhcmRcbiAgICBjb25zdCB7dmFsdWU6IG5hbWUsIGRvbmV9ID0gdGhpcy5fcXVldWUubmV4dCgpO1xuICAgIHRoaXMuX2RvbmUgPSBkb25lO1xuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xuXG4gICAgLy8gVGhlIHF1ZXVlIGhhcyByZWFjaGVkIHRoZSBlbmRcbiAgICBpZiAoZG9uZSkge1xuICAgICAgLy8gU3RhcnQgdGhlIHF1ZXVlIG92ZXJcbiAgICAgIGlmICh3cmFwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkoXG4gICAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkZpbmlzaCxcbiAgICAgICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IsXG4gICAgICAgICAgdGhpcy5fcGxheUNhbGxiYWNrcy5vbkNhbmNlbCxcbiAgICAgICAgICBvbk5leHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3AgdGhlIHF1ZXVlXG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoLnJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaWduYWwgdGhlIG5leHQgYW5pbWF0aW9uIGlzIHN0YXJ0aW5nXG4gICAgaWYgKHR5cGVvZiBvbk5leHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGxhc3ROYW1lID0gWy4uLnRoaXMuX3N0YXRlcy5rZXlzKCldW3RoaXMuX3N0YXRlcy5zaXplIC0gMV07XG4gICAgICBjb25zdCBpc1F1ZXVlRW5kID0gbmFtZSA9PT0gbGFzdE5hbWU7XG4gICAgICBvbk5leHQoe1xuICAgICAgICBuYW1lLFxuICAgICAgICBjYW5BZHZhbmNlOiB0aGlzLmdldFN0YXRlKG5hbWUpLmxvb3BDb3VudCAhPT0gSW5maW5pdHkgJiYgIWlzUXVldWVFbmQsXG4gICAgICAgIGlzUXVldWVFbmQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTdGFydCB0aGUgbmV4dCBhbmltYXRpb25cbiAgICB0aGlzLnBsYXlBbmltYXRpb24oXG4gICAgICBuYW1lLFxuICAgICAgdGhpcy5fdHJhbnNpdGlvblRpbWUsXG4gICAgICB0aGlzLl9lYXNpbmdGbixcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQgJiYgIXRoaXMuaXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgICAgdGhpcy5uZXh0KG9uTmV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3JcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcbiAgfVxuXG4gIHBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsLCBvbk5leHQpIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5fcmVzZXQoKTtcbiAgICBzdXBlci5wbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG5cbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgdGhpcy5fcHJvbWlzZXMuZmluaXNoLnJlc29sdmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2lnbmFsIHRoZSBuZXh0IGFuaW1hdGlvbiBpcyBzdGFydGluZ1xuICAgICAgaWYgKG5hbWUgIT09IHRoaXMuY3VycmVudEFuaW1hdGlvbiAmJiB0eXBlb2Ygb25OZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IGxhc3ROYW1lID0gWy4uLnRoaXMuX3N0YXRlcy5rZXlzKCldW3RoaXMuX3N0YXRlcy5zaXplIC0gMV07XG4gICAgICAgIGNvbnN0IGlzUXVldWVFbmQgPSBuYW1lID09PSBsYXN0TmFtZTtcbiAgICAgICAgb25OZXh0KHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGNhbkFkdmFuY2U6IG5hbWVcbiAgICAgICAgICAgID8gdGhpcy5nZXRTdGF0ZShuYW1lKS5sb29wQ291bnQgIT09IEluZmluaXR5ICYmICFpc1F1ZXVlRW5kXG4gICAgICAgICAgICA6IHRydWUsXG4gICAgICAgICAgaXNRdWV1ZUVuZDogIW5hbWUgfHwgaXNRdWV1ZUVuZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0YXJ0IHRoZSBuZXh0IGFuaW1hdGlvblxuICAgICAgdGhpcy5wbGF5QW5pbWF0aW9uKFxuICAgICAgICBuYW1lLFxuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPyB0aGlzLl90cmFuc2l0aW9uVGltZSA6IDAsXG4gICAgICAgIHRoaXMuX2Vhc2luZ0ZuLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQgJiYgIXRoaXMuaXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLm5leHQob25OZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3JcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmZpbmlzaDtcbiAgfVxuXG4gIHBhdXNlKCkge1xuICAgIGNvbnN0IHBhdXNlZCA9IHN1cGVyLnBhdXNlKCk7XG4gICAgdGhpcy5wYXVzZUFuaW1hdGlvbigpO1xuXG4gICAgcmV0dXJuIHBhdXNlZDtcbiAgfVxuXG4gIHJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwsIG9uTmV4dCkge1xuICAgIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCwgb25OZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VwZXIucmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG5cbiAgICAgIHRoaXMucmVzdW1lQW5pbWF0aW9uKFxuICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGUubmFtZSxcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRpbWUsXG4gICAgICAgIHRoaXMuX2Vhc2luZ0ZuLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQgJiYgIXRoaXMuaXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLm5leHQob25OZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3JcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5maW5pc2g7XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIGNvbnN0IGNhbmNlbGVkID0gc3VwZXIuY2FuY2VsKCk7XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUuY2FuY2VsKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbmNlbGVkO1xuICB9XG5cbiAgc3RvcCgpIHtcbiAgICBjb25zdCBzdG9wcGVkID0gc3VwZXIuc3RvcCgpO1xuICAgIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHN0b3BwZWQ7XG4gIH1cblxuICBkaXNjYXJkKCkge1xuICAgIHN1cGVyLmRpc2NhcmQoKTtcblxuICAgIHRoaXMuZGlzY2FyZFN0YXRlcygpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFF1ZXVlU3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xuaW1wb3J0IE1hdGhVdGlscyBmcm9tICdjb3JlL01hdGhVdGlscyc7XG5pbXBvcnQgQWJzdHJhY3RTdGF0ZSBmcm9tICcuL0Fic3RyYWN0U3RhdGUnO1xuaW1wb3J0IFN0YXRlQ29udGFpbmVySW50ZXJmYWNlIGZyb20gJy4vU3RhdGVDb250YWluZXJJbnRlcmZhY2UnO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGEgc3RhdGUgdGhhdCBibGVuZHMgYSBjb2xsZWN0aW9uIG9mIHtAbGluayBBYnN0cmFjdFN0YXRlfS5cbiAqXG4gKiBAYWJzdHJhY3RcbiAqIEBpbXBsZW1lbnRzIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlXG4gKi9cbmNsYXNzIEFic3RyYWN0QmxlbmRTdGF0ZSBleHRlbmRzIFN0YXRlQ29udGFpbmVySW50ZXJmYWNlLk1peGluKEFic3RyYWN0U3RhdGUpIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9LCBibGVuZFN0YXRlcyA9IFtdLCAuLi5hcmdzKSB7XG4gICAgc3VwZXIob3B0aW9ucywgLi4uYXJncyk7XG4gICAgYmxlbmRTdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICB0aGlzLmFkZFN0YXRlKHN0YXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdW0gb2YgaW50ZXJuYWwgd2VpZ2h0cyBvZiB0aGUgc3ViLXN0YXRlcy5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgaW50ZXJuYWxXZWlnaHQoKSB7XG4gICAgbGV0IGJsZW5kV2VpZ2h0cyA9IDA7XG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgYmxlbmRXZWlnaHRzICs9IHN0YXRlLmludGVybmFsV2VpZ2h0O1xuICAgIH0pO1xuICAgIHJldHVybiBibGVuZFdlaWdodHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2VpZ2h0IG9mIGEgc3RhdGUgY29udHJvbGxlZCBieSB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHN0YXRlIHRvIHJldHVybiB0aGUgd2VpZ2h0IGZyb20uXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gV2VpZ2h0IG9mIHRoZSBzdGF0ZS5cbiAgICovXG4gIGdldEJsZW5kV2VpZ2h0KG5hbWUpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUobmFtZSk7XG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgd2VpZ2h0IG9mIHN0YXRlICR7bmFtZX0gZnJvbSBCbGVuZFN0YXRlICR7dGhpcy5uYW1lfS4gTm8gc3RhdGUgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlLndlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB3ZWlnaHQgb2YgYSBzdGF0ZSBjb250cm9sbGVkIGJ5IHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgc3RhdGUgdG8gc2V0IHRoZSB3ZWlnaHQgb2YuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBXZWlnaHQgdmFsdWUgdG8gc2V0IG9uIHRoZSBzdGF0ZS5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgc2V0QmxlbmRXZWlnaHQobmFtZSwgd2VpZ2h0LCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUobmFtZSk7XG5cbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHNldCB3ZWlnaHQgb2Ygc3RhdGUgJHtuYW1lfSBmcm9tIEJsZW5kU3RhdGUgJHt0aGlzLm5hbWV9LiBObyBzdGF0ZSBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB3ZWlnaHQgPSBNYXRoVXRpbHMuY2xhbXAod2VpZ2h0KTtcbiAgICByZXR1cm4gc3RhdGUuc2V0V2VpZ2h0KHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIE11bHRpcGxpZXMgdGhlIHdlaWdodCBvZiBlYWNoIHN1Yi1zdGF0ZSBieSBhIGZhY3RvciB0byBkZXRlcm1pbmUgdGhlIGludGVybmFsIHdlaWdodC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZhY3RvciAtIDAtMSBtdWx0aXBsaWVyIHRvIGFwcGx5IHRvIHRoZSB1c2VyIHdlaWdodC5cbiAgICovXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XG5cbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodCh0aGlzLl9pbnRlcm5hbFdlaWdodCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFueSB2YWx1ZXMgb2YgdGhlIHN1Yi1zdGF0ZXMgdGhhdCBuZWVkIHRvIGJlIGV2YWx1YXRlZCBldmVyeSBmcmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cbiAgICovXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcblxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN0YXRlLnVwZGF0ZShkZWx0YVRpbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBzdGF0ZSBmaW5pc2hlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzdGF0ZSBlbmNvdW50ZXJzXG4gICAqIGFuIGVycm9yIGR1cmluZyBwbGF5YmFjay5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uQ2FuY2VsIC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiBwbGF5YmFjayBpcyBjYW5jZWxlZC5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcbiAgICBjb25zdCBwcm9taXNlcyA9IFtzdXBlci5wbGF5KCldO1xuXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgcHJvbWlzZXMucHVzaChzdGF0ZS5wbGF5KCkpO1xuICAgIH0pO1xuICAgIHJldHVybiBEZWZlcnJlZC5hbGwocHJvbWlzZXMsIG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG4gIH1cblxuICAvKipcbiAgICogUGF1c2UgcGxheWJhY2sgb2YgdGhlIHN1Yi1zdGF0ZXMuIFRoaXMgcHJldmVudHMgcGVuZGluZyBwcm9taXNlcyBmcm9tIGJlaW5nIGV4ZWN1dGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHBhdXNlKCkge1xuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN0YXRlLnBhdXNlKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1cGVyLnBhdXNlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lIHBsYXliYWNrIG9mIHRoZSBzdWItc3RhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBGdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIHN0YXRlIGZpbmlzaGVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHN0YXRlIGVuY291bnRlcnNcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25DYW5jZWwgLSBGdW5jdGlvbiB0byBleGVjdXRlIGlmIHBsYXliYWNrIGlzIGNhbmNlbGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbc3VwZXIucmVzdW1lKCldO1xuXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgcHJvbWlzZXMucHVzaChzdGF0ZS5yZXN1bWUoKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIERlZmVycmVkLmFsbChwcm9taXNlcywgb25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgcGxheWJhY2sgb2YgdGhlIHN1Yi1zdGF0ZXMgYW5kIGNhbmNlbCBhbnkgcGVuZGluZyBwcm9taXNlcy5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgc3RhdGUuY2FuY2VsKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1cGVyLmNhbmNlbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgcGxheWJhY2sgb2YgdGhlIHN1Yi1zdGF0ZXMgYW5kIHJlc29sdmUgYW55IHBlbmRpbmcgcHJvbWlzZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc3RvcCgpIHtcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS5zdG9wKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1cGVyLnN0b3AoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjYXJkcyBhbGwgc3ViLXN0YXRlIHJlc291cmNlcy5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBkaXNjYXJkKCkge1xuICAgIHN1cGVyLmRpc2NhcmQoKTtcblxuICAgIHRoaXMuZGlzY2FyZFN0YXRlcygpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFic3RyYWN0QmxlbmRTdGF0ZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXG5pbXBvcnQgQWJzdHJhY3RCbGVuZFN0YXRlIGZyb20gJy4vQWJzdHJhY3RCbGVuZFN0YXRlJztcblxuLyoqXG4gKiBDbGFzcyBmb3IgYmxlbmRpbmcgTiBudW1iZXIgb2YgYmxlbmQgc3RhdGVzLlxuICpcbiAqIEBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZVxuICovXG5jbGFzcyBGcmVlQmxlbmRTdGF0ZSBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSAtIE9wdGlvbnMgZm9yIHRoZSBjb250YWluZXIgc3RhdGUuXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFic3RyYWN0U3RhdGU+fSBbYmxlbmRTdGF0ZXM9W11dIC0gQmxlbmQgc3RhdGVzIHRvIGJlIGNvbnRyb2xsZWQgYnlcbiAgICogdGhpcyBjb250YWluZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIGJsZW5kU3RhdGVzID0gW10pIHtcbiAgICBzdXBlcihvcHRpb25zLCBibGVuZFN0YXRlcyk7XG4gIH1cblxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSB0b3RhbCBhY3RpdmUgd2VpZ2h0IG9mIGJsZW5kIHN0YXRlc1xuICAgIGxldCBzdW1XZWlnaHRzID0gMDtcblxuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN1bVdlaWdodHMgKz0gc3RhdGUud2VpZ2h0O1xuICAgIH0pO1xuXG4gICAgLy8gRW5zdXJlIHRoZSBzdW0gb2YgYmxlbmQgc3RhdGUgaW50ZXJuYWwgd2VpZ2h0cyBkb2VzIG5vdCBleGNlZWQgY29udGFpbmVyIGludGVybmFsIHdlaWdodFxuICAgIGZhY3RvciAvPSBNYXRoLm1heChzdW1XZWlnaHRzLCAxKTtcblxuICAgIC8vIFN1bSBvZiBibGVuZCBzdGF0ZSBpbnRlcm5hbCB3ZWlnaHRzIHNob3VsZCBub3QgZXhjZWVkIGNvbnRhaW5lciBpbnRlcm5hbCB3ZWlnaHRcbiAgICB0aGlzLl9zdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBzdGF0ZS51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IgKiB0aGlzLl93ZWlnaHQpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZyZWVCbGVuZFN0YXRlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcbmltcG9ydCBBYnN0cmFjdEJsZW5kU3RhdGUgZnJvbSAnLi9BYnN0cmFjdEJsZW5kU3RhdGUnO1xuaW1wb3J0IEFuaW1hdGlvblV0aWxzIGZyb20gJy4uL0FuaW1hdGlvblV0aWxzJztcblxuLyoqXG4gKiBDbGFzcyBmb3IgYmxlbmRpbmcgTiBudW1iZXIgb2YgYmxlbmQgc3RhdGVzIGJhc2VkIG9uIGEgc2luZ2xlXG4gKiBwYXJhbWV0ZXIuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RCbGVuZFN0YXRlXG4gKi9cbmNsYXNzIEJsZW5kMWRTdGF0ZSBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIE9wdGlvbnMgZm9yIHRoZSBjb250YWluZXIgc3RhdGVcbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RCbGVuZFN0YXRlPn0gW2JsZW5kU3RhdGVzPVtdXSAtIEJsZW5kIHN0YXRlcyB0byBiZVxuICAgKiBjb250cm9sbGVkIGJ5IHRoaXMgY29udGFpbmVyLlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBbYmxlbmRUaHJlc2hvbGRzPVtdXSAtIFRocmVzaG9sZCB2YWx1ZXMgZm9yIGFjdGl2YXRpbmdcbiAgICogZWFjaCBibGVuZCBzdGF0ZS5cbiAgICogQHBhcmFtIHtBcnJheS48Ym9vbGVhbj59IFtwaGFzZU1hdGNoZXM9W11dIC0gQm9vbGVhbnMgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdFxuICAgKiBlYWNoIGJsZW5kIHN0YXRlIHNob3VsZCBiZSBwaGFzZSBtYXRjaGVkLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9ucyA9IHt9LFxuICAgIGJsZW5kU3RhdGVzID0gW10sXG4gICAgYmxlbmRUaHJlc2hvbGRzID0gW10sXG4gICAgcGhhc2VNYXRjaGVzID0gW11cbiAgKSB7XG4gICAgc3VwZXIob3B0aW9ucywgYmxlbmRTdGF0ZXMpO1xuXG4gICAgdGhpcy5fYmxlbmRWYWx1ZSA9IDA7XG4gICAgdGhpcy5fcHJvbWlzZXMgPSB7XG4gICAgICAuLi50aGlzLl9wcm9taXNlcyxcbiAgICAgIGJsZW5kVmFsdWU6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICB9O1xuXG4gICAgLy8gVmFsaWRhdGUgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZSB0aHJlc2hvbGRzXG4gICAgY29uc3Qgbm9uWmVyb0RpZmZlcmVudFNpemUgPVxuICAgICAgYmxlbmRTdGF0ZXMubGVuZ3RoICE9PSAwICYmIGJsZW5kU3RhdGVzLmxlbmd0aCAhPT0gYmxlbmRUaHJlc2hvbGRzLmxlbmd0aDtcbiAgICBpZiAobm9uWmVyb0RpZmZlcmVudFNpemUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgQmxlbmQxZFN0YXRlIHdpdGggYmxlbmRUaHJlc2hvbGRzICR7YmxlbmRUaHJlc2hvbGRzfS4gQmxlbmRUaHJlc2hvbGRzIGNvdW50IGRvZXMgbm90IG1hdGNoIGJsZW5kU3RhdGVzIGNvdW50LmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbnNEdXBsaWNhdGVzID1cbiAgICAgIG5ldyBTZXQoYmxlbmRUaHJlc2hvbGRzKS5zaXplICE9PSBibGVuZFRocmVzaG9sZHMubGVuZ3RoO1xuICAgIGlmIChjb250YWluc0R1cGxpY2F0ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgQmxlbmQxZFN0YXRlIHdpdGggYmxlbmRUaHJlc2hvbGRzICR7YmxlbmRUaHJlc2hvbGRzfS4gQmxlbmRUaHJlc2hvbGRzIGNvbnRhaW5zIGR1cGxpY2F0ZSB2YWx1ZXNgXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHRocmVzaG9sZHMgbWFwXG4gICAgdGhpcy5fdGhyZXNob2xkcyA9IFtdO1xuICAgIFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldLmZvckVhY2goKHN0YXRlLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5fdGhyZXNob2xkcy5wdXNoKHtcbiAgICAgICAgdmFsdWU6IGJsZW5kVGhyZXNob2xkc1tpbmRleF0sXG4gICAgICAgIG5hbWU6IHN0YXRlLm5hbWUsXG4gICAgICAgIHBoYXNlTWF0Y2g6IHBoYXNlTWF0Y2hlc1tpbmRleF0gfHwgZmFsc2UsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3NvcnRUaHJlc2hvbGRzKCk7XG4gICAgdGhpcy5fZm9yY2VOb1RocmVzaG9sZER1cGVzID0gdHJ1ZTtcblxuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIGJsZW5kIHBhcmFtZXRlciB2YWx1ZS5cbiAgICovXG4gIGdldCBibGVuZFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9ibGVuZFZhbHVlO1xuICB9XG5cbiAgc2V0IGJsZW5kVmFsdWUodmFsdWUpIHtcbiAgICB0aGlzLl9ibGVuZFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgYmxlbmQgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxuICAgKi9cbiAgZ2V0IGJsZW5kVmFsdWVQZW5kaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlICYmIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWUucGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGRlZmluZWQgd2VpZ2h0IG92ZXIgdGltZS5cbiAgICpcbiAgICogQHBhcmFtIHtudWxsfSBuYW1lIC0gVW51c2VkIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRoZSB0YXJnZXQgd2VpZ2h0IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZHM9MF0gLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgd2lsbCB0YWtlIHRvIHJlYWNoIHRoZVxuICAgKiB0YXJnZXQgd2VpZ2h0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSBmb3IgaW50ZXJwb2xhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxuICAgKi9cbiAgc2V0QmxlbmRXZWlnaHQobmFtZSwgdmFsdWUsIHNlY29uZHMgPSAwLCBlYXNpbmdGbikge1xuICAgIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWUuY2FuY2VsKCk7XG5cbiAgICB0aGlzLl9wcm9taXNlcy5ibGVuZFZhbHVlID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcbiAgICAgIHRoaXMsXG4gICAgICAnYmxlbmRWYWx1ZScsXG4gICAgICB2YWx1ZSxcbiAgICAgIHtcbiAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgZWFzaW5nRm4sXG4gICAgICAgIG9uUHJvZ3Jlc3M6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25GaW5pc2g6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVCbGVuZFdlaWdodHMoKTtcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldEJsZW5kV2VpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLmJsZW5kVmFsdWU7XG4gIH1cblxuICBhZGRTdGF0ZShzdGF0ZSwgdGhyZXNob2xkVmFsdWUgPSAwLCBwaGFzZU1hdGNoID0gZmFsc2UpIHtcbiAgICB0aGlzLl90aHJlc2hvbGRzID0gdGhpcy5fdGhyZXNob2xkcyB8fCBbXTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYWxyZWFkeSBhIHN0YXRlIHdpdGggdGhpcyB0aHJlc2hvbGRcbiAgICBjb25zdCBzYW1lVmFsdWUgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLnZhbHVlID09PSB0aHJlc2hvbGRWYWx1ZVxuICAgICk7XG4gICAgaWYgKHRoaXMuX2ZvcmNlTm9UaHJlc2hvbGREdXBlcyAmJiBzYW1lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHNldCBibGVuZCB0aHJlc2hvbGQgb2YgJHt0aHJlc2hvbGRWYWx1ZX0gZm9yIHN0YXRlICR7c3RhdGUubmFtZX0gb24gJHt0aGlzLm5hbWV9LiBBIHN0YXRlIGFscmVhZHkgZXhpc3RzIHdpdGggdGhhdCB0aHJlc2hvbGQuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzdXBlci5hZGRTdGF0ZShzdGF0ZSk7XG4gICAgdGhpcy5fdGhyZXNob2xkcy5wdXNoKHtcbiAgICAgIHZhbHVlOiB0aHJlc2hvbGRWYWx1ZSxcbiAgICAgIG5hbWU6IHN0YXRlLm5hbWUsXG4gICAgICBwaGFzZU1hdGNoOiBwaGFzZU1hdGNoIHx8IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fc29ydFRocmVzaG9sZHMoKTtcblxuICAgIHJldHVybiBzdGF0ZS5uYW1lO1xuICB9XG5cbiAgcmVtb3ZlU3RhdGUobmFtZSkge1xuICAgIGNvbnN0IHJlbW92ZWQgPSBzdXBlci5yZW1vdmVTdGF0ZShuYW1lKTtcblxuICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3RocmVzaG9sZHMuZmluZEluZGV4KFxuICAgICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLm5hbWUgPT09IG5hbWVcbiAgICAgICk7XG4gICAgICB0aGlzLl90aHJlc2hvbGRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbW92ZWQ7XG4gIH1cblxuICByZW5hbWVTdGF0ZShjdXJyZW50TmFtZSwgbmV3TmFtZSkge1xuICAgIG5ld05hbWUgPSBzdXBlci5yZW5hbWVTdGF0ZShjdXJyZW50TmFtZSwgbmV3TmFtZSk7XG5cbiAgICBjb25zdCB0aHJlc2hvbGQgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLm5hbWUgPT09IGN1cnJlbnROYW1lXG4gICAgKTtcbiAgICB0aHJlc2hvbGQubmFtZSA9IG5ld05hbWU7XG5cbiAgICByZXR1cm4gbmV3TmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0aHJlc2hvbGQgdmFsdWUgb2YgYSBibGVuZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgdG8gZ2V0IHRoZSB0aHJlc2hvbGQgb2YuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRocmVob2xkIHZhbHVlLlxuICAgKi9cbiAgZ2V0QmxlbmRUaHJlc2hvbGQobmFtZSkge1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IHRoaXMuX3RocmVzaG9sZHMuZmluZChcbiAgICAgIHRocmVzaG9sZCA9PiB0aHJlc2hvbGQubmFtZSA9PT0gbmFtZVxuICAgICk7XG5cbiAgICBpZiAodGhyZXNob2xkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBnZXQgYmxlbmQgdGhyZXNob2xkIG9mIHN0YXRlICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBObyBzdGF0ZSBleGlzdHMgd2l0aCB0aGF0IG5hbWUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhyZXNob2xkLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRocmVzaG9sZCB2YWx1ZSBvZiBhIGJsZW5kIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCB0byBzZXQgdGhlIHRocmVzaG9sZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVmFsdWUgb2YgdGhlIHRocmVzaG9sZCB0byBzZXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFNldCB0aHJlc2hvbGQgdmFsdWUuXG4gICAqL1xuICBzZXRCbGVuZFRocmVzaG9sZChuYW1lLCB2YWx1ZSkge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYWxyZWFkeSBhIHN0YXRlIHdpdGggdGhpcyB0aHJlc2hvbGRcbiAgICBjb25zdCBzYW1lVmFsdWUgPSB0aGlzLl90aHJlc2hvbGRzLmZpbmQoXG4gICAgICB0aHJlc2hvbGQgPT4gdGhyZXNob2xkLnZhbHVlID09PSB2YWx1ZVxuICAgICk7XG4gICAgaWYgKHNhbWVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3Qgc2V0IGJsZW5kIHRocmVzaG9sZCBvZiAke3ZhbHVlfSBmb3Igc3RhdGUgJHtuYW1lfSBvbiAke3RoaXMubmFtZX0uIEEgc3RhdGUgYWxyZWFkeSBleGlzdHMgd2l0aCB0aGF0IHRocmVzaG9sZC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHRocmVzaG9sZCA9IHRoaXMuX3RocmVzaG9sZHMuZmluZChcbiAgICAgIHRocmVzaG9sZCA9PiB0aHJlc2hvbGQubmFtZSA9PT0gbmFtZVxuICAgICk7XG5cbiAgICBpZiAodGhyZXNob2xkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBzZXQgYmxlbmQgdGhyZXNob2xkIG9mIHN0YXRlICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBObyBzdGF0ZSBleGlzdHMgd2l0aCB0aGF0IG5hbWUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aHJlc2hvbGQudmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuX3NvcnRUaHJlc2hvbGRzKCk7XG5cbiAgICByZXR1cm4gdGhyZXNob2xkLnZhbHVlO1xuICB9XG5cbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XG4gICAgc3VwZXIudXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKTtcblxuICAgIGlmICh0aGlzLl9waGFzZUxlYWRTdGF0ZSkge1xuICAgICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgICBpZiAoc3RhdGUud2VpZ2h0ICE9PSAwKSB7XG4gICAgICAgICAgc3RhdGUubm9ybWFsaXplZFRpbWUgPSB0aGlzLl9waGFzZUxlYWRTdGF0ZS5ub3JtYWxpemVkVGltZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGJsZW5kIHdlaWdodHMgYmFzZWQgb24gdGhlaXIgY29ycmVzcG9uZGluZyB0aHJlc2hvbGQgdmFsdWVzXG4gICAqIGFuZCB0aGUgY3VycmVudCBibGVuZFZhbHVlLiBBZGRpdGlvbmFsbHksIHNldHMgYSBsZWFkIHBoYXNlIHN0YXRlIGlmIHRoZVxuICAgKiBjb25kaXRpb25zIGZvciBwaGFzZS1tYXRjaGluZyBoYXZlIGJlZW4gc2F0aXNmaWVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZUJsZW5kV2VpZ2h0cygpIHtcbiAgICBpZiAodGhpcy5fdGhyZXNob2xkcy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGlmICh0aGlzLl90aHJlc2hvbGRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRoaXMuX3RocmVzaG9sZHNbMF0ubmFtZSk7XG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGx5IHNldCBhbGwgc3ViLXN0YXRlIHdlaWdodHMgdG8gemVyb1xuICAgIHRoaXMuX3N0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIHN0YXRlLnNldFdlaWdodCgwKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcblxuICAgIC8vIEZpbmQgdGhlIGZpcnN0IHRocmVzaG9sZCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgcGFyYW1ldGVyIHZhbHVlXG4gICAgbGV0IHRhcmdldEluZGV4ID0gdGhpcy5fdGhyZXNob2xkcy5maW5kSW5kZXgodGhyZXNob2xkID0+IHtcbiAgICAgIHJldHVybiB0aHJlc2hvbGQudmFsdWUgPj0gdGhpcy5fYmxlbmRWYWx1ZTtcbiAgICB9KTtcblxuICAgIGlmICh0YXJnZXRJbmRleCA9PT0gMCB8fCB0YXJnZXRJbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vIEdpdmUgb25lIHN0YXRlIGZ1bGwgaW5mbHVlbmNlXG4gICAgICB0YXJnZXRJbmRleCA9IHRhcmdldEluZGV4ID09PSAtMSA/IHRoaXMuX3RocmVzaG9sZHMubGVuZ3RoIC0gMSA6IDA7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3N0YXRlcy5nZXQodGhpcy5fdGhyZXNob2xkc1t0YXJnZXRJbmRleF0ubmFtZSk7XG4gICAgICBzdGF0ZS5zZXRXZWlnaHQoMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpbmVhciBpbnRlcnBvbGF0ZSBpbmZsdWVuY2UgYmV0d2VlbiB0d28gc3RhdGVzXG4gICAgICBjb25zdCB0aHJlc2hvbGRBID0gdGhpcy5fdGhyZXNob2xkc1t0YXJnZXRJbmRleCAtIDFdO1xuICAgICAgY29uc3QgdGhyZXNob2xkQiA9IHRoaXMuX3RocmVzaG9sZHNbdGFyZ2V0SW5kZXhdO1xuXG4gICAgICBjb25zdCBmYWN0b3JCID1cbiAgICAgICAgKHRoaXMuYmxlbmRWYWx1ZSAtIHRocmVzaG9sZEEudmFsdWUpIC9cbiAgICAgICAgKHRocmVzaG9sZEIudmFsdWUgLSB0aHJlc2hvbGRBLnZhbHVlKTtcbiAgICAgIGNvbnN0IGZhY3RvckEgPSAxIC0gZmFjdG9yQjtcblxuICAgICAgY29uc3Qgc3RhdGVBID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRBLm5hbWUpO1xuICAgICAgY29uc3Qgc3RhdGVCID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRCLm5hbWUpO1xuXG4gICAgICBzdGF0ZUEuc2V0V2VpZ2h0KGZhY3RvckEpO1xuICAgICAgc3RhdGVCLnNldFdlaWdodChmYWN0b3JCKTtcblxuICAgICAgLy8gU2V0IHBoYXNlLW1hdGNoaW5nIGlmIG5lZWRlZFxuICAgICAgaWYgKHRocmVzaG9sZEEucGhhc2VNYXRjaCAmJiB0aHJlc2hvbGRCLnBoYXNlTWF0Y2gpIHtcbiAgICAgICAgdGhpcy5fcGhhc2VMZWFkU3RhdGUgPSBmYWN0b3JBID4gZmFjdG9yQiA/IHN0YXRlQSA6IHN0YXRlQjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU29ydHMgdGhlIHRocmVzaG9sZHMgZnJvbSBsb3cgdG8gaGlnaCBiYXNlZCBvbiB2YWx1ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zb3J0VGhyZXNob2xkcygpIHtcbiAgICB0aGlzLl90aHJlc2hvbGRzLnNvcnQoKGEsIGIpID0+IGEudmFsdWUgLSBiLnZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCbGVuZDFkU3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xuaW1wb3J0IEFic3RyYWN0QmxlbmRTdGF0ZSBmcm9tICcuL0Fic3RyYWN0QmxlbmRTdGF0ZSc7XG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnLi4vQW5pbWF0aW9uVXRpbHMnO1xuXG4vKipcbiAqIENsYXNzIGZvciBibGVuZGluZyBOIG51bWJlciBvZiBibGVuZCBzdGF0ZXMgYmFzZWQgb24gdHdvXG4gKiBwYXJhbXRlcnMuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RCbGVuZFN0YXRlXG4gKi9cbmNsYXNzIEJsZW5kMmRTdGF0ZSBleHRlbmRzIEFic3RyYWN0QmxlbmRTdGF0ZSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIE9wdGlvbnMgZm9yIHRoZSBjb250YWluZXIgc3RhdGVcbiAgICogQHBhcmFtIHtBcnJheS48QWJzdHJhY3RCbGVuZFN0YXRlPn0gW2JsZW5kU3RhdGVzPVtdXSAtIEJsZW5kIHN0YXRlcyB0byBiZVxuICAgKiBjb250cm9sbGVkIGJ5IHRoaXMgY29udGFpbmVyLlxuICAgKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IFtibGVuZFRocmVzaG9sZHM9W11dIC0gVGhyZXNob2xkIHZhbHVlcyBmb3IgYWN0aXZhdGluZ1xuICAgKiBlYWNoIGJsZW5kIHN0YXRlLlxuICAgKiBAcGFyYW0ge0FycmF5Ljxib29sZWFuPn0gW3BoYXNlTWF0Y2hlcz1bXV0gLSBCb29sZWFucyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90XG4gICAqIGVhY2ggYmxlbmQgc3RhdGUgc2hvdWxkIGJlIHBoYXNlIG1hdGNoZWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zID0ge30sXG4gICAgYmxlbmRTdGF0ZXMgPSBbXSxcbiAgICBibGVuZFRocmVzaG9sZHMgPSBbXSxcbiAgICBwaGFzZU1hdGNoZXMgPSBbXVxuICApIHtcbiAgICBzdXBlcihvcHRpb25zLCBibGVuZFN0YXRlcyk7XG5cbiAgICBpZiAoYmxlbmRTdGF0ZXMubGVuZ3RoICE9PSBibGVuZFRocmVzaG9sZHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIEJsZW5kMmRTdGF0ZSB3aXRoIGJsZW5kU3RhdGVzICR7YmxlbmRTdGF0ZXN9IGFuZCBibGVuZFRocmVzaG9sZHMgJHtibGVuZFRocmVzaG9sZHN9LiBDb3VudCBvZiBibGVuZFN0YXRlcyBtdXN0IG1hdGNoIGNvdW50IG9mIGJsZW5kVGhyZXNob2xkcy5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGJsZW5kVGhyZXNob2xkc1xuICAgICAgLnNsaWNlKDAsIGJsZW5kVGhyZXNob2xkcy5sZW5ndGggLSAxKVxuICAgICAgLmZvckVhY2goKHRocmVzaG9sZCwgaW5kZXgpID0+IHtcbiAgICAgICAgYmxlbmRUaHJlc2hvbGRzLnNsaWNlKGluZGV4ICsgMSkuZm9yRWFjaChvdGhlclRocmVzaG9sZCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhyZXNob2xkWzBdID09PSBvdGhlclRocmVzaG9sZFswXSAmJlxuICAgICAgICAgICAgdGhyZXNob2xkWzFdID09PSBvdGhlclRocmVzaG9sZFsxXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgQ2Fubm90IGNyZWF0ZSBCbGVuZDJkU3RhdGUgd2l0aCBibGVuZFRocmVzaG9sZHMgJHtibGVuZFRocmVzaG9sZHN9LiBObyBkdXBsaWNhdGUgdmFsdWVzIGFsbG93ZWQgaW4gYmxlbmRUaHJlc2hvbGRzLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fYmxlbmRWYWx1ZVggPSAwO1xuICAgIHRoaXMuX2JsZW5kVmFsdWVZID0gMDtcblxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xuICAgICAgLi4udGhpcy5fcHJvbWlzZXMsXG4gICAgICBibGVuZFZhbHVlWDogRGVmZXJyZWQucmVzb2x2ZSgpLFxuICAgICAgYmxlbmRWYWx1ZVk6IERlZmVycmVkLnJlc29sdmUoKSxcbiAgICB9O1xuXG4gICAgdGhpcy5fdGhyZXNob2xkcyA9IFtdO1xuICAgIFsuLi50aGlzLl9zdGF0ZXMudmFsdWVzKCldLmZvckVhY2goKHN0YXRlLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5fdGhyZXNob2xkcy5wdXNoKHtcbiAgICAgICAgbmFtZTogc3RhdGUubmFtZSxcbiAgICAgICAgcGhhc2VNYXRjaDogcGhhc2VNYXRjaGVzW2luZGV4XSB8fCBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fdmVydGljZXMgPSBibGVuZFRocmVzaG9sZHM7XG5cbiAgICBpZiAodGhpcy5fdmVydGljZXMubGVuZ3RoID49IDMpIHtcbiAgICAgIHRoaXMuX3RyaWFuZ2xlcyA9IE1hdGhVdGlscy5nZXREZWxhdW5heVRyaWFuZ3VsYXRpb24odGhpcy5fdmVydGljZXMpO1xuICAgIH1cblxuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcblxuICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQgb3ZlciB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgYmxlbmQgd2VpZ2h0IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHdlaWdodCAtIFRhcmdldCB3ZWlnaHQgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXG4gICAqIHRhcmdldCB2YWx1ZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGludGVycG9sYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHNldEJsZW5kV2VpZ2h0KG5hbWUsIHZhbHVlLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IGBibGVuZFZhbHVlJHtuYW1lLnRvVXBwZXJDYXNlKCl9YDtcbiAgICBpZiAocHJvcGVydHkgIT09ICdibGVuZFZhbHVlWCcgJiYgcHJvcGVydHkgIT09ICdibGVuZFZhbHVlWScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBzZXQgYmxlbmQgd2VpZ2h0IGZvciAke25hbWV9IG9uICR7dGhpcy5uYW1lfS4gQmxlbmQyZFN0YXRlIG9ubHkgYWNjZXB0cyAnWCcgb3IgJ1knIGZvciBzZXRCbGVuZFdlaWdodGBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvbWlzZXNbcHJvcGVydHldLmNhbmNlbCgpO1xuXG4gICAgdGhpcy5fcHJvbWlzZXNbcHJvcGVydHldID0gQW5pbWF0aW9uVXRpbHMuaW50ZXJwb2xhdGVQcm9wZXJ0eShcbiAgICAgIHRoaXMsXG4gICAgICBwcm9wZXJ0eSxcbiAgICAgIHZhbHVlLFxuICAgICAge1xuICAgICAgICBzZWNvbmRzLFxuICAgICAgICBlYXNpbmdGbixcbiAgICAgICAgb25Qcm9ncmVzczogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xuICAgICAgICB9LFxuICAgICAgICBvbkZpbmlzaDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZUJsZW5kV2VpZ2h0cygpO1xuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXNbcHJvcGVydHldO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHVzZXIgZGVmaW5lZCB3ZWlnaHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiBibGVuZCB3ZWlnaHQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRCbGVuZFdlaWdodChuYW1lKSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSBuYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKHByb3BlcnR5ICE9PSAnWCcgJiYgcHJvcGVydHkgIT09ICdZJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgZm9yICR7bmFtZX0gb24gJHt0aGlzLm5hbWV9LiBCbGVuZDJkU3RhdGUgb25seSBhY2NlcHRzICdYJyBvciAnWScgZm9yIGdldEJsZW5kV2VpZ2h0YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydHkgPT09ICdYJyA/IHRoaXMuX2JsZW5kVmFsdWVYIDogdGhpcy5fYmxlbmRWYWx1ZVk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgeCBibGVuZCB3ZWlnaHQuXG4gICAqL1xuICBnZXQgYmxlbmRWYWx1ZVgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JsZW5kVmFsdWVYO1xuICB9XG5cbiAgc2V0IGJsZW5kVmFsdWVYKHZhbHVlKSB7XG4gICAgdGhpcy5fYmxlbmRWYWx1ZVggPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB5IGJsZW5kIHdlaWdodC5cbiAgICovXG4gIGdldCBibGVuZFZhbHVlWSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYmxlbmRWYWx1ZVk7XG4gIH1cblxuICBzZXQgYmxlbmRWYWx1ZVkodmFsdWUpIHtcbiAgICB0aGlzLl9ibGVuZFZhbHVlWSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHggYmxlbmQgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxuICAgKi9cbiAgZ2V0IGJsZW5kVmFsdWVYUGVuZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZVggJiYgdGhpcy5fcHJvbWlzZXMuYmxlbmRWYWx1ZVgucGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSB5IGJsZW5kIHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyBhbmltYXRlZC5cbiAgICovXG4gIGdldCBibGVuZFZhbHVlWVBlbmRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWVZICYmIHRoaXMuX3Byb21pc2VzLmJsZW5kVmFsdWVZLnBlbmRpbmc7XG4gIH1cblxuICB1cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpIHtcbiAgICBzdXBlci51cGRhdGVJbnRlcm5hbFdlaWdodChmYWN0b3IpO1xuXG4gICAgaWYgKHRoaXMuX3BoYXNlTGVhZFN0YXRlKSB7XG4gICAgICBbLi4udGhpcy5fc3RhdGVzLnZhbHVlcygpXS5mb3JFYWNoKChzdGF0ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHN0YXRlLndlaWdodCAhPT0gMCAmJiB0aGlzLl90aHJlc2hvbGRzW2luZGV4XS5waGFzZU1hdGNoKSB7XG4gICAgICAgICAgc3RhdGUubm9ybWFsaXplZFRpbWUgPSB0aGlzLl9waGFzZUxlYWRTdGF0ZS5ub3JtYWxpemVkVGltZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGJsZW5kIHdlaWdodHMgYmFzZWQgb24gdGhlaXIgY29ycmVzcG9uZGluZyB0aHJlc2hvbGQgdmFsdWVzXG4gICAqIGFuZCB0aGUgY3VycmVudCBbeCx5XSBibGVuZFZhbHVlLiBBZGRpdGlvbmFsbHksIHNldHMgYSBsZWFkIHBoYXNlIHN0YXRlIGlmIHRoZVxuICAgKiBjb25kaXRpb25zIGZvciBwaGFzZS1tYXRjaGluZyBoYXZlIGJlZW4gc2F0aXNmaWVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3VwZGF0ZUJsZW5kV2VpZ2h0cygpIHtcbiAgICBpZiAoIXRoaXMuX3ZlcnRpY2VzIHx8IHRoaXMuX3ZlcnRpY2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuX3ZlcnRpY2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgWy4uLnRoaXMuX3N0YXRlcy52YWx1ZXMoKV1bMF0ud2VpZ2h0ID0gMTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsbHkgc2V0IGFsbCBzdWItc3RhdGUgd2VpZ2h0cyB0byB6ZXJvXG4gICAgdGhpcy5fc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgc3RhdGUuc2V0V2VpZ2h0KDApO1xuICAgIH0pO1xuICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gbnVsbDtcblxuICAgIGNvbnN0IHAgPSBbdGhpcy5fYmxlbmRWYWx1ZVgsIHRoaXMuX2JsZW5kVmFsdWVZXTtcblxuICAgIGlmICh0aGlzLl92ZXJ0aWNlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRoaXMuX3NldEluZmx1ZW5jZUNsb3Nlc3RQb2ludE9uTGluZShwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHJpYW5nbGUgPSB0aGlzLl90cmlhbmdsZXMuZmluZCh0cmlhbmdsZSA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoVXRpbHMuaXNQb2ludEluVHJpYW5nbGUoXG4gICAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxuICAgICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzFdXSxcbiAgICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsyXV0sXG4gICAgICAgICAgcFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0cmlhbmdsZSkge1xuICAgICAgICB0aGlzLl9zZXRJbmZsdWVuY2VUcmlhbmdsZSh0cmlhbmdsZSwgcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRJblRyaWFuZ2xlcyhwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBibGVuZCB3ZWlnaHRzIGZvciBzdGF0ZXMgY29ycmVzcG9uZGluZyB0byBhXG4gICAqIHRyaWFuZ2xlIG9mIHRocmVzaG9sZHMgYW5kIGEgZ2l2ZW4gW3gseV0gYmxlbmRWYWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPEFycmF5LjxudW1iZXI+Pn0gdHJpYW5nbGUgLSBTZXQgb2YgdHJpYW5nbHVhdGVkIGluZGljZXNcbiAgICogdGhhdCBjb3JyZXNwb25kIHRvIGJsZW5kIHRocmVzaG9sZHMuXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSBHaXZlbiBbeCx5XSBibGVuZFZhbHVlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldEluZmx1ZW5jZVRyaWFuZ2xlKHRyaWFuZ2xlLCBwKSB7XG4gICAgY29uc3QgYXJlYUEgPSBNYXRoVXRpbHMudHJpYW5nbGVBcmVhKFxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMV1dLFxuICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMl1dLFxuICAgICAgcFxuICAgICk7XG5cbiAgICBjb25zdCBhcmVhQiA9IE1hdGhVdGlscy50cmlhbmdsZUFyZWEoXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVswXV0sXG4gICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsyXV0sXG4gICAgICBwXG4gICAgKTtcblxuICAgIGNvbnN0IGFyZWFDID0gTWF0aFV0aWxzLnRyaWFuZ2xlQXJlYShcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzBdXSxcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzFdXSxcbiAgICAgIHBcbiAgICApO1xuXG4gICAgY29uc3QgdG90YWxBcmVhID0gYXJlYUEgKyBhcmVhQiArIGFyZWFDO1xuXG4gICAgY29uc3Qgd2VpZ2h0QSA9IGFyZWFBIC8gdG90YWxBcmVhO1xuICAgIGNvbnN0IHdlaWdodEIgPSBhcmVhQiAvIHRvdGFsQXJlYTtcbiAgICBjb25zdCB3ZWlnaHRDID0gYXJlYUMgLyB0b3RhbEFyZWE7XG5cbiAgICBjb25zdCB0aHJlc2hvbGRBID0gdGhpcy5fdGhyZXNob2xkc1t0cmlhbmdsZVswXV07XG4gICAgY29uc3QgdGhyZXNob2xkQiA9IHRoaXMuX3RocmVzaG9sZHNbdHJpYW5nbGVbMV1dO1xuICAgIGNvbnN0IHRocmVzaG9sZEMgPSB0aGlzLl90aHJlc2hvbGRzW3RyaWFuZ2xlWzJdXTtcblxuICAgIGNvbnN0IHN0YXRlQSA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQS5uYW1lKTtcbiAgICBjb25zdCBzdGF0ZUIgPSB0aGlzLl9zdGF0ZXMuZ2V0KHRocmVzaG9sZEIubmFtZSk7XG4gICAgY29uc3Qgc3RhdGVDID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRDLm5hbWUpO1xuXG4gICAgc3RhdGVBLnNldFdlaWdodCh3ZWlnaHRBKTtcbiAgICBzdGF0ZUIuc2V0V2VpZ2h0KHdlaWdodEIpO1xuICAgIHN0YXRlQy5zZXRXZWlnaHQod2VpZ2h0Qyk7XG5cbiAgICB0aGlzLl9zZXRQaGFzZUxlYWRTdGF0ZShcbiAgICAgIFtzdGF0ZUEsIHN0YXRlQiwgc3RhdGVDXSxcbiAgICAgIFt0aHJlc2hvbGRBLnBoYXNlTWF0Y2gsIHRocmVzaG9sZEIucGhhc2VNYXRjaCwgdGhyZXNob2xkQy5waGFzZU1hdGNoXVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgY2xvc2VzdCBwb2ludCB3aXRoaW4gYSB0cmlhbmdsZSBvZlxuICAgKiB0aHJlc2hvbGRzIGJhc2VkIG9uIHRoZSBjdXJyZW50IFt4LHldIGJsZW5kVmFsdWVzIGFuZFxuICAgKiB0aGVuIHNldHMgYmxlbmQgd2VpZ2h0cyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwIC0gR2l2ZW4gW3gseV0gYmxlbmRWYWx1ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRJbmZsdWVuY2VDbG9zZXN0UG9pbnRJblRyaWFuZ2xlcyhwKSB7XG4gICAgbGV0IGdsb2JhbENsb3Nlc3RQb2ludCA9IG51bGw7XG4gICAgbGV0IGdsb2JhbE1pbkRpc3QgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgbGV0IGNsb3Nlc3RUcmlhbmdsZSA9IC0xO1xuXG4gICAgdGhpcy5fdHJpYW5nbGVzLmZvckVhY2goKHRyaWFuZ2xlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcG9pbnRBID0gTWF0aFV0aWxzLmNsb3Nlc3RQb2ludE9uTGluZShcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxuICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsxXV0sXG4gICAgICAgIHBcbiAgICAgICk7XG4gICAgICBjb25zdCBwb2ludEIgPSBNYXRoVXRpbHMuY2xvc2VzdFBvaW50T25MaW5lKFxuICAgICAgICB0aGlzLl92ZXJ0aWNlc1t0cmlhbmdsZVsxXV0sXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzJdXSxcbiAgICAgICAgcFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBvaW50QyA9IE1hdGhVdGlscy5jbG9zZXN0UG9pbnRPbkxpbmUoXG4gICAgICAgIHRoaXMuX3ZlcnRpY2VzW3RyaWFuZ2xlWzJdXSxcbiAgICAgICAgdGhpcy5fdmVydGljZXNbdHJpYW5nbGVbMF1dLFxuICAgICAgICBwXG4gICAgICApO1xuXG4gICAgICBjb25zdCBkaXN0QSA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQocG9pbnRBLCBwKTtcbiAgICAgIGNvbnN0IGRpc3RCID0gTWF0aFV0aWxzLmRpc3RhbmNlU3F1YXJlZChwb2ludEIsIHApO1xuICAgICAgY29uc3QgZGlzdEMgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKHBvaW50QywgcCk7XG5cbiAgICAgIGxldCBsb2NhbENsb3Nlc3RQb2ludCA9IHBvaW50QztcbiAgICAgIGxldCBsb2NhbE1pbkRpc3QgPSBkaXN0QztcblxuICAgICAgaWYgKGRpc3RBIDwgbG9jYWxNaW5EaXN0KSB7XG4gICAgICAgIGxvY2FsQ2xvc2VzdFBvaW50ID0gcG9pbnRBO1xuICAgICAgICBsb2NhbE1pbkRpc3QgPSBkaXN0QTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXN0QiA8IGxvY2FsTWluRGlzdCkge1xuICAgICAgICBsb2NhbENsb3Nlc3RQb2ludCA9IHBvaW50QjtcbiAgICAgICAgbG9jYWxNaW5EaXN0ID0gZGlzdEI7XG4gICAgICB9XG5cbiAgICAgIGlmIChsb2NhbE1pbkRpc3QgPCBnbG9iYWxNaW5EaXN0KSB7XG4gICAgICAgIGdsb2JhbE1pbkRpc3QgPSBsb2NhbE1pbkRpc3Q7XG4gICAgICAgIGdsb2JhbENsb3Nlc3RQb2ludCA9IFsuLi5sb2NhbENsb3Nlc3RQb2ludF07XG4gICAgICAgIGNsb3Nlc3RUcmlhbmdsZSA9IGluZGV4O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fc2V0SW5mbHVlbmNlVHJpYW5nbGUoXG4gICAgICB0aGlzLl90cmlhbmdsZXNbY2xvc2VzdFRyaWFuZ2xlXSxcbiAgICAgIGdsb2JhbENsb3Nlc3RQb2ludFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgY2xvc2VzdCBwb2ludCBvbiB0aGUgbGluZSBmb3JtZWQgYmV0d2VlbiB0aGVcbiAgICogdHdvIGJsZW5kIHRocmVzaG9sZHMgYmFzZWQgb24gdGhlIGN1cnJlbnQgW3gseV0gYmxlbmRWYWx1ZXMgYW5kXG4gICAqIHRoZW4gc2V0cyBibGVuZCB3ZWlnaHRzIGZvciB0aGUgY29ycmVzcG9uZGluZyBzdGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHAgLSBHaXZlbiBbeCx5XSBibGVuZFZhbHVlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldEluZmx1ZW5jZUNsb3Nlc3RQb2ludE9uTGluZShwKSB7XG4gICAgY29uc3QgY2xvc2VzdFBvaW50ID0gTWF0aFV0aWxzLmNsb3Nlc3RQb2ludE9uTGluZShcbiAgICAgIHRoaXMuX3ZlcnRpY2VzW1swXV0sXG4gICAgICB0aGlzLl92ZXJ0aWNlc1tbMV1dLFxuICAgICAgcFxuICAgICk7XG5cbiAgICBjb25zdCBkaXN0QSA9IE1hdGhVdGlscy5kaXN0YW5jZVNxdWFyZWQodGhpcy5fdmVydGljZXNbMF0sIGNsb3Nlc3RQb2ludCk7XG4gICAgY29uc3QgZGlzdEIgPSBNYXRoVXRpbHMuZGlzdGFuY2VTcXVhcmVkKHRoaXMuX3ZlcnRpY2VzWzFdLCBjbG9zZXN0UG9pbnQpO1xuXG4gICAgY29uc3Qgd2VpZ2h0QSA9IGRpc3RCIC8gKGRpc3RBICsgZGlzdEIpO1xuICAgIGNvbnN0IHdlaWdodEIgPSBkaXN0QSAvIChkaXN0QSArIGRpc3RCKTtcblxuICAgIGNvbnN0IHRocmVzaG9sZEEgPSB0aGlzLl90aHJlc2hvbGRzWzBdO1xuICAgIGNvbnN0IHRocmVzaG9sZEIgPSB0aGlzLl90aHJlc2hvbGRzWzFdO1xuXG4gICAgY29uc3Qgc3RhdGVBID0gdGhpcy5fc3RhdGVzLmdldCh0aHJlc2hvbGRBLm5hbWUpO1xuICAgIGNvbnN0IHN0YXRlQiA9IHRoaXMuX3N0YXRlcy5nZXQodGhyZXNob2xkQi5uYW1lKTtcblxuICAgIHN0YXRlQS5zZXRXZWlnaHQod2VpZ2h0QSk7XG4gICAgc3RhdGVCLnNldFdlaWdodCh3ZWlnaHRCKTtcblxuICAgIHRoaXMuX3NldFBoYXNlTGVhZFN0YXRlKFxuICAgICAgW3N0YXRlQSwgc3RhdGVCXSxcbiAgICAgIFt0aHJlc2hvbGRBLnBoYXNlTWF0Y2gsIHRocmVzaG9sZEIucGhhc2VNYXRjaF1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSBsZWFkIHBoYXNlIHN0YXRlIGlmIHRoZSBjb25kaXRpb25zXG4gICAqIGZvciBwaGFzZS1tYXRjaGluZyBhcmUgc2F0aXNmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdEJsZW5kU3RhdGU+fSBzdGF0ZXMgLSBTdGF0ZXMgdG9cbiAgICogY2hlY2sgcGhhc2UtbWF0Y2hpbmcgY3JpdGVyaWEuXG4gICAqIEBwYXJhbSB7QXJyYXkuPGJvb2xlYW4+fSBwaGFzZU1hdGNoZWQgLSBMaXN0IG9mIHBoYXNlLW1hdGNoIGJvb2xlYW5zLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3NldFBoYXNlTGVhZFN0YXRlKHN0YXRlcywgcGhhc2VNYXRjaGVkKSB7XG4gICAgbGV0IG1heCA9IDA7XG4gICAgc3RhdGVzLmZvckVhY2goKHN0YXRlLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKHBoYXNlTWF0Y2hlZFtpbmRleF0gJiYgc3RhdGUud2VpZ2h0ID4gbWF4KSB7XG4gICAgICAgIHRoaXMuX3BoYXNlTGVhZFN0YXRlID0gc3RhdGU7XG4gICAgICAgIG1heCA9IHN0YXRlLndlaWdodDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCbGVuZDJkU3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IEFic3RyYWN0QmxlbmRTdGF0ZSBmcm9tICcuL3N0YXRlL0Fic3RyYWN0QmxlbmRTdGF0ZSc7XG5pbXBvcnQgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIGZyb20gJy4vQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlJztcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuL0FuaW1hdGlvblV0aWxzJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi4vTWF0aFV0aWxzJztcbmltcG9ydCBEZWZlcnJlZCBmcm9tICcuLi9EZWZlcnJlZCc7XG5pbXBvcnQgU3RhdGVDb250YWluZXJJbnRlcmZhY2UgZnJvbSAnLi9zdGF0ZS9TdGF0ZUNvbnRhaW5lckludGVyZmFjZSc7XG5cbi8qKlxuICogRW51bSBmb3IgdHlwZXMgb2Yge0BsaW5rIEFuaW1hdGlvbkxheWVyfSBibGVuZGluZy5cbiAqXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBMYXllckJsZW5kTW9kZXMgPSB7T3ZlcnJpZGU6ICdPdmVycmlkZScsIEFkZGl0aXZlOiAnQWRkaXRpdmUnfTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBibGVuZGluZyBtb2RlIHtAbGluayBBbmltYXRpb25MYXllcn0uXG4gKlxuICogQHJlYWRvbmx5XG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdExheWVyQmxlbmRNb2RlID0gJ092ZXJyaWRlJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBibGVuZE1vZGUgaXMgcHJlc2VudCBpbiB0aGUgdmFsdWVzIG9mIHtAbGluayBMYXllckJsZW5kTW9kZXN9LlxuICogSWYgaXQgaXMsIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUsIG90aGVyd2lzZSByZXR1cm4ge0BsaW5rIERlZmF1bHRMYXllckJsZW5kTW9kZX0uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTW9kZSAtIFRoZSBuYW1lIG9mIHRoZSB0eXBlIG9mIGJsZW5kaW5nLlxuICpcbiAqIEByZXR1cm5zIHsoc3RyaW5nfERlZmF1bHRMYXllckJsZW5kTW9kZSl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJsZW5kTW9kZShibGVuZE1vZGUpIHtcbiAgaWYgKEFycmF5LmZyb20oT2JqZWN0LnZhbHVlcyhMYXllckJsZW5kTW9kZXMpKS5pbmNsdWRlcyhibGVuZE1vZGUpKSB7XG4gICAgcmV0dXJuIGJsZW5kTW9kZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gRGVmYXVsdExheWVyQmxlbmRNb2RlO1xuICB9XG59XG5cbi8qKlxuICogQ2xhc3MgZm9yIG1hbmFnaW5nIGEgc2V0IG9mIGFuaW1hdGlvbnMgd2hlcmUgb25seSBvbmUgc3RhdGUgY2FuIGJlIGFjdGl2ZSBhdFxuICogYW55IGdpdmVuIHRpbWUuXG4gKlxuICogQGltcGxlbWVudHMgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlXG4gKiBAaW1wbGVtZW50cyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZVxuICovXG5jbGFzcyBBbmltYXRpb25MYXllciBleHRlbmRzIEFuaW1hdGlvblBsYXllckludGVyZmFjZS5NaXhpbihcbiAgU3RhdGVDb250YWluZXJJbnRlcmZhY2UuTWl4aW4oKVxuKSB7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gIE9wdGlvbnMgZm9yIHRoZSBhbmltYXRpb24gbGF5ZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm5hbWUgLSBOYW1lIG9mIHRoZSBsYXllci4gTmFtZXMgbXVzdCBiZSB1bmlxdWUgdG8gdGhlXG4gICAqIGFuaW1hdGlvbiBmZWF0dXJlIHRoYXQgY29udGFpbnMgdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge0xheWVyQmxlbmRNb2Rlc30gW29wdGlvbnMuYmxlbmRNb2RlPURlZmF1bHRMYXllckJsZW5kTW9kZV0gLVxuICAgKiBUeXBlIG9mIGJsZW5kaW5nIHRvIHVzZSBmb3IgYWxsIHN0YXRlcyBjb250cm9sbGVkIGJ5IHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLndlaWdodD0xXSAtIFRoZSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBsYXllcidzIGN1cnJlbnRcbiAgICogYW5pbWF0aW9uIGhhcyBvdmVyIHRoZSByZXN1bHQgZm9yIHRoZSBob3N0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudHJhbnNpdGlvblRpbWU9MF0gLSBUaGUgZGVmYXVsdCBhbW91bnQgb2YgdGltZSB0byB1c2Ugd2hlblxuICAgKiBwbGF5aW5nIGFuZCByZXN1bWluZyBhbmltYXRpb25zLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIFRoZSBkZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxuICAgKiB0cmFuc2l0aW9uaW5nIGJldHdlZW4gYW5pbWF0aW9ucyBhbmQgc2V0dGluZyBsYXllciB3ZWlnaHQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihvcHRpb25zKTtcblxuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZSA9PT0gdW5kZWZpbmVkID8gJ0FuaW1hdGlvbkxheWVyJyA6IG9wdGlvbnMubmFtZTtcbiAgICB0aGlzLl9ibGVuZE1vZGUgPSBBcnJheS5mcm9tKE9iamVjdC52YWx1ZXMoTGF5ZXJCbGVuZE1vZGVzKSkuaW5jbHVkZXMoXG4gICAgICBvcHRpb25zLmJsZW5kTW9kZVxuICAgIClcbiAgICAgID8gb3B0aW9ucy5ibGVuZE1vZGVcbiAgICAgIDogRGVmYXVsdExheWVyQmxlbmRNb2RlO1xuICAgIHRoaXMuX3Byb21pc2VzID0ge1xuICAgICAgd2VpZ2h0OiBEZWZlcnJlZC5yZXNvbHZlKCksXG4gICAgfTtcbiAgICB0aGlzLl93ZWlnaHRQYXVzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMud2VpZ2h0ID0gdHlwZW9mIG9wdGlvbnMud2VpZ2h0ID09PSAnbnVtYmVyJyA/IG9wdGlvbnMud2VpZ2h0IDogMTtcbiAgICB0aGlzLl9pbnRlcm5hbFdlaWdodCA9IHRoaXMuX3dlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0eXBlIG9mIGJsZW5kaW5nIHVzZWQgZm9yIHN0YXRlcyBjb250cm9sbGVkIGJ5IHRoZSBsYXllci5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgYmxlbmRNb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9ibGVuZE1vZGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgYW1vdW50IG9mIGluZmx1ZW5jZSB0aGUgbGF5ZXIncyBjdXJyZW50IGFuaW1hdGlvbiBoYXMgb3ZlclxuICAgKiB0aGUgcmVzdWx0IGZvciB0aGUgaG9zdC5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIHNldCB3ZWlnaHQod2VpZ2h0KSB7XG4gICAgdGhpcy5fd2VpZ2h0ID0gTWF0aFV0aWxzLmNsYW1wKHdlaWdodCwgMCwgMSk7XG4gIH1cblxuICBnZXQgd2VpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl93ZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIG9yIG5vdCB0aGUgbGF5ZXIncyB3ZWlnaHQgdmFsdWUgaXMgY3VycmVudGx5IGJlaW5nIGFuaW1hdGVkLlxuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBnZXQgd2VpZ2h0UGVuZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMud2VpZ2h0ICYmIHRoaXMuX3Byb21pc2VzLndlaWdodC5wZW5kaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhdXNlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZSBhbmQgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzXG4gICAqIHdlaWdodCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwYXVzZSgpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xuICAgIHRoaXMuX3dlaWdodFBhdXNlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wYXVzZUFuaW1hdGlvbigpIHx8IHRoaXMud2VpZ2h0UGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHN0YXRlIGFuZCBhbnkgaW50ZXJwb2xhdGlvbiBoYXBwZW5pbmcgb24gdGhlIGxheWVyJ3NcbiAgICogd2VpZ2h0IHByb3BlcnR5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHJlc3VtZSgpIHtcbiAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLl93ZWlnaHRQYXVzZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGlzV2VpZ2h0QWN0aXZlID0gdGhpcy53ZWlnaHRQZW5kaW5nO1xuXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzdW1lQW5pbWF0aW9uKCkgfHwgaXNXZWlnaHRBY3RpdmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpc1dlaWdodEFjdGl2ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdXNlciBkZWZpbmVkIHdlaWdodCBvdmVyIHRpbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUaGUgdGFyZ2V0IHdlaWdodCB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmRzPTBdIC0gVGhlIGFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGVcbiAgICogdGFyZ2V0IHdlaWdodC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGludGVycG9sYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH1cbiAgICovXG4gIHNldFdlaWdodCh3ZWlnaHQsIHNlY29uZHMgPSAwLCBlYXNpbmdGbikge1xuICAgIGlmICh0aGlzLndlaWdodFBlbmRpbmcpIHtcbiAgICAgIHRoaXMuX3Byb21pc2VzLndlaWdodC5jYW5jZWwoKTtcbiAgICB9XG5cbiAgICB3ZWlnaHQgPSBNYXRoVXRpbHMuY2xhbXAod2VpZ2h0KTtcbiAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxuICAgICAgdGhpcyxcbiAgICAgICd3ZWlnaHQnLFxuICAgICAgd2VpZ2h0LFxuICAgICAge1xuICAgICAgICBzZWNvbmRzLFxuICAgICAgICBlYXNpbmdGbjogZWFzaW5nRm4gIT09IHVuZGVmaW5lZCA/IGVhc2luZ0ZuIDogdGhpcy5fZWFzaW5nRm4sXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy53ZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogUGF1c2UgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzIHdlaWdodCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwYXVzZVdlaWdodCgpIHtcbiAgICB0aGlzLl93ZWlnaHRQYXVzZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMud2VpZ2h0UGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWUgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBsYXllcidzIHdlaWdodCBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICByZXN1bWVXZWlnaHQoKSB7XG4gICAgdGhpcy5fd2VpZ2h0UGF1c2VkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gdGhpcy53ZWlnaHRQZW5kaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIE11bHRpcGxpZXMgdGhlIHVzZXIgd2VpZ2h0IGJ5IGEgZmFjdG9yIHRvIGRldGVybWluZSB0aGUgaW50ZXJuYWwgd2VpZ2h0LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZmFjdG9yIC0gMC0xIG11bHRpcGxpZXIgdG8gYXBwbHkgdG8gdGhlIHVzZXIgd2VpZ2h0LlxuICAgKi9cbiAgdXBkYXRlSW50ZXJuYWxXZWlnaHQoZmFjdG9yKSB7XG4gICAgdGhpcy5faW50ZXJuYWxXZWlnaHQgPSB0aGlzLl93ZWlnaHQgKiBmYWN0b3I7XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBibGVuZCBzdGF0ZXMgaW4gYW4gYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSAtIE5hbWVzIG9mIGJsZW5kIHN0YXRlcy5cbiAgICovXG4gIGdldEFuaW1hdGlvbkJsZW5kTmFtZXMoYW5pbWF0aW9uTmFtZSkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdGF0ZShhbmltYXRpb25OYW1lKTtcblxuICAgIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgZ2V0IGJsZW5kIG5hbWVzIG9mIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7dGhpcy5uYW1lfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEFic3RyYWN0QmxlbmRTdGF0ZSkge1xuICAgICAgcmV0dXJuIHN0YXRlLmdldFN0YXRlTmFtZXMoKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IGdldCBibGVuZCBuYW1lcyBvZiBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke3RoaXMubmFtZX0uIEFuaW1hdGlvbiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgQWJzdHJhY3RCbGVuZFN0YXRlLmBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgd2VpZ2h0IGZvciBhIGJsZW5kIHN0YXRlIG9mIGFuIGFuaW1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gY29udGFpbmluZyB0aGUgYmxlbmQgc3RhdGVcbiAgICogdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmxlbmROYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgYW5pbWF0aW9uLiBUaGlzIG51bWJlciBzaG91ZGxkIGJlXG4gICAqIGluIHRoZSAwLTEgcmFuZ2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIE51bWJlciBvZiBzZWNvbmRzIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZSBuZXcgd2VpZ2h0LlxuICAgKiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBFYXNpbmcgZnVuY3Rpb24gdG8gdXNlIHdoaWxlIGludGVycG9sYXRpbmcgdGhlIG5ld1xuICAgKiB3ZWlnaHQuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cbiAgICpcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgb25jZSB0aGUgYW5pbWF0aW9uJ3Mgd2VpZ2h0IHJlYWNoZXNcbiAgICogdGhlIHRhcmdldCB2YWx1ZS5cbiAgICovXG4gIHNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxuICAgIGFuaW1hdGlvbk5hbWUsXG4gICAgYmxlbmROYW1lLFxuICAgIHdlaWdodCxcbiAgICBzZWNvbmRzID0gMCxcbiAgICBlYXNpbmdGblxuICApIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoYW5pbWF0aW9uTmFtZSk7XG5cbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHNldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgQWJzdHJhY3RCbGVuZFN0YXRlKSB7XG4gICAgICByZXR1cm4gc3RhdGUuc2V0QmxlbmRXZWlnaHQoYmxlbmROYW1lLCB3ZWlnaHQsIHNlY29uZHMsIGVhc2luZ0ZuKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IHNldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEFic3RyYWN0QmxlbmRTdGF0ZS5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3ZWlnaHQgZm9yIGEgYmxlbmQgc3RhdGUgb2YgYW4gYW5pbWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nIHRoZSBibGVuZCBzdGF0ZVxuICAgKiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBibGVuZE5hbWUgLSBOYW1lIG9mIHRoZSBibGVuZCBzdGF0ZSB0byByZXRyaWV2ZSB0aGUgd2VpZ2h0IG9mLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIFdlaWdodCBvZiB0aGUgYmxlbmQgc3RhdGUuXG4gICAqL1xuICBnZXRBbmltYXRpb25CbGVuZFdlaWdodChhbmltYXRpb25OYW1lLCBibGVuZE5hbWUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoYW5pbWF0aW9uTmFtZSk7XG5cbiAgICBpZiAoc3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBObyBhbmltYXRpb24gZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgQWJzdHJhY3RCbGVuZFN0YXRlKSB7XG4gICAgICByZXR1cm4gc3RhdGUuZ2V0QmxlbmRXZWlnaHQoYmxlbmROYW1lKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IGdldCBibGVuZCB3ZWlnaHQgb2YgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHt0aGlzLm5hbWV9LiBBbmltYXRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEFic3RyYWN0QmxlbmRTdGF0ZS5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYW55IHdlaWdodCBpbnRlcnBvbGF0b3JzIGFuZCB0aGUgY3VycmVudCBhbmltYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXG4gICAqL1xuICB1cGRhdGUoZGVsdGFUaW1lKSB7XG4gICAgc3VwZXIudXBkYXRlKGRlbHRhVGltZSk7XG5cbiAgICBpZiAoIXRoaXMuX3BhdXNlZCAmJiAhdGhpcy5fd2VpZ2h0UGF1c2VkKSB7XG4gICAgICB0aGlzLl9wcm9taXNlcy53ZWlnaHQuZXhlY3V0ZShkZWx0YVRpbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgYW55IHBlbmRpbmcgcHJvbWlzZXMgYW5kIGRpc2NhcmQgc3RhdGVzIGNvbnRyb2xsZWQgYnkgdGhlIGxheWVyLlxuICAgKi9cbiAgZGlzY2FyZCgpIHtcbiAgICBzdXBlci5kaXNjYXJkKCk7XG5cbiAgICB0aGlzLmRpc2NhcmRTdGF0ZXMoKTtcblxuICAgIHRoaXMuX3Byb21pc2VzLndlaWdodC5jYW5jZWwoKTtcbiAgICBkZWxldGUgdGhpcy5fcHJvbWlzZXM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uTGF5ZXI7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xuaW1wb3J0IEFic3RyYWN0U3RhdGUgZnJvbSAnLi9BYnN0cmFjdFN0YXRlJztcbmltcG9ydCB7dmFsaWRhdGVCbGVuZE1vZGV9IGZyb20gJy4uL0FuaW1hdGlvbkxheWVyJztcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICcuLi9BbmltYXRpb25VdGlscyc7XG5cbi8qKlxuICogQ2xhc3MgZm9yIHBsYXlpbmcgYSBzaW5nbGUgYW5pbWF0aW9uIGNsaXAuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RTdGF0ZVxuICogQGFsaWFzIGNvcmUvU2luZ2xlU3RhdGVcbiAqL1xuY2xhc3MgU2luZ2xlU3RhdGUgZXh0ZW5kcyBBYnN0cmFjdFN0YXRlIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcbiAgICogdW5pcXVlIGZvciB0aGUgbGF5ZXIgdGhlIHN0YXRlIGlzIGFwcGxpZWQgdG8uXG4gICAqIEBwYXJhbSB7d2VpZ2h0fSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXG4gICAqIGFuaW1hdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3BDb3VudD1JbmZpbml0eV0gLSBOdW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiBzaG91bGRcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5ibGVuZE1vZGU9RGVmYXVsdExheWVyQmxlbmRNb2RlXSAtIFR5cGUgb2ZcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLl90aW1lU2NhbGUgPSBvcHRpb25zLnRpbWVTY2FsZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy50aW1lU2NhbGUgOiAxO1xuICAgIHRoaXMuX3Byb21pc2VzLnRpbWVTY2FsZSA9IERlZmVycmVkLnJlc29sdmUoKTtcbiAgICB0aGlzLl9sb29wQ291bnQgPVxuICAgICAgb3B0aW9ucy5sb29wQ291bnQgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubG9vcENvdW50IDogSW5maW5pdHk7XG4gICAgdGhpcy5fYmxlbmRNb2RlID0gdmFsaWRhdGVCbGVuZE1vZGUob3B0aW9ucy5ibGVuZE1vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIG5vcm1hbGl6ZWQgcGxheWluZyB0aW1lIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvblxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0IG5vcm1hbGl6ZWRUaW1lKCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgc2V0IG5vcm1hbGl6ZWRUaW1lKHRpbWUpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBhIGZhY3RvciB0byBzY2FsZSBhbmltYXRpb24gcGxheWJhY2sgc3BlZWQgd2l0aC5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIGdldCB0aW1lU2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RpbWVTY2FsZTtcbiAgfVxuXG4gIHNldCB0aW1lU2NhbGUodGltZVNjYWxlKSB7XG4gICAgdGhpcy5fdGltZVNjYWxlID0gdGltZVNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciBvciBub3QgdGhlIHRpbWVTY2FsZSBpcyBjdXJyZW50bHkgYmVpbmcgYW5pbWF0ZWQuXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGdldCB0aW1lU2NhbGVQZW5kaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGUucGVuZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB0aW1lU2NhbGUgdmFsdWUgb3ZlciB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gVGhlIHRhcmdldCB0aW1lU2NhbGUgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIFRoZSBhbW91bnQgb2YgdGltZSBpdCB3aWxsIHRha2UgdG8gcmVhY2ggdGhlXG4gICAqIHRhcmdldCB0aW1lU2NhbGUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIFRoZSBlYXNpbmcgZnVuY3Rpb24gdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9XG4gICAqL1xuICBzZXRUaW1lU2NhbGUodGltZVNjYWxlLCBzZWNvbmRzID0gMCwgZWFzaW5nRm4pIHtcbiAgICB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGUuY2FuY2VsKCk7XG5cbiAgICB0aGlzLl9wcm9taXNlcy50aW1lU2NhbGUgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxuICAgICAgdGhpcyxcbiAgICAgICd0aW1lU2NhbGUnLFxuICAgICAgdGltZVNjYWxlLFxuICAgICAge3NlY29uZHMsIGVhc2luZ0ZufVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMudGltZVNjYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgYW5pbWF0aW9uIHdpbGwgcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbG9vcENvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9sb29wQ291bnQ7XG4gIH1cblxuICBzZXQgbG9vcENvdW50KGxvb3BDb3VudCkge1xuICAgIHRoaXMuX2xvb3BDb3VudCA9IGxvb3BDb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0eXBlIG9mIGJsZW5kaW5nIHVzZWQgZm9yIHRoZSBhbmltYXRpb24uXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0IGJsZW5kTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYmxlbmRNb2RlO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNpbmdsZVN0YXRlO1xuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBBYnN0cmFjdFN0YXRlIGZyb20gJy4vQWJzdHJhY3RTdGF0ZSc7XG5pbXBvcnQgU3RhdGVDb250YWluZXJJbnRlcmZhY2UgZnJvbSAnLi9TdGF0ZUNvbnRhaW5lckludGVyZmFjZSc7XG5pbXBvcnQgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlIGZyb20gJy4uL0FuaW1hdGlvblBsYXllckludGVyZmFjZSc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi4vLi4vVXRpbHMnO1xuXG4vKipcbiAqIENsYXNzIGZvciBwbGF5aW5nIHJhbmRvbSBhbmltYXRpb25zIGF0IHJhbmRvbSBpbnRlcnZhbHMgd2l0aGluIHRoaXMgc3RhdGUuXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RTdGF0ZVxuICogQGltcGxlbWVudHMgQW5pbWF0aW9uUGxheWVySW50ZXJmYWNlXG4gKiBAaW1wbGVtZW50cyBTdGF0ZUNvbnRhaW5lckludGVyZmFjZVxuICovXG5jbGFzcyBSYW5kb21BbmltYXRpb25TdGF0ZSBleHRlbmRzIEFuaW1hdGlvblBsYXllckludGVyZmFjZS5NaXhpbihTdGF0ZUNvbnRhaW5lckludGVyZmFjZS5NaXhpbihBYnN0cmFjdFN0YXRlKSkge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gLSBPcHRpb25zIGZvciB0aGUgY29udGFpbmVyIHN0YXRlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucGxheUludGVydmFsPTNdIC0gVGhlIGJhc2UgYW5pbWF0aW9uIHBsYXliYWNrIGludGVydmFsLlxuICAgKiBAcGFyYW0ge0FycmF5LjxBYnN0cmFjdFN0YXRlPn0gW3N1YlN0YXRlcz1bXV0gLSBzdGF0ZXMgdG8gYmUgcmFuZG9tbHkgcGlja2VkIHRvIHBsYXlcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSwgc3ViU3RhdGVzID0gW10pIHtcbiAgICBzdXBlcihvcHRpb25zKTtcblxuICAgIHRoaXMuX3BsYXlJbnRlcnZhbCA9IG9wdGlvbnMucGxheUludGVydmFsID8gb3B0aW9ucy5wbGF5SW50ZXJ2YWwgOiAzO1xuXG4gICAgc3ViU3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgdGhpcy5hZGRTdGF0ZShzdGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgYmFzZSBhbmltYXRpb24gcGxheSBpbnRlcnZhbFxuICAgKlxuICAgKiBAdHlwZSB7ZmxvYXR9XG4gICAqL1xuICBnZXQgcGxheUludGVydmFsKCkge1xuICAgIHJldHVybiB0aGlzLl9wbGF5SW50ZXJ2YWw7XG4gIH1cblxuICBzZXQgcGxheUludGVydmFsKHBsYXlJbnRlcnZhbCkge1xuICAgIHRoaXMuX3BsYXlJbnRlcnZhbCA9IHBsYXlJbnRlcnZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgaW50ZXJuYWwgdGltZXIgZm9yIGFuaW1hdGlvbiBwbGF5IGludGVydmFsXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzZXRUaW1lcigpIHtcbiAgICBjb25zdCBwbGF5VGltZXIgPSBVdGlscy5nZXRSYW5kb21GbG9hdCh0aGlzLl9wbGF5SW50ZXJ2YWwgLyA0LCB0aGlzLl9wbGF5SW50ZXJ2YWwgKiAyKTtcbiAgICBjb25zdCBvbkZpbmlzaCA9ICgpID0+IHtcbiAgICAgIHRoaXMucGxheVJhbmRvbUFuaW1hdGlvbih0aGlzLl9wbGF5Q2FsbGJhY2tzLm9uRXJyb3IpO1xuICAgIH1cbiAgICB0aGlzLl9wcm9taXNlcy50aW1lciA9IFV0aWxzLndhaXQocGxheVRpbWVyLCB7b25GaW5pc2h9KTtcbiAgfVxuXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XG5cbiAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50U3RhdGUudXBkYXRlSW50ZXJuYWxXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQaWNrIGEgcmFuZG9tIGFuaW1hdGlvbiBhbmQgdXRpbGl6ZSBBbmltYXRpb25QbGF5ZXJJbnRlcmZhY2UgdG8gcGxheSB0aGF0IGFuaW1hdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHN0YXRlIGVuY291bnRlcnNcbiAgICogYW4gZXJyb3IgZHVyaW5nIHBsYXliYWNrLlxuICAgKi9cbiAgcGxheVJhbmRvbUFuaW1hdGlvbihvbkVycm9yKSB7XG4gICAgdGhpcy5fcmVzZXRUaW1lcigpO1xuXG4gICAgY29uc3Qgc3RhdGVzID0gdGhpcy5nZXRTdGF0ZU5hbWVzKCk7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTdGF0ZSkge1xuICAgICAgc3RhdGVzLnNwbGljZShzdGF0ZXMuaW5kZXhPZih0aGlzLl9jdXJyZW50U3RhdGUubmFtZSksIDEpO1xuICAgIH1cbiAgICBjb25zdCByYW5kb21TdGF0ZSA9ICBzdGF0ZXNbVXRpbHMuZ2V0UmFuZG9tSW50KDAsIHN0YXRlcy5sZW5ndGgpXTtcblxuICAgIHRoaXMucGxheUFuaW1hdGlvbihyYW5kb21TdGF0ZSwgdGhpcy5fdHJhbnNpdGlvblRpbWUsIHRoaXMuX2Vhc2luZ0ZuLCB1bmRlZmluZWQsIG9uRXJyb3IsIHVuZGVmaW5lZCk7XG4gIH1cblxuICBwbGF5KG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCkge1xuICAgIHRoaXMucGxheVJhbmRvbUFuaW1hdGlvbihvbkVycm9yKTtcbiAgICByZXR1cm4gc3VwZXIucGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xuICB9XG5cbiAgcGF1c2UoKSB7XG4gICAgcmV0dXJuIHN1cGVyLnBhdXNlKCkgJiYgdGhpcy5wYXVzZUFuaW1hdGlvbigpO1xuICB9XG5cbiAgcmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50U3RhdGUpIHtcbiAgICAgIHRoaXMucmVzdW1lQW5pbWF0aW9uKHRoaXMuX2N1cnJlbnRTdGF0ZS5uYW1lLCB0aGlzLl90cmFuc2l0aW9uVGltZSwgdGhpcy5fZWFzaW5nRm4sIHVuZGVmaW5lZCwgb25FcnJvciwgdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnJlc3VtZShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHJldHVybiBzdXBlci5jYW5jZWwoKSAmJiB0aGlzLmNhbmNlbEFuaW1hdGlvbigpO1xuICB9XG5cbiAgc3RvcCgpIHtcbiAgICByZXR1cm4gc3VwZXIuc3RvcCgpICYmIHRoaXMuc3RvcEFuaW1hdGlvbigpO1xuICB9XG5cbiAgZGlzY2FyZCgpIHtcbiAgICBzdXBlci5kaXNjYXJkKCk7XG4gICAgdGhpcy5kaXNjYXJkU3RhdGVzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmFuZG9tQW5pbWF0aW9uU3RhdGU7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBBYnN0cmFjdEhvc3RGZWF0dXJlIGZyb20gJ2NvcmUvQWJzdHJhY3RIb3N0RmVhdHVyZSc7XHJcbmltcG9ydCBVdGlscyBmcm9tICdjb3JlL1V0aWxzJztcclxuaW1wb3J0IFF1ZXVlU3RhdGUgZnJvbSAnLi9zdGF0ZS9RdWV1ZVN0YXRlJztcclxuaW1wb3J0IEZyZWVCbGVuZFN0YXRlIGZyb20gJy4vc3RhdGUvRnJlZUJsZW5kU3RhdGUnO1xyXG5pbXBvcnQgQmxlbmQxZFN0YXRlIGZyb20gJy4vc3RhdGUvQmxlbmQxZFN0YXRlJztcclxuaW1wb3J0IEJsZW5kMmRTdGF0ZSBmcm9tICcuL3N0YXRlL0JsZW5kMmRTdGF0ZSc7XHJcbmltcG9ydCBTaW5nbGVTdGF0ZSBmcm9tICcuL3N0YXRlL1NpbmdsZVN0YXRlJztcclxuaW1wb3J0IFJhbmRvbUFuaW1hdGlvblN0YXRlIGZyb20gJy4vc3RhdGUvUmFuZG9tQW5pbWF0aW9uU3RhdGUnO1xyXG5pbXBvcnQgQW5pbWF0aW9uTGF5ZXIsIHtMYXllckJsZW5kTW9kZXN9IGZyb20gJy4vQW5pbWF0aW9uTGF5ZXInO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnLi4vRGVmZXJyZWQnO1xyXG5cclxuLyoqXHJcbiAqIEVudW0gZm9yIGFuaW1hdGlvbiBzdGF0ZSBjbGFzc2VzLlxyXG4gKlxyXG4gKiBAcmVhZG9ubHlcclxuICogQGVudW0ge0NsYXNzfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEFuaW1hdGlvblR5cGVzID0ge1xyXG4gIHNpbmdsZTogU2luZ2xlU3RhdGUsXHJcbiAgZnJlZUJsZW5kOiBGcmVlQmxlbmRTdGF0ZSxcclxuICBxdWV1ZTogUXVldWVTdGF0ZSxcclxuICByYW5kb21BbmltYXRpb246IFJhbmRvbUFuaW1hdGlvblN0YXRlLFxyXG4gIGJsZW5kMWQ6IEJsZW5kMWRTdGF0ZSxcclxuICBibGVuZDJkOiBCbGVuZDJkU3RhdGUsXHJcbn07XHJcblxyXG4vKipcclxuICogRmVhdHVyZSBmb3IgbWFuYWdpbmcgYW5pbWF0aW9ucyBvbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0SG9zdEZlYXR1cmVcclxuICogQGFsaWFzIGNvcmUvQW5pbWF0aW9uRmVhdHVyZVxyXG4gKlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gbWVzc2FnZXMgdGhhdCB0aGUgZmVhdHVyZSBlbWl0cy4gV2hlbiB0aGVcclxuICogZmVhdHVyZSBpcyBhZGRlZCB0byBhIHtAbGluayBjb3JlL0hvc3RPYmplY3R9LCBldmVudCBuYW1lcyB3aWxsIGJlIHByZWZpeGVkIGJ5IHRoZVxyXG4gKiBuYW1lIG9mIHRoZSBmZWF0dXJlIGNsYXNzICsgJy4nLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5hZGRMYXllcj1vbkFkZExheWVyRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogW2FkZExheWVyXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjYWRkTGF5ZXJ9IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC5cclxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCB3YXMgYWRkZWQgYW5kIGl0cyBpbmRleCBpblxyXG4gKiB0aGUgbGF5ZXIgc3RhY2sgd2l0aCB0aGUgc2lnbmF0dXJlIHtuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXJ9IGlzIHN1cHBsaWVkXHJcbiAqIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVtb3ZlTGF5ZXI9b25SZW1vdmVMYXllckV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpc1xyXG4gKiBlbWl0dGVkIGFmdGVyIFtyZW1vdmVMYXllcl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUxheWVyfSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgd2FzXHJcbiAqIHJlbW92ZWQgYW5kIGl0cyBpbmRleCBpbiB0aGUgbGF5ZXIgc3RhY2sgd2l0aCB0aGUgc2lnbmF0dXJlIHtuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXJ9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucmVuYW1lTGF5ZXI9b25SZW5hbWVMYXllckV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpc1xyXG4gKiBlbWl0dGVkIGFmdGVyIFtyZW5hbWVMYXllcl17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbmFtZUxheWVyfSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlIGxheWVyXHJcbiAqIHRoYXQgd2FzIHJlbmFtZWQgYW5kIGl0cyB1cGRhdGVkIG5hbWUgd2l0aCB0aGUgc2lnbmF0dXJlIHtvbGROYW1lOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5hZGRBbmltYXRpb249b25BZGRBbmltYXRpb25FdmVudF0gLSBNZXNzYWdlIHRoYXQgaXNcclxuICogZW1pdHRlZCBhZnRlciBbYWRkQW5pbWF0aW9uXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjYWRkQW5pbWF0aW9ufSBoYXMgYmVlblxyXG4gKiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIHRoYXQgdGhlXHJcbiAqIGFuaW1hdGlvbiB3YXMgYWRkZWQgdG8gYW5kIHRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgYWRkZWQgd2l0aCB0aGVcclxuICogc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfSBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudFxyXG4gKiB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbW92ZUFuaW1hdGlvbj1vblJlbW92ZWRBbmltYXRpb25FdmVudF0gLSBNZXNzYWdlXHJcbiAqIHRoYXQgaXMgZW1pdHRlZCBhZnRlciBbcmVtb3ZlQW5pbWF0aW9uXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVtb3ZlQW5pbWF0aW9ufVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyXHJcbiAqIHRoYXQgdGhlIGFuaW1hdGlvbiB3YXMgcmVtb3ZlZCBmcm9tIGFuZCB0aGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlbW92ZWRcclxuICogd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfSBpcyBzdXBwbGllZCBhc1xyXG4gKiBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlbmFtZUFuaW1hdGlvbj1vblJlbmFtZUFuaW1hdGlvbkV2ZW50XSAtIE1lc3NhZ2VcclxuICogdGhhdCBpcyBlbWl0dGVkIGFmdGVyIFtyZW5hbWVBbmltYXRpb25de0BsaW5rIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVBbmltYXRpb259XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgbGF5ZXJcclxuICogdGhhdCBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlbmFtZWQsIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZSBhbmltYXRpb25cclxuICogdGhhdCB3YXMgcmVuYW1lZCBhbmQgaXRzIHVwZGF0ZWQgbmFtZSB3aXRoIHRoZSBzaWduYXR1cmUge2xheWVyTmFtZTogc3RyaW5nLCBvbGROYW1lOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZ31cclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5wbGF5PW9uUGxheUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcGxheV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3BsYXlBbmltYXRpb259LiBBbiBvYmplY3QgcmVwcmVzZW50aW5nXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHBsYXllZCBhbmQgdGhlIG5hbWUgb2ZcclxuICogdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwbGF5ZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnBhdXNlPW9uUGF1c2VFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3BhdXNlXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VBbmltYXRpb259LiBBbiBvYmplY3QgcmVwcmVzZW50aW5nXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHBhdXNlZCBhbmQgdGhlIG5hbWUgb2ZcclxuICogdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBwYXVzZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnJlc3VtZT1vblJlc3VtZUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbcmVzdW1lXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lQW5pbWF0aW9ufS4gQW4gb2JqZWN0IHJlcHJlc2VudGluZ1xyXG4gKiB0aGUgbmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyByZXN1bWVkIGFuZCB0aGUgbmFtZSBvZlxyXG4gKiB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHJlc3VtZWQgd2l0aCB0aGUgc2lnbmF0dXJlIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfVxyXG4gKiBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLmludGVycnVwdD1vbkludGVycnVwdEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGlmIHRoZXJlIGlzIGEgY3VycmVudCBzcGVlY2ggaW4gcHJvZ3Jlc3MgYW5kIFtwbGF5XXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheUFuaW1hdGlvbn1cclxuICogb3IgW3Jlc3VtZV17QGxpbmsgY29yZS9BbmltYXRpb25GZWF0dXJlI3Jlc3VtZUFuaW1hdGlvbn0gYXJlIGV4ZWN1dGVkIGZvciBhIG5ldyBzcGVlY2guXHJcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5zIHRoZSBhbmltYXRpb24gdGhhdCB3YXNcclxuICogaW50ZXJydXB0ZWQgYW5kIHRoZSBuYW1lIG9mIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgaW50ZXJydXB0ZWQgd2l0aCB0aGUgc2lnbmF0dXJlXHJcbiAqIHtsYXllck5hbWU6IHN0cmluZywgYW5pbWF0aW9uTmFtZTogc3RyaW5nfSBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lclxyXG4gKiBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLnN0b3A9b25TdG9wRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtzdG9wXXtAbGluayBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjc3RvcEFuaW1hdGlvbn0gYW5kIHdoZW4gYSBzcGVlY2ggcmVhY2hlc1xyXG4gKiB0aGUgZW5kIG9mIHBsYXliYWNrLiBBbiBvYmplY3QgcmVwcmVzZW50aW5nXHJcbiAqIHRoZSBuYW1lIG9mIHRoZSBsYXllciBjb250YWlucyB0aGUgYW5pbWF0aW9uIHRoYXQgd2FzIHN0b3BwZWQgYW5kIHRoZSBuYW1lIG9mXHJcbiAqIHRoZSBhbmltYXRpb24gdGhhdCB3YXMgc3RvcHBlZCB3aXRoIHRoZSBzaWduYXR1cmUge2xheWVyTmFtZTogc3RyaW5nLCBhbmltYXRpb25OYW1lOiBzdHJpbmd9XHJcbiAqIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICovXHJcbmNsYXNzIEFuaW1hdGlvbkZlYXR1cmUgZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgdGhhdCBvd25zIHRoZSBmZWF0dXJlLlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKGhvc3QpIHtcclxuICAgIHN1cGVyKGhvc3QpO1xyXG5cclxuICAgIHRoaXMuX2xheWVycyA9IFtdO1xyXG4gICAgdGhpcy5fbGF5ZXJNYXAgPSB7fTtcclxuICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFrZSBzdXJlIGEgc3VwcGxpZWQgbGF5ZXIgaW5kZXggaXMgd2l0aGluIHRoZSByYW5nZSBvZiBsYXllcnMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbZXhpc3Rpbmc9dHJ1ZV0gLSBXaGV0aGVyIHRoZSBpbmRleCByZXByZXNlbnRzIGFuZCBleGlzdGluZ1xyXG4gICAqIGxheWVyIG9yIGEgbmV3IGxheWVyIHRvIGJlIGFkZGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcj19XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlSW5kZXgoaW5kZXgsIGV4aXN0aW5nID0gdHJ1ZSkge1xyXG4gICAgLy8gSW5kZXggaXMgaW52YWxpZCBpZiB0aGVyZSBhcmUgbm8gbGF5ZXJzIGFuZCB3ZSdyZSBjaGVja2luZyBmb3IgYW4gZXhpc3RpbmcgbGF5ZXIgaW5kZXhcclxuICAgIGlmICh0aGlzLl9sYXllcnMubGVuZ3RoID09PSAwICYmIGV4aXN0aW5nKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGFzdEluZGV4ID0gZXhpc3RpbmcgPyB0aGlzLl9sYXllcnMubGVuZ3RoIC0gMSA6IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcblxyXG4gICAgLy8gQ291bnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBhcnJheSBmb3IgbmVnYXRpdmUgaW5kaWNlc1xyXG4gICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICBpbmRleCA9IGxhc3RJbmRleCArIGluZGV4ICsgMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gbGFzdEluZGV4KSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaW5kZXg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZS1ldmFsdWF0ZSBpbnRlcm5hbCB3ZWlnaHQgdmFsdWVzIG9mIGxheWVycyBzdGFydGluZyBmcm9tIHRoZSB0b3Agb2YgdGhlXHJcbiAgICogc3RhY2suIE92ZXJyaWRlIGxheWVycycgd2VpZ2h0cyBhZmZlY3QgdGhlIHZhbHVlcyBvZiBhbGwgbGF5ZXJzIGxvd2VyIGluIHRoZVxyXG4gICAqIHN0YWNrLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfdXBkYXRlSW50ZXJuYWxXZWlnaHRzKCkge1xyXG4gICAgY29uc3QgbnVtTGF5ZXJzID0gdGhpcy5fbGF5ZXJzLmxlbmd0aDtcclxuICAgIGxldCB3ZWlnaHRNdWx0aXBsaWVyID0gMTtcclxuXHJcbiAgICAvLyBVcGRhdGUgaW50ZXJuYWwgd2VpZ2h0IHZhbHVlcyBvbiBsYXllcnMgaW4gcmV2ZXJzZSBvcmRlclxyXG4gICAgZm9yIChsZXQgaSA9IG51bUxheWVycyAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2ldO1xyXG4gICAgICBsYXllci51cGRhdGVJbnRlcm5hbFdlaWdodCh3ZWlnaHRNdWx0aXBsaWVyKTtcclxuXHJcbiAgICAgIC8vIElmIHRoZSBsYXllciBpcyBvdmVycmlkZSwgdXBkYXRlIHRoZSBtdWx0aXBsaWVyIHdpdGggdGhlIHJlbWFpbmRlciBvZiB0aGUgZnVsbCB3ZWlnaHRcclxuICAgICAgaWYgKGxheWVyLmJsZW5kTW9kZSA9PT0gTGF5ZXJCbGVuZE1vZGVzLk92ZXJyaWRlICYmIGxheWVyLmN1cnJlbnRTdGF0ZSkge1xyXG4gICAgICAgIHdlaWdodE11bHRpcGxpZXIgKj0gMSAtIGxheWVyLmN1cnJlbnRTdGF0ZS5pbnRlcm5hbFdlaWdodDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgU2luZ2xlU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIFNpbmdsZVN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7d2VpZ2h0fSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge3RpbWVTY2FsZX0gW29wdGlvbnMudGltZVNjYWxlPTFdIC0gRmFjdG9yIHRvIHNjYWxlIHRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGVcclxuICAgKiBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3BDb3VudD1JbmZpbml0eV0gLSBOdW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiBzaG91bGRcclxuICAgKiByZXBlYXQgYmVmb3JlIGZpbmlzaGluZy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPUxheWVyQmxlbmRNb2Rlc1tEZWZhdWx0TGF5ZXJCbGVuZE1vZGVdXSAtIFR5cGUgb2ZcclxuICAgKiBibGVuZGluZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB1c2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Y29yZS9TaW5nbGVTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlU2luZ2xlU3RhdGUob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG5ldyBTaW5nbGVTdGF0ZShvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIEZyZWVCbGVuZFN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBGcmVlQmxlbmRTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLmJsZW5kU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogYmxlbmQgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtGcmVlQmxlbmRTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlRnJlZUJsZW5kU3RhdGUob3B0aW9ucykge1xyXG4gICAgY29uc3Qge2JsZW5kU3RhdGVPcHRpb25zID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBibGVuZFN0YXRlcyA9IFtdO1xyXG4gICAgYmxlbmRTdGF0ZU9wdGlvbnMuZm9yRWFjaChibGVuZE9wdGlvbnMgPT4ge1xyXG4gICAgICBibGVuZFN0YXRlcy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNpbmdsZVN0YXRlKHsuLi5ibGVuZE9wdGlvbnMsIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGV9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBGcmVlQmxlbmRTdGF0ZShvcHRpb25zLCBibGVuZFN0YXRlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBRdWV1ZVN0YXRlLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBRdWV1ZVN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IG9wdGlvbnMudHJhbnNpdGlvblRpbWUgLSBUaGUgYW1vdW50IG9mIHRpbWUgaXQgdGFrZXMgdG8gdHJhbnNpdGlvblxyXG4gICAqIGJldHdlZW4gcXVldWVkIHN0YXRlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPUxheWVyQmxlbmRNb2Rlc1tEZWZhdWx0TGF5ZXJCbGVuZE1vZGVdXSAtIFR5cGUgb2ZcclxuICAgKiBibGVuZGluZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB1c2UuXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW29wdGlvbnMucXVldWVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogcXVldWUgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtRdWV1ZVN0YXRlfVxyXG4gICAqL1xyXG4gIF9jcmVhdGVRdWV1ZVN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtxdWV1ZU9wdGlvbnMgPSBbXX0gPSBvcHRpb25zO1xyXG5cclxuICAgIGNvbnN0IHF1ZXVlU3RhdGVzID0gcXVldWVPcHRpb25zLm1hcChxdWV1ZU9wdGlvbiA9PlxyXG4gICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7XHJcbiAgICAgICAgdHJhbnNpdGlvblRpbWU6IG9wdGlvbnMudHJhbnNpdGlvblRpbWUsXHJcbiAgICAgICAgLi4ucXVldWVPcHRpb24sXHJcbiAgICAgICAgYmxlbmRNb2RlOiBvcHRpb25zLmJsZW5kTW9kZSxcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBRdWV1ZVN0YXRlKG9wdGlvbnMsIHF1ZXVlU3RhdGVzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhIEJsZW5kMWRTdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgQmxlbmQxZFN0YXRlIGNvbnN0cnVjdG9yLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5uYW1lIC0gTmFtZSBmb3IgdGhlIGFuaW1hdGlvbiBzdGF0ZS4gTmFtZXMgbXVzdCBiZVxyXG4gICAqIHVuaXF1ZSBmb3IgdGhlIGxheWVyIHRoZSBzdGF0ZSBpcyBhcHBsaWVkIHRvLlxyXG4gICAqIEBwYXJhbSB7d2VpZ2h0fSBbb3B0aW9ucy53ZWlnaHQ9MF0gLSBUaGUgMC0xIGFtb3VudCBvZiBpbmZsdWVuY2UgdGhlIHN0YXRlIHdpbGwgaGF2ZS5cclxuICAgKiBAcGFyYW0ge3RpbWVTY2FsZX0gW29wdGlvbnMudGltZVNjYWxlPTFdIC0gRmFjdG9yIHRvIHNjYWxlIHRoZSBwbGF5YmFjayBzcGVlZCBvZiB0aGVcclxuICAgKiBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxvb3BDb3VudD1JbmZpbml0eV0gLSBOdW1iZXIgb2YgdGltZXMgdGhlIGFuaW1hdGlvbiBzaG91bGRcclxuICAgKiByZXBlYXQgYmVmb3JlIGZpbmlzaGluZy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYmxlbmRNb2RlPUxheWVyQmxlbmRNb2Rlc1tEZWZhdWx0TGF5ZXJCbGVuZE1vZGVdXSAtIFR5cGUgb2ZcclxuICAgKiBibGVuZGluZyB0aGUgYW5pbWF0aW9uIHNob3VsZCB1c2UuXHJcbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW29wdGlvbnMuYmxlbmRTdGF0ZU9wdGlvbnNdIC0gQXJyYXkgb2Ygb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGVcclxuICAgKiBibGVuZCBzdGF0ZXMgZm9yIHRoaXMgY29udGFpbmVyLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFtvcHRpb25zLmJsZW5kVGhyZXNob2xkc10gLSBBcnJheSBvZiBudW1iZXJzIHVzZWQgdG8gc2V0IHRoZVxyXG4gICAqIHRocmVzaG9sZHMgZm9yIGVhY2ggYmxlbmQgc3RhdGUgaW4gdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48Ym9vbGVhbj59IFtvcHRpb25zLmJsZW5kTWF0Y2hQaGFzZXM9W11dIC0gT3B0aW9uYWwgYXJyYXkgb2YgYm9vbGVhbnMgdXNlZCB0b1xyXG4gICAqIHNldCB3aGV0aGVyIG9yIG5vdCBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyIHdpbGwgbWF0Y2ggcGhhc2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0JsZW5kMWRTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlQmxlbmQxZFN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtibGVuZFN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRUaHJlc2hvbGRzID0gW119ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IHtibGVuZE1hdGNoUGhhc2VzID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBibGVuZFN0YXRlcyA9IFtdO1xyXG4gICAgYmxlbmRTdGF0ZU9wdGlvbnMuZm9yRWFjaChibGVuZE9wdGlvbnMgPT4ge1xyXG4gICAgICBibGVuZFN0YXRlcy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNpbmdsZVN0YXRlKHsuLi5ibGVuZE9wdGlvbnMsIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGV9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBCbGVuZDFkU3RhdGUoXHJcbiAgICAgIG9wdGlvbnMsXHJcbiAgICAgIGJsZW5kU3RhdGVzLFxyXG4gICAgICBibGVuZFRocmVzaG9sZHMsXHJcbiAgICAgIGJsZW5kTWF0Y2hQaGFzZXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBCbGVuZDJkU3RhdGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIEJsZW5kMWRTdGF0ZSBjb25zdHJ1Y3Rvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMubmFtZSAtIE5hbWUgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuIE5hbWVzIG11c3QgYmVcclxuICAgKiB1bmlxdWUgZm9yIHRoZSBsYXllciB0aGUgc3RhdGUgaXMgYXBwbGllZCB0by5cclxuICAgKiBAcGFyYW0ge3dlaWdodH0gW29wdGlvbnMud2VpZ2h0PTBdIC0gVGhlIDAtMSBhbW91bnQgb2YgaW5mbHVlbmNlIHRoZSBzdGF0ZSB3aWxsIGhhdmUuXHJcbiAgICogQHBhcmFtIHt0aW1lU2NhbGV9IFtvcHRpb25zLnRpbWVTY2FsZT0xXSAtIEZhY3RvciB0byBzY2FsZSB0aGUgcGxheWJhY2sgc3BlZWQgb2YgdGhlXHJcbiAgICogYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sb29wQ291bnQ9SW5maW5pdHldIC0gTnVtYmVyIG9mIHRpbWVzIHRoZSBhbmltYXRpb24gc2hvdWxkXHJcbiAgICogcmVwZWF0IGJlZm9yZSBmaW5pc2hpbmcuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmJsZW5kTW9kZT1MYXllckJsZW5kTW9kZXNbRGVmYXVsdExheWVyQmxlbmRNb2RlXV0gLSBUeXBlIG9mXHJcbiAgICogYmxlbmRpbmcgdGhlIGFuaW1hdGlvbiBzaG91bGQgdXNlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IFtvcHRpb25zLmJsZW5kU3RhdGVPcHRpb25zXSAtIEFycmF5IG9mIG9wdGlvbnMgdXNlZCB0byBjcmVhdGUgdGhlXHJcbiAgICogYmxlbmQgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IFtvcHRpb25zLmJsZW5kVGhyZXNob2xkc10gLSBBcnJheSBvZiBBcnJheSBvZiBudW1iZXJzIHVzZWQgdG8gc2V0IHRoZVxyXG4gICAqIHRocmVzaG9sZHMgZm9yIGVhY2ggYmxlbmQgc3RhdGUgaW4gdGhpcyBjb250YWluZXIuXHJcbiAgICogQHBhcmFtIHtBcnJheS48Ym9vbGVhbj59IFtvcHRpb25zLmJsZW5kTWF0Y2hQaGFzZXM9W11dIC0gT3B0aW9uYWwgYXJyYXkgb2YgYm9vbGVhbnMgdXNlZCB0b1xyXG4gICAqIHNldCB3aGV0aGVyIG9yIG5vdCBlYWNoIGJsZW5kIHN0YXRlIGluIHRoaXMgY29udGFpbmVyIHdpbGwgbWF0Y2ggcGhhc2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0JsZW5kMWRTdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlQmxlbmQyZFN0YXRlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHtibGVuZFN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7YmxlbmRUaHJlc2hvbGRzID0gW119ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IHtibGVuZE1hdGNoUGhhc2VzID0gW119ID0gb3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBibGVuZFN0YXRlcyA9IFtdO1xyXG4gICAgYmxlbmRTdGF0ZU9wdGlvbnMuZm9yRWFjaChibGVuZE9wdGlvbnMgPT4ge1xyXG4gICAgICBibGVuZFN0YXRlcy5wdXNoKFxyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVNpbmdsZVN0YXRlKHsuLi5ibGVuZE9wdGlvbnMsIGJsZW5kTW9kZTogb3B0aW9ucy5ibGVuZE1vZGV9KVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBCbGVuZDJkU3RhdGUoXHJcbiAgICAgIG9wdGlvbnMsXHJcbiAgICAgIGJsZW5kU3RhdGVzLFxyXG4gICAgICBibGVuZFRocmVzaG9sZHMsXHJcbiAgICAgIGJsZW5kTWF0Y2hQaGFzZXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBuZXcgaW5zdGFuY2Ugb2YgYSBSYW5kb21BbmltYXRpb25TdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgUmFuZG9tQW5pbWF0aW9uU3RhdGUgY29uc3RydWN0b3IuXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLm5hbWUgLSBOYW1lIGZvciB0aGUgYW5pbWF0aW9uIHN0YXRlLiBOYW1lcyBtdXN0IGJlXHJcbiAgICogdW5pcXVlIGZvciB0aGUgbGF5ZXIgdGhlIHN0YXRlIGlzIGFwcGxpZWQgdG8uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnBsYXlJbnRlcnZhbD0zXSAtIFRoZSBiYXNlIGFuaW1hdGlvbiBwbGF5YmFjayBpbnRlcnZhbC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbb3B0aW9ucy5zdWJTdGF0ZU9wdGlvbnNdIC0gQXJyYXkgb2Ygb3B0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0aGVcclxuICAgKiBzdWIgc3RhdGVzIGZvciB0aGlzIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtSYW5kb21BbmltYXRpb25TdGF0ZX1cclxuICAgKi9cclxuICBfY3JlYXRlUmFuZG9tQW5pbWF0aW9uU3RhdGUob3B0aW9ucykge1xyXG4gICAgY29uc3Qge3N1YlN0YXRlT3B0aW9ucyA9IFtdfSA9IG9wdGlvbnM7XHJcblxyXG4gICAgY29uc3Qgc3ViU3RhdGVzID0gW107XHJcbiAgICBzdWJTdGF0ZU9wdGlvbnMuZm9yRWFjaChzdWJTdGF0ZU9wdGlvbnMgPT4ge1xyXG4gICAgICBzdWJTdGF0ZXMucHVzaChcclxuICAgICAgICB0aGlzLl9jcmVhdGVTaW5nbGVTdGF0ZSh7XHJcbiAgICAgICAgICAuLi5zdWJTdGF0ZU9wdGlvbnMsXHJcbiAgICAgICAgICBibGVuZE1vZGU6IG9wdGlvbnMuYmxlbmRNb2RlLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbUFuaW1hdGlvblN0YXRlKG9wdGlvbnMsIHN1YlN0YXRlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYWtlIHN1cmUgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgZXhpc3RzIGFuZCByZXR1cm4gYSB1bmlxdWUgdmVyc2lvblxyXG4gICAqIG9mIHRoZSBhbmltYXRpb24gbmFtZSBzdXBwbGllZCBmb3IgdGhhdCBsYXllci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gY2hlY2sgYWdhaW5zdC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFZhbGlkYXRlZCBhbmltYXRpb24gbmFtZS5cclxuICAgKi9cclxuICBfdmFsaWRhdGVOZXdBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGFkZCBhbmltYXRpb24gdG8gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uTmFtZSBpcyB1bmlxdWVcclxuICAgIGNvbnN0IG5hbWUgPSBVdGlscy5nZXRVbmlxdWVOYW1lKGFuaW1hdGlvbk5hbWUsIGxheWVyLmdldFN0YXRlTmFtZXMoKSk7XHJcblxyXG4gICAgaWYgKG5hbWUgIT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBBbmltYXRpb24gbmFtZSAke2FuaW1hdGlvbk5hbWV9IGlzIG5vdCB1bmlxdWUgZm9yIGxheWVyICR7bGF5ZXIubmFtZX0uIEFuaW1hdGlvbiB3aWxsIGJlIHJlbmFtZWQgdG8gJHtuYW1lfS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IGFsbCBhbmltYXRpb25zIGFyZSBwYXVzZWQuXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBnZXQgcGF1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhdXNlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYW4gYXJyYXkgb2YgbmFtZXMgb2YgYW5pbWF0aW9uIGxheWVycy5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtBcnJheS48c3RyaW5nPn1cclxuICAgKi9cclxuICBnZXQgbGF5ZXJzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xheWVycy5tYXAobGF5ZXIgPT4gbGF5ZXIubmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW5kIHN0b3JlIGEgbmV3IGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT0nTmV3TGF5ZXInXSAtIE5hbWUgZm9yIHRoZSBsYXllci5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIC0gT3B0aW9ucyB0byBwYXNzIHRvIHtAbGluayBBbmltYXRpb25MYXllciNjb25zdHJ1Y3Rvcn1cclxuICAgKiBAcGFyYW0ge2luZGV4PX0gaW5kZXggLSBJbmRleCB0byBpbnNlcnQgdGhlIG5ldyBsYXllciBhdC4gSWYgbm9uZSBpcyBwcm92aWRlZFxyXG4gICAqIGl0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3RhY2suXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBvZiB0aGUgbmV3IGxheWVyLlxyXG4gICAqL1xyXG4gIGFkZExheWVyKG5hbWUgPSAnTmV3TGF5ZXInLCBvcHRpb25zID0ge30sIGluZGV4KSB7XHJcbiAgICBjb25zdCBudW1MYXllcnMgPSB0aGlzLl9sYXllcnMubGVuZ3RoO1xyXG4gICAgbGV0IGxheWVySW5kZXggPSBpbmRleDtcclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGdpdmVuIGluZGV4IGlzIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgbGF5ZXJzXHJcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCB8fCBpbmRleCA9PT0gLTEpIHtcclxuICAgICAgbGF5ZXJJbmRleCA9IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsYXllckluZGV4ID0gdGhpcy5fdmFsaWRhdGVJbmRleChpbmRleCwgZmFsc2UpO1xyXG5cclxuICAgICAgaWYgKGxheWVySW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIC8vIEluc2VydCBhdCB0aGUgYmVnaW5uaW5nIGlmIHRoZSB1c2VyIHBhc3NlZCBpbiBhIG5lZ2F0aXZlIGluZGV4XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgbGF5ZXJJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE90aGVyd2lzZSBhcHBlbmQgdG8gdGhlIGVuZFxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGF5ZXJJbmRleCA9IHRoaXMuX2xheWVycy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBgSW5kZXggJHtpbmRleH0gaXMgaW52YWxpZCBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBOZXcgbGF5ZXIgd2lsbCBiZSBhZGRlZCBhdCB0aGUgY2xvc2VzdCB2YWxpZCBpbmRleDogJHtsYXllckluZGV4fS5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgbmFtZSBpcyB1bmlxdWVcclxuICAgIGNvbnN0IGxheWVyTmFtZSA9IFV0aWxzLmdldFVuaXF1ZU5hbWUobmFtZSwgT2JqZWN0LmtleXModGhpcy5fbGF5ZXJNYXApKTtcclxuXHJcbiAgICBpZiAobmFtZSAhPT0gbGF5ZXJOYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgTGF5ZXIgbmFtZSAke25hbWV9IGlzIG5vdCB1bmlxdWUuIE5ldyBsYXllciB3aWxsIGJlIGFkZGVkIHdpdGggdGhlIG5hbWUgJHtsYXllck5hbWV9LmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXllciA9IG5ldyBBbmltYXRpb25MYXllcih7Li4ub3B0aW9ucywgbmFtZTogbGF5ZXJOYW1lfSk7XHJcbiAgICB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdID0gbGF5ZXI7XHJcblxyXG4gICAgaWYgKGxheWVySW5kZXggPT09IG51bUxheWVycykge1xyXG4gICAgICB0aGlzLl9sYXllcnMucHVzaChsYXllcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9sYXllcnMuc3BsaWNlKGxheWVySW5kZXgsIDAsIGxheWVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhIGxheWVyIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBmZWF0dXJlXHJcbiAgICBjb25zdCBldmVudERhdGEgPSB7bmFtZTogbGF5ZXJOYW1lLCBpbmRleDogbGF5ZXJJbmRleH07XHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuYWRkTGF5ZXIsIGV2ZW50RGF0YSk7XHJcblxyXG4gICAgcmV0dXJuIGV2ZW50RGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhbiBhbmltYXRpb24gbGF5ZXIgZnJvbSB0aGUgc3RhY2suIEFuaW1hdGlvbnMgb24gdGhpcyBsYXllciB3aWxsIG5vXHJcbiAgICogbG9uZ2VyIGJlIGV2YWx1YXRlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBmb3IgdGhlIGxheWVyIHRvIHJlbW92ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCByZW1vdmFsIHdhcyBzdWNjZXNzZnVsLlxyXG4gICAqL1xyXG4gIHJlbW92ZUxheWVyKG5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBEaWQgbm90IHJlbW92ZSBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbGF5ZXIuZGlzY2FyZCgpO1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGF5ZXJzLmluZGV4T2YobGF5ZXIpO1xyXG4gICAgdGhpcy5fbGF5ZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYSBsYXllciBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW1vdmVMYXllciwge25hbWUsIGluZGV4fSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZS1vcmRlciB0aGUgbGF5ZXIgc3RhY2sgc28gdGhhdCB0aGUgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyBwb3NpdGlvbmVkXHJcbiAgICogYXQgdGhlIGdpdmVuIGluZGV4LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBtb3ZlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIE5ldyBpbmRleCB0byBwb3NpdGlvbiB0aGUgbGF5ZXIgYXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbmV3IGluZGV4IG9mIHRoZSBsYXllclxyXG4gICAqL1xyXG4gIG1vdmVMYXllcihuYW1lLCBpbmRleCkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IG1vdmUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGluZGV4IGZhbGxzIGluIHRoZSByYW5nZSBvZiBleGlzdGluZyBsYXllcnNcclxuICAgIGNvbnN0IGxheWVySW5kZXggPSB0aGlzLl92YWxpZGF0ZUluZGV4KGluZGV4LCB0cnVlKTtcclxuICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuX2xheWVycy5sZW5ndGggLSAxO1xyXG5cclxuICAgIGlmIChsYXllckluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgbW92ZSBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9IHRvIGluZGV4ICR7aW5kZXh9LiBJbmRleCBtdXN0IGJlIGluIHRoZSAwIC0gJHtsYXN0SW5kZXh9IHJhbmdlLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLl9sYXllcnMuaW5kZXhPZihsYXllcik7XHJcbiAgICBpZiAoY3VycmVudEluZGV4ID09PSBsYXllckluZGV4KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvblxyXG4gICAgdGhpcy5fbGF5ZXJzLnNwbGljZShjdXJyZW50SW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIEluc2VydCBhdCB0aGUgbmV3IHBvc2l0aW9uXHJcbiAgICBpZiAobGF5ZXJJbmRleCA9PT0gbGFzdEluZGV4KSB7XHJcbiAgICAgIHRoaXMuX2xheWVycy5wdXNoKGxheWVyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xheWVycy5zcGxpY2UobGF5ZXJJbmRleCwgMCwgbGF5ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllckluZGV4O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBuYW1lIG9mIGEgbGF5ZXIuIE5hbWVzIG11c3QgYmUgdW5pcXVlLCBpZiB0aGUgbmV3IG5hbWUgaXMgbm90XHJcbiAgICogdW5pcXVlIGl0IHdpbGwgaGF2ZSB0cmFpbGluZyBudW1iZXJzIGFwcGVuZGVkIHVudGlsIGl0IGlzIHVuaXF1ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50TmFtZSAtIEN1cnJlbnQgbmFtZSBvZiB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZSB0byBzZXQgb24gdGhlIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIG5ldyBuYW1lIG9mIHRoZSBsYXllclxyXG4gICAqL1xyXG4gIHJlbmFtZUxheWVyKGN1cnJlbnROYW1lLCBuZXdOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbY3VycmVudE5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHJlbmFtZSBsYXllciAke2N1cnJlbnROYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIG5hbWUgaXMgdW5pcXVlXHJcbiAgICBjb25zdCBuYW1lID0gVXRpbHMuZ2V0VW5pcXVlTmFtZShuZXdOYW1lLCBPYmplY3Qua2V5cyh0aGlzLl9sYXllck1hcCkpO1xyXG5cclxuICAgIGlmIChuYW1lICE9PSBuZXdOYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgTGF5ZXIgbmFtZSAke25ld05hbWV9IGlzIG5vdCB1bmlxdWUuIExheWVyIHdpbGwgYmUgcmVuYW1lZCB0byAke25hbWV9LmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJNYXBbY3VycmVudE5hbWVdO1xyXG4gICAgdGhpcy5fbGF5ZXJNYXBbbmFtZV0gPSBsYXllcjtcclxuICAgIGxheWVyLm5hbWUgPSBuYW1lO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGEgbGF5ZXIgaGFzIGJlZW4gcmVuYW1lZCBvbiB0aGUgZmVhdHVyZVxyXG4gICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnJlbmFtZUxheWVyLCB7XHJcbiAgICAgIG9sZE5hbWU6IGN1cnJlbnROYW1lLFxyXG4gICAgICBuZXdOYW1lOiBuYW1lLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHdlaWdodCBvZiBhbiBhbmltYXRpb24gbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJldHVybiB3ZWlnaHQgZnJvbS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgZ2V0TGF5ZXJXZWlnaHQobmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCB3ZWlnaHQgb24gbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIud2VpZ2h0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSB3ZWlnaHQgb2YgYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbGF5ZXIgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWlnaHQgLSBUaGUgd2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgbGF5ZXIuIFRoaXMgbnVtYmVyXHJcbiAgICogc2hvdWxkIGJlIGluIHRoZSAwLTEgcmFuZ2UuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gVGhlIG51bWJlciBvZiBzZWNvbmRzIGl0IHNob3VsZCB0YWtlIHRvIHJlYWNoIHRoZVxyXG4gICAqIG5ldyB3ZWlnaHQuIERlZmF1bHQgaXMgemVybyBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgaW50ZXJwb2xhdGluZ1xyXG4gICAqIHRoZSB3ZWlnaHQuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gQSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgdGhlIGxheWVyJ3Mgd2VpZ2h0IHJlYWNoZXNcclxuICAgKiB0aGUgdGFyZ2V0IHZhbHVlLlxyXG4gICAqL1xyXG4gIHNldExheWVyV2VpZ2h0KG5hbWUsIHdlaWdodCwgc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCBzZXQgd2VpZ2h0IG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5zZXRXZWlnaHQod2VpZ2h0LCBzZWNvbmRzLCBlYXNpbmdGbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiBibGVuZCBzdGF0ZXMgaW4gYW4gYW5pbWF0aW9uIGluIGEgbGF5ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgY29udGFpbmluZyB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmdcclxuICAgKiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uIGNvbnRhaW5pbmcgdGhlIGJsZW5kIHN0YXRlXHJcbiAgICogdG8gdXBkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSAtIE5hbWVzIG9mIGJsZW5kIHN0YXRlcy5cclxuICAgKi9cclxuICBnZXRBbmltYXRpb25CbGVuZE5hbWVzKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IGdldCBibGVuZCBuYW1lcyBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmdldEFuaW1hdGlvbkJsZW5kTmFtZXMoYW5pbWF0aW9uTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIHdlaWdodCBmb3IgYSBibGVuZCBzdGF0ZSBpbiBhbiBhbmltYXRpb24gaW4gYSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciBjb250YWluaW5nIHRoZSBhbmltYXRpb24gY29udGFpbmluZ1xyXG4gICAqIHRoZSBibGVuZCBzdGF0ZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gY29udGFpbmluZyB0aGUgYmxlbmQgc3RhdGVcclxuICAgKiB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJsZW5kTmFtZSAtIE5hbWUgb2YgdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2VpZ2h0IC0gV2VpZ2h0IHZhbHVlIHRvIHNldCBvbiB0aGUgYW5pbWF0aW9uLiBUaGlzIG51bWJlciBzaG91ZGxkIGJlXHJcbiAgICogaW4gdGhlIDAtMSByYW5nZS5cclxuICAgKiBAcGFyYW0ge251bWJlcj19IHNlY29uZHMgLSBOdW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byByZWFjaCB0aGUgbmV3IHdlaWdodC5cclxuICAgKiBEZWZhdWx0IGlzIHplcm8gYW5kIHdpbGwgc2V0IGltbWVkaWF0ZWx5LlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgaW50ZXJwb2xhdGluZyB0aGUgbmV3XHJcbiAgICogd2VpZ2h0LiBEZWZhdWx0IGlzIEVhc2luZy5MaW5lYXIuSW5PdXQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IC0gUHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSBhbmltYXRpb24ncyB3ZWlnaHQgcmVhY2hlc1xyXG4gICAqIHRoZSB0YXJnZXQgdmFsdWUuXHJcbiAgICovXHJcbiAgc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXHJcbiAgICBsYXllck5hbWUsXHJcbiAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgYmxlbmROYW1lLFxyXG4gICAgd2VpZ2h0LFxyXG4gICAgc2Vjb25kcyxcclxuICAgIGVhc2luZ0ZuXHJcbiAgKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3Qgc2V0IGJsZW5kIHdlaWdodCBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgYmxlbmROYW1lLFxyXG4gICAgICB3ZWlnaHQsXHJcbiAgICAgIHNlY29uZHMsXHJcbiAgICAgIGVhc2luZ0ZuXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgd2VpZ2h0IGZvciBhIGJsZW5kIHN0YXRlIGluIGFuIGFuaW1hdGlvbiBpbiBhIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIGNvbnRhaW5pbmcgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nXHJcbiAgICogdGhlIGJsZW5kIHN0YXRlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBjb250YWluaW5nIHRoZSBibGVuZCBzdGF0ZVxyXG4gICAqIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmxlbmROYW1lIC0gTmFtZSBvZiB0aGUgYmxlbmQgc3RhdGUgdG8gdXBkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge251bWJlcn0gLSBXZWlnaHQgb2YgdGhlIGJsZW5kIHN0YXRlLlxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgYmxlbmROYW1lKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgZ2V0IGJsZW5kIHdlaWdodCBvbiBsYXllciAke2xheWVyTmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLmdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KGFuaW1hdGlvbk5hbWUsIGJsZW5kTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBwYXVzZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IHRoZXJlIHdhcyBhbiBleGlzdGluZyBpbnRlcnBvbGF0aW9uIHRvIHBhdXNlLlxyXG4gICAqL1xyXG4gIHBhdXNlTGF5ZXJXZWlnaHQobmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW25hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgQ2Fubm90IHBhdXNlIHdlaWdodCBpbnRlcnBvbGF0aW9uIG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLnBhdXNlV2VpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGEgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gcmVzdW1lLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGxheWVyJ3Mgd2VpZ2h0IHJlYWNoZXMgaXRzIHRhcmdldCB2YWx1ZS5cclxuICAgKi9cclxuICByZXN1bWVMYXllcldlaWdodChuYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIG5hbWUgaXMgdmFsaWRcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcmVzdW1lIHdlaWdodCBpbnRlcnBvbGF0aW9uIG9uIGxheWVyICR7bmFtZX0gZnJvbSBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5yZXN1bWVXZWlnaHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIGN1cnJlbnQgYW5pbWF0aW9uIGFuZCB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYSBsYXllciB3aXRoXHJcbiAgICogdGhlIGdpdmVuIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHBhdXNlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBvciBub3QgdGhlcmUgd2FzIGFuIGV4aXN0aW5nIGludGVycG9sYXRpb24gb3JcclxuICAgKiBjdXJyZW50IGFuaW1hdGlvbiB0byBwYXVzZS5cclxuICAgKi9cclxuICBwYXVzZUxheWVyKG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCBwYXVzZSBsYXllciAke25hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5wYXVzZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIGN1cnJlbnQgYW5pbWF0aW9uIGFuZCB3ZWlnaHQgaW50ZXJwb2xhdGlvbiBhbmltYXRpb24gb24gYSBsYXllciB3aXRoXHJcbiAgICogdGhlIGdpdmVuIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJlc3VtZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBsYXllcidzIHdlaWdodCByZWFjaGVzIGl0cyB0YXJnZXQgdmFsdWVcclxuICAgKiBhbmQgaXQncyBjdXJyZW50IGFuaW1hdGlvbiBmaW5pc2hlcyBwbGF5aW5nLlxyXG4gICAqL1xyXG4gIHJlc3VtZUxheWVyKG5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtuYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCByZXN1bWUgbGF5ZXIgJHtuYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxheWVyLnJlc3VtZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBhbmltYXRpb24gbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyBjdXJyZW50bHlcclxuICAgKiB0cmFuc2l0aW9uaW5nIGJldHdlZW4gYW5pbWF0aW9ucy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBjaGVjay5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldFRyYW5zaXRpb25pbmcobGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IHRyYW5zaXRpb25pbmcgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5pc1RyYW5zaXRpb25pbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgdGhlIG5hbWVzIG9mIGFsbCBzdGF0ZXMgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgY29udHJvbHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gc2VhcmNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fVxyXG4gICAqL1xyXG4gIGdldEFuaW1hdGlvbnMobGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGFuaW1hdGlvbnMgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5nZXRTdGF0ZU5hbWVzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHN0YXRlIGN1cnJlbnRseSBhY3RpdmUgb24gdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUuXHJcbiAgICogUmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gY3VycmVudCBhbmltYXRpb24gZm9yIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHsoc3RyaW5nfG51bGwpfVxyXG4gICAqL1xyXG4gIGdldEN1cnJlbnRBbmltYXRpb24obGF5ZXJOYW1lKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyTmFtZSBpcyB2YWxpZFxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgR2V0IGN1cnJlbnQgYW5pbWF0aW9uIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuY3VycmVudEFuaW1hdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB3aGV0aGVyIG9yIG5vdCBhIGxheWVyIHdpdGggdGhlIGdpdmVuIG5hbWUgaXMgY3VycmVudGx5IHBsYXlpbmcgYW5cclxuICAgKiBhbmltYXRpb24gYW5kIHRoYXQgYW5pbWF0aW9uIGlzIHBhdXNlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllci5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGdldFBhdXNlZChsYXllck5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXJOYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBHZXQgcGF1c2VkIG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXIuY3VycmVudFN0YXRlICYmIGxheWVyLmN1cnJlbnRTdGF0ZS5wYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHR5cGUgbmFtZSBvZiB0aGUgZ2l2ZW4gYW5pbWF0aW9uLiBAc2VlIEFuaW1hdGlvblR5cGVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0byBjaGVjay5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0QW5pbWF0aW9uVHlwZShsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpIHtcclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXJOYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBHZXQgYW5pbWF0aW9uIHR5cGUgb24gbGF5ZXIgJHtsYXllck5hbWV9IGZyb20gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0YXRlID0gbGF5ZXIuZ2V0U3RhdGUoYW5pbWF0aW9uTmFtZSk7XHJcblxyXG4gICAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBHZXQgYW5pbWF0aW9uIHR5cGUgZm9yIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gYW5pbWF0aW9uIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qge2NvbnN0cnVjdG9yfSA9IHN0YXRlO1xyXG5cclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhBbmltYXRpb25UeXBlcykuZmluZChcclxuICAgICAgdHlwZU5hbWUgPT4gQW5pbWF0aW9uVHlwZXNbdHlwZU5hbWVdID09PSBjb25zdHJ1Y3RvclxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIG5ldyBhbmltYXRpb24gdG8gYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGFkZCB0aGUgYW5pbWF0aW9uIHRvLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBhbmltYXRpb24uXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIG5ld1xyXG4gICAqIFNpbmdsZVN0YXRlIGFuaW1hdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIG5hbWUgb2YgdGhlIGFuaW1hdGlvbiB0aGF0IHdhcyBhZGRlZFxyXG4gICAqL1xyXG4gIGFkZEFuaW1hdGlvbihcclxuICAgIGxheWVyTmFtZSxcclxuICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICBhbmltYXRpb25UeXBlID0gQW5pbWF0aW9uVHlwZXMuc2luZ2xlLFxyXG4gICAgb3B0aW9ucyA9IHt9XHJcbiAgKSB7XHJcbiAgICBvcHRpb25zLm5hbWUgPSB0aGlzLl92YWxpZGF0ZU5ld0FuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpO1xyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uIHR5cGUgaXMgdmFsaWRcclxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhBbmltYXRpb25UeXBlcykuaW5jbHVkZXMoYW5pbWF0aW9uVHlwZSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgYWRkIGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IHRvIGxheWVyICR7bGF5ZXJOYW1lfSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIEludmFsaWQgYW5pbWF0aW9uIHR5cGUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuICAgIG9wdGlvbnMuYmxlbmRNb2RlID0gbGF5ZXIuYmxlbmRNb2RlO1xyXG4gICAgb3B0aW9ucy50cmFuc2l0aW9uVGltZSA9IGxheWVyLnRyYW5zaXRpb25UaW1lO1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzW2BfY3JlYXRlJHthbmltYXRpb25UeXBlLm5hbWV9YF0ob3B0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgbmFtZSA9IGxheWVyLmFkZFN0YXRlKHN0YXRlKTtcclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5hZGRBbmltYXRpb24sIHtcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBhbmltYXRpb25OYW1lOiBuYW1lLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYW4gYW5pbWF0aW9uIGZyb20gYW4gYW5pbWF0aW9uIGxheWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIHJlbW92ZSB0aGUgYW5pbWF0aW9uIGZyb20uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gdG8gcmVtb3ZlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcmVtb3ZlQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlzIHZhbGlkXHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDYW5ub3QgcmVtb3ZlIGFuaW1hdGlvbiBmcm9tIGxheWVyICR7bGF5ZXJOYW1lfSBmcm9tIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZW1vdmVkID0gbGF5ZXIucmVtb3ZlU3RhdGUoYW5pbWF0aW9uTmFtZSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZmVhdHVyZVxyXG4gICAgaWYgKHJlbW92ZWQgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnJlbW92ZUFuaW1hdGlvbiwge1xyXG4gICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVtb3ZlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgbmFtZSBvZiBhbiBhbmltYXRpb24uIE5hbWVzIG11c3QgYmUgdW5pcXVlIG9uIGVhY2ggbGF5ZXIsIGlmIHRoZSBuZXdcclxuICAgKiBuYW1lIGlzIG5vdCB1bmlxdWUgaXQgd2lsbCBoYXZlIHRyYWlsaW5nIG51bWJlcnMgYXBwZW5kZWQgdW50aWwgaXQgaXMgdW5pcXVlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbiB0aGF0XHJcbiAgICogd2lsbCBiZSByZW5hbWVkLFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50QW5pbWF0aW9uTmFtZSAtIEN1cnJlbnQgbmFtZSBvZiB0aGUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdBbmltYXRpb25OYW1lIC0gTmV3IG5hbWUgdG8gc2V0IG9uIHRoZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBuZXcgbmFtZSBvZiB0aGUgYW5pbWF0aW9uXHJcbiAgICovXHJcbiAgcmVuYW1lQW5pbWF0aW9uKGxheWVyTmFtZSwgY3VycmVudEFuaW1hdGlvbk5hbWUsIG5ld0FuaW1hdGlvbk5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYENhbm5vdCByZW5hbWUgYW5pbWF0aW9uICR7Y3VycmVudEFuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5hbWUgPSBsYXllci5yZW5hbWVTdGF0ZShjdXJyZW50QW5pbWF0aW9uTmFtZSwgbmV3QW5pbWF0aW9uTmFtZSk7XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIHJlbmFtZWQgb24gdGhlIGZlYXR1cmVcclxuICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5yZW5hbWVBbmltYXRpb24sIHtcclxuICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICBvbGROYW1lOiBjdXJyZW50QW5pbWF0aW9uTmFtZSxcclxuICAgICAgbmV3TmFtZTogbmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgdGhlIGN1cnJlbnRseSBwbGF5aW5nIGFuaW1hdGlvbiBhbmQgcGxheSBhIG5ldyBhbmltYXRpb24gZnJvbSB0aGUgYmVnaW5uaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBzdGF0ZSB0byBwbGF5LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byB0cmFuc2l0aW9uXHJcbiAgICogdG8gdGhlIG5ldyBhbmltYXRpb24uIERlZmF1bHQgaXMgemVybyBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgdHJhbnNpdGlvbmluZ1xyXG4gICAqIGJldHdlZW4gYW5pbWF0aW9ucy4gRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGFuaW1hdGlvbiByZWFjaGVzIHRoZSBlbmQgb2YgaXRzXHJcbiAgICogdGltZWxpbmUuIExvb3BpbmcgYW5pbWF0aW9ucyBjYW4gb25seSByZXNvbHZlIGlmIHRoZXkgYXJlIGludGVycnVwdGVkIG9yXHJcbiAgICogbWFudWFsbHkgc3RvcHBlZC5cclxuICAgKi9cclxuICBwbGF5QW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgc2Vjb25kcywgZWFzaW5nRm4pIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbGF5ZXJOYW1lXTtcclxuXHJcbiAgICBpZiAobGF5ZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBlID0gYENhbm5vdCBwbGF5IGFuaW1hdGlvbiAke2FuaW1hdGlvbk5hbWV9IG9uIGxheWVyICR7bGF5ZXJOYW1lfSBmb3IgaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBObyBsYXllciBleGlzdHMgd2l0aCB0aGlzIG5hbWUuYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3RpZnkgdGhhdCBhIG5ldyBhbmltYXRpb24gaGFzIGJlZ3VuXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheUFuaW1hdGlvbiwge1xyXG4gICAgICBsYXllck5hbWUsXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbGF5ZXIucGxheUFuaW1hdGlvbihcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgc2Vjb25kcyxcclxuICAgICAgZWFzaW5nRm4sXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICAvLyBOb3RpZnkgdGhhdCBhbiBhbmltYXRpb24gaGFzIHN0b3BwZWRcclxuICAgICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMuc3RvcEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBiZWVuIGludGVycnVwdGVkXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLmludGVycnVwdEFuaW1hdGlvbiwge1xyXG4gICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgKHtuYW1lLCBjYW5BZHZhbmNlLCBpc1F1ZXVlRW5kfSkgPT4ge1xyXG4gICAgICAgIGlmIChsYXllci5jdXJyZW50QW5pbWF0aW9uID09PSBhbmltYXRpb25OYW1lKSB7XHJcbiAgICAgICAgICAvLyBOb3RpZnkgdGhhdCBhIG5ldyBhbmltYXRpb24gaGFzIGJlZ3VuXHJcbiAgICAgICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucGxheU5leHRBbmltYXRpb24sIHtcclxuICAgICAgICAgICAgbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgICAgICBuZXh0UXVldWVkQW5pbWF0aW9uOiBuYW1lLFxyXG4gICAgICAgICAgICBjYW5BZHZhbmNlLFxyXG4gICAgICAgICAgICBpc1F1ZXVlRW5kLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGxheSB0aGUgbmV4dCBhbmltYXRpb24gaW4gdGhlIHF1ZXVlIG9mIGEgUXVldWVTdGF0ZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgcXVldWUgYW5pbWF0aW9uLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nPX0gYW5pbWF0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIGFuaW1hdGlvbiBxdWV1ZSBhbmltYXRpb24uIERlZmF1bHRzXHJcbiAgICogdG8gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIGZvciB0aGUgbGF5ZXIuXHJcbiAgICogQHBhcmFtIHtudW1iZXI9fSBzZWNvbmRzIC0gVGhlIG51bWJlciBvZiBzZWNvbmRzIGl0IHNob3VsZCB0YWtlIHRvIHRyYW5zaXRpb25cclxuICAgKiB0byB0aGUgcXVldWUgYW5pbWF0aW9uIGlmIGl0J3Mgbm90IGFscmVhZHkgY3VycmVudGx5IHBsYXlpbmcuIERlZmF1bHQgaXMgemVyb1xyXG4gICAqIGFuZCB3aWxsIHNldCBpbW1lZGlhdGVseS5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZWFzaW5nRm4gLSBUaGUgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGlsZSB0cmFuc2l0aW9uaW5nXHJcbiAgICogdG8gdGhlIHF1ZXVlIGFuaW1hdGlvbiBpZiBpdCBpc24ndCBhbHJlYWR5IHBsYXlpbmcuIERlZmF1bHQgaXMgRWFzaW5nLkxpbmVhci5Jbk91dC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gLSBSZXNvbHZlcyBvbmNlIHRoZSBsYXN0IGFuaW1hdGlvbiBpbiB0aGUgcXVldWUgZmluaXNoZXNcclxuICAgKiBwbGF5aW5nLlxyXG4gICAqL1xyXG4gIHBsYXlOZXh0QW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSwgdHJhbnNpdGlvblRpbWUsIGVhc2luZ0ZuKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyTWFwW2xheWVyTmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcGxheSBuZXh0IGFuaW1hdGlvbiBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFuaW1hdGlvbk5hbWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBhbmltYXRpb25OYW1lID0gbGF5ZXIuY3VycmVudEFuaW1hdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhbmltYXRpb24gPSBsYXllci5nZXRTdGF0ZShsYXllci5jdXJyZW50QW5pbWF0aW9uKTtcclxuXHJcbiAgICBpZiAoYW5pbWF0aW9uID09PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHBsYXkgbmV4dCBhbmltYXRpb24gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGFuaW1hdGlvbiBleGlzdHMgd2l0aCBuYW1lICR7YW5pbWF0aW9uTmFtZX0uYDtcclxuICAgICAgcmV0dXJuIERlZmVycmVkLnJlamVjdChlKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5nZXRBbmltYXRpb25UeXBlKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSkgIT09ICdxdWV1ZScpIHtcclxuICAgICAgY29uc3QgZSA9IGBDYW5ub3QgcGxheSBuZXh0IGFuaW1hdGlvbiBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gJHthbmltYXRpb25OYW1lfSBpcyBub3QgYSBxdWV1ZSBzdGF0ZS5gO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9uTmV4dCA9ICh7bmFtZSwgY2FuQWR2YW5jZSwgaXNRdWV1ZUVuZH0pID0+IHtcclxuICAgICAgaWYgKGxheWVyLmN1cnJlbnRBbmltYXRpb24gPT09IGFuaW1hdGlvbk5hbWUpIHtcclxuICAgICAgICAvLyBOb3RpZnkgdGhhdCBhIG5ldyBhbmltYXRpb24gaGFzIGJlZ3VuXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlOZXh0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICBsYXllck5hbWUsXHJcbiAgICAgICAgICBhbmltYXRpb25OYW1lLFxyXG4gICAgICAgICAgbmV4dFF1ZXVlZEFuaW1hdGlvbjogbmFtZSxcclxuICAgICAgICAgIGNhbkFkdmFuY2UsXHJcbiAgICAgICAgICBpc1F1ZXVlRW5kLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIE1ha2UgdGhlIHF1ZXVlIGFuaW1hdGlvbiBjdXJyZW50IGlmIGl0IHdhc24ndCBhbHJlYWR5XHJcbiAgICBpZiAobGF5ZXIuY3VycmVudEFuaW1hdGlvbiA9PT0gbnVsbCkge1xyXG4gICAgICBsYXllci5yZXN1bWVBbmltYXRpb24oXHJcbiAgICAgICAgYW5pbWF0aW9uLm5hbWUsXHJcbiAgICAgICAgdHJhbnNpdGlvblRpbWUsXHJcbiAgICAgICAgZWFzaW5nRm4sXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgb25OZXh0XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFuaW1hdGlvbi5uZXh0KG9uTmV4dCwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSB0aGUgY3VycmVudCBhbmltYXRpb24gb24gYSBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8gcGF1c2UuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgYW4gYW5pbWF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgcGF1c2VkLlxyXG4gICAqL1xyXG4gIHBhdXNlQW5pbWF0aW9uKG5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBEaWQgbm90IHBhdXNlIGFuaW1hdGlvbiBvbiBsYXllciAke25hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIE5vIGxheWVyIGV4aXN0cyB3aXRoIHRoaXMgbmFtZS5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXVzZWQgPSBsYXllci5wYXVzZUFuaW1hdGlvbigpO1xyXG5cclxuICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiB3YXMgcGF1c2VkXHJcbiAgICBpZiAocGF1c2VkKSB7XHJcbiAgICAgIGNvbnN0IGFuaW1hdGlvbk5hbWUgPSBsYXllci5jdXJyZW50QW5pbWF0aW9uO1xyXG4gICAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucGF1c2VBbmltYXRpb24sIHtcclxuICAgICAgICBsYXllck5hbWU6IG5hbWUsXHJcbiAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhdXNlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIHRoZSBjdXJyZW50bHkgcGxheWluZyBhbmltYXRpb24gYW5kIHBsYXkgYSBuZXcgYW5pbWF0aW9uIGZyb20gd2hlcmUgaXRcclxuICAgKiBsYXN0IGxlZnQgb2ZmLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgY29udGFpbnMgdGhlIGFuaW1hdGlvbi5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IGFuaW1hdGlvbk5hbWUgLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gc3RhdGUgdG8gcmVzdW1lLiBEZWZhdWx0c1xyXG4gICAqIHRvIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBmb3IgdGhlIGxheWVyLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gc2Vjb25kcyAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpdCBzaG91bGQgdGFrZSB0byB0cmFuc2l0aW9uXHJcbiAgICogdG8gdGhlIG5ldyBhbmltYXRpb24uIERlZmF1bHQgaXMgemVybyBhbmQgd2lsbCBzZXQgaW1tZWRpYXRlbHkuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IGVhc2luZ0ZuIC0gVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hpbGUgdHJhbnNpdGlvbmluZ1xyXG4gICAqIGJldHdlZW4gYW5pbWF0aW9ucy4gRGVmYXVsdCBpcyBFYXNpbmcuTGluZWFyLkluT3V0LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGFuaW1hdGlvbiByZWFjaGVzIHRoZSBlbmQgb2YgaXRzXHJcbiAgICogdGltZWxpbmUuIExvb3BpbmcgYW5pbWF0aW9ucyBjYW4gb25seSByZXNvbHZlIGlmIHRoZXkgYXJlIGludGVycnVwdGVkIG9yXHJcbiAgICogbWFudWFsbHkgc3RvcHBlZC5cclxuICAgKi9cclxuICByZXN1bWVBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb25OYW1lLCBzZWNvbmRzLCBlYXNpbmdGbikge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllck1hcFtsYXllck5hbWVdO1xyXG5cclxuICAgIGlmIChsYXllciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGUgPSBgQ2Fubm90IHJlc3VtZSBhbmltYXRpb24gJHthbmltYXRpb25OYW1lfSBvbiBsYXllciAke2xheWVyTmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmA7XHJcbiAgICAgIHJldHVybiBEZWZlcnJlZC5yZWplY3QoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIHdhcyByZXN1bWVkXHJcbiAgICB0aGlzLmVtaXQodGhpcy5jb25zdHJ1Y3Rvci5FVkVOVFMucmVzdW1lQW5pbWF0aW9uLCB7XHJcbiAgICAgIGxheWVyTmFtZSxcclxuICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBsYXllci5yZXN1bWVBbmltYXRpb24oXHJcbiAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgIHNlY29uZHMsXHJcbiAgICAgIGVhc2luZ0ZuLFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgLy8gTm90aWZ5IHRoYXQgYW4gYW5pbWF0aW9uIGhhcyBzdG9wcGVkXHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnN0b3BBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IGFuIGFuaW1hdGlvbiBoYXMgYmVlbiBpbnRlcnJ1cHRlZFxyXG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmNvbnN0cnVjdG9yLkVWRU5UUy5pbnRlcnJ1cHRBbmltYXRpb24sIHtcclxuICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgIGFuaW1hdGlvbk5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgICh7bmFtZSwgY2FuQWR2YW5jZSwgaXNRdWV1ZUVuZH0pID0+IHtcclxuICAgICAgICBpZiAobGF5ZXIuY3VycmVudEFuaW1hdGlvbiA9PT0gYW5pbWF0aW9uTmFtZSkge1xyXG4gICAgICAgICAgLy8gTm90aWZ5IHRoYXQgYSBuZXcgYW5pbWF0aW9uIGhhcyBiZWd1blxyXG4gICAgICAgICAgdGhpcy5lbWl0KHRoaXMuY29uc3RydWN0b3IuRVZFTlRTLnBsYXlOZXh0QW5pbWF0aW9uLCB7XHJcbiAgICAgICAgICAgIGxheWVyTmFtZSxcclxuICAgICAgICAgICAgYW5pbWF0aW9uTmFtZSxcclxuICAgICAgICAgICAgbmV4dFF1ZXVlZEFuaW1hdGlvbjogbmFtZSxcclxuICAgICAgICAgICAgY2FuQWR2YW5jZSxcclxuICAgICAgICAgICAgaXNRdWV1ZUVuZCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIG9uIGEgbGF5ZXIuIFN0b3AgcmV3aW5kcyB0aGUgYW5pbWF0aW9uIHRvIHRoZVxyXG4gICAqIGJlZ2lubmluZyBhbmQgcHJldmVudHMgaXQgZnJvbSBwcm9ncmVzc2luZyBmb3J3YXJkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IGNvbnRhaW5zIHRoZSBhbmltYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgYW4gYW5pbWF0aW9uIHdhcyBzdWNjZXNzZnVsbHkgc3RvcHBlZC5cclxuICAgKi9cclxuICBzdG9wQW5pbWF0aW9uKG5hbWUpIHtcclxuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJNYXBbbmFtZV07XHJcblxyXG4gICAgaWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBEaWQgbm90IHN0b3AgYW5pbWF0aW9uIG9uIGxheWVyICR7bmFtZX0gZm9yIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gTm8gbGF5ZXIgZXhpc3RzIHdpdGggdGhpcyBuYW1lLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllci5zdG9wQW5pbWF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXVzZSBjdXJyZW50IGFuaW1hdGlvbiBhbmQgd2VpZ2h0IGludGVycG9sYXRpb24gYW5pbWF0aW9uIG9uIGFsbCBsYXllcnMuXHJcblxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgb3Igbm90IHRoZXJlIHdhcyBhbiBleGlzdGluZyBpbnRlcnBvbGF0aW9uIG9yXHJcbiAgICogY3VycmVudCBhbmltYXRpb25zIHRvIHBhdXNlLlxyXG4gICAqL1xyXG4gIHBhdXNlKCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgcGF1c2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsID0+IHtcclxuICAgICAgaWYgKGwucGF1c2UoKSkge1xyXG4gICAgICAgIHBhdXNlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwYXVzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgY3VycmVudCBhbmltYXRpb24gYW5kIHdlaWdodCBpbnRlcnBvbGF0aW9uIGFuaW1hdGlvbiBvbiBhbGwgbGF5ZXJzLlxyXG5cclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIG9yIG5vdCB0aGVyZSB3YXMgYW4gZXhpc3RpbmcgaW50ZXJwb2xhdGlvbiBvclxyXG4gICAqIGN1cnJlbnQgYW5pbWF0aW9ucyB0byByZXN1bWUuXHJcbiAgICovXHJcbiAgcmVzdW1lKCkge1xyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHJlc3VtZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX2xheWVycy5mb3JFYWNoKGwgPT4ge1xyXG4gICAgICBpZiAobC5yZXN1bWUoKSkge1xyXG4gICAgICAgIHJlc3VtZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdW1lZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBuYW1lc3BhY2UgdG8gdGhlIGhvc3Qgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byBjb250YWluIHByb3BlcnRpZXNcclxuICAgKiBhbmQgbWV0aG9kcyBmcm9tIHRoZSBmZWF0dXJlIHRoYXQgdXNlcnMgb2YgdGhlIGhvc3QgbmVlZCBhY2Nlc3MgdG8uXHJcbiAgICpcclxuICAgKiBAc2VlIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgKi9cclxuICBpbnN0YWxsQXBpKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAaW5uZXJcclxuICAgICAqIEBuYW1lc3BhY2UgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICovXHJcbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VkXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZWQ6IHtcclxuICAgICAgICBnZXQ6ICgpID0+IHRoaXMucGF1c2VkLFxyXG4gICAgICB9LFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2xheWVyc1xyXG4gICAgICAgKi9cclxuICAgICAgbGF5ZXJzOiB7XHJcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLmxheWVycyxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNhZGRMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgYWRkTGF5ZXI6IHRoaXMuYWRkTGF5ZXIuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3JlbW92ZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICByZW1vdmVMYXllcjogdGhpcy5yZW1vdmVMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjbW92ZUxheWVyXHJcbiAgICAgICAqL1xyXG4gICAgICBtb3ZlTGF5ZXI6IHRoaXMubW92ZUxheWVyLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVMYXllclxyXG4gICAgICAgKi9cclxuICAgICAgcmVuYW1lTGF5ZXI6IHRoaXMucmVuYW1lTGF5ZXIuYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgZ2V0TGF5ZXJXZWlnaHQ6IHRoaXMuZ2V0TGF5ZXJXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3NldExheWVyV2VpZ2h0XHJcbiAgICAgICAqL1xyXG4gICAgICBzZXRMYXllcldlaWdodDogdGhpcy5zZXRMYXllcldlaWdodC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2VMYXllcldlaWdodDogdGhpcy5wYXVzZUxheWVyV2VpZ2h0LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZXN1bWVMYXllcldlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgcmVzdW1lTGF5ZXJXZWlnaHQ6IHRoaXMucmVzdW1lTGF5ZXJXZWlnaHQuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlTGF5ZXI6IHRoaXMucGF1c2VMYXllci5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lTGF5ZXJcclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZUxheWVyOiB0aGlzLnJlc3VtZUxheWVyLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0VHJhbnNpdGlvbmluZ1xyXG4gICAgICAgKi9cclxuICAgICAgZ2V0VHJhbnNpdGlvbmluZzogdGhpcy5nZXRUcmFuc2l0aW9uaW5nLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25zXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25zOiB0aGlzLmdldEFuaW1hdGlvbnMuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldEN1cnJlbnRBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIGdldEN1cnJlbnRBbmltYXRpb246IHRoaXMuZ2V0Q3VycmVudEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjZ2V0UGF1c2VkXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRQYXVzZWQ6IHRoaXMuZ2V0UGF1c2VkLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25UeXBlXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25UeXBlOiB0aGlzLmdldEFuaW1hdGlvblR5cGUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2FkZEFuaW1hdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgYWRkQW5pbWF0aW9uOiB0aGlzLmFkZEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVtb3ZlQW5pbWF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICByZW1vdmVBbmltYXRpb246IHRoaXMucmVtb3ZlQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZW5hbWVBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHJlbmFtZUFuaW1hdGlvbjogdGhpcy5yZW5hbWVBbmltYXRpb24uYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNnZXRBbmltYXRpb25CbGVuZE5hbWVzXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25CbGVuZE5hbWVzOiB0aGlzLmdldEFuaW1hdGlvbkJsZW5kTmFtZXMuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI2dldEFuaW1hdGlvbkJsZW5kV2VpZ2h0XHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRBbmltYXRpb25CbGVuZFdlaWdodDogdGhpcy5nZXRBbmltYXRpb25CbGVuZFdlaWdodC5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgIHNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0OiB0aGlzLnNldEFuaW1hdGlvbkJsZW5kV2VpZ2h0LmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheUFuaW1hdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgcGxheUFuaW1hdGlvbjogdGhpcy5wbGF5QW5pbWF0aW9uLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGxheU5leHRBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHBsYXlOZXh0QW5pbWF0aW9uOiB0aGlzLnBsYXlOZXh0QW5pbWF0aW9uLmJpbmQodGhpcyksXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcGF1c2VBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlQW5pbWF0aW9uOiB0aGlzLnBhdXNlQW5pbWF0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgQW5pbWF0aW9uRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIGNvcmUvQW5pbWF0aW9uRmVhdHVyZSNyZXN1bWVBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZUFuaW1hdGlvbjogdGhpcy5yZXN1bWVBbmltYXRpb24uYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3N0b3BBbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHN0b3BBbmltYXRpb246IHRoaXMuc3RvcEFuaW1hdGlvbi5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBBbmltYXRpb25GZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgY29yZS9BbmltYXRpb25GZWF0dXJlI3BhdXNlXHJcbiAgICAgICAqL1xyXG4gICAgICBwYXVzZTogdGhpcy5wYXVzZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIEFuaW1hdGlvbkZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBjb3JlL0FuaW1hdGlvbkZlYXR1cmUjcmVzdW1lXHJcbiAgICAgICAqL1xyXG4gICAgICByZXN1bWU6IHRoaXMucmVzdW1lLmJpbmQodGhpcyksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBlYWNoIGFuaW1hdGlvbiBsYXllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YVRpbWUgLSBUaW1lIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cclxuICAgKi9cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuX2xheWVycy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgZGVsdGFUaW1lID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZS1ldmFsdWF0ZSBpbnRlcm5hbCB3ZWlnaHRzIGZvciBsYXllcnNcclxuICAgIHRoaXMuX3VwZGF0ZUludGVybmFsV2VpZ2h0cygpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBsYXllcnNcclxuICAgIHRoaXMuX2xheWVycy5mb3JFYWNoKGxheWVyID0+IHtcclxuICAgICAgbGF5ZXIudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcclxuICB9XHJcblxyXG4gIGRpc2NhcmQoKSB7XHJcbiAgICB0aGlzLl9sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XHJcbiAgICAgIGxheWVyLmRpc2NhcmQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRlbGV0ZSB0aGlzLl9sYXllcnM7XHJcbiAgICBkZWxldGUgdGhpcy5fbGF5ZXJNYXA7XHJcblxyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG4gIH1cclxufVxyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEFuaW1hdGlvbkZlYXR1cmUsICdFVkVOVFMnLCB7XHJcbiAgdmFsdWU6IHtcclxuICAgIC4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihBYnN0cmFjdEhvc3RGZWF0dXJlKS5FVkVOVFMsXHJcbiAgICBhZGRMYXllcjogJ29uQWRkTGF5ZXJFdmVudCcsXHJcbiAgICByZW1vdmVMYXllcjogJ29uUmVtb3ZlTGF5ZXJFdmVudCcsXHJcbiAgICByZW5hbWVMYXllcjogJ29uUmVuYW1lTGF5ZXJFdmVudCcsXHJcbiAgICBhZGRBbmltYXRpb246ICdvbkFkZEFuaW1hdGlvbkV2ZW50JyxcclxuICAgIHJlbW92ZUFuaW1hdGlvbjogJ29uUmVtb3ZlZEFuaW1hdGlvbkV2ZW50JyxcclxuICAgIHJlbmFtZUFuaW1hdGlvbjogJ29uUmVuYW1lQW5pbWF0aW9uRXZlbnQnLFxyXG4gICAgcGxheUFuaW1hdGlvbjogJ29uUGxheUV2ZW50JyxcclxuICAgIHBsYXlOZXh0QW5pbWF0aW9uOiAnb25OZXh0RXZlbnQnLFxyXG4gICAgcGF1c2VBbmltYXRpb246ICdvblBhdXNlRXZlbnQnLFxyXG4gICAgcmVzdW1lQW5pbWF0aW9uOiAnb25SZXN1bWVFdmVudCcsXHJcbiAgICBpbnRlcnJ1cHRBbmltYXRpb246ICdvbkludGVycnVwdEV2ZW50JyxcclxuICAgIHN0b3BBbmltYXRpb246ICdvblN0b3BFdmVudCcsXHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBbmltYXRpb25GZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5pbXBvcnQgTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlIGZyb20gJy4vYW5pbXBhY2svTWFuYWdlZEFuaW1hdGlvbkxheWVySW50ZXJmYWNlJztcbmltcG9ydCB7IEFuaW1hdGlvblR5cGVzIH0gZnJvbSAnLi9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlJztcbmltcG9ydCBTU01MU3BlZWNobWFya0ludGVyZmFjZSBmcm9tICcuL2F3c3BhY2svU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2UnO1xuaW1wb3J0IEFic3RyYWN0SG9zdEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdEhvc3RGZWF0dXJlJztcbmltcG9ydCB7IFF1YWRyYXRpYyB9IGZyb20gJy4vYW5pbXBhY2svRWFzaW5nJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi9NYXRoVXRpbHMnO1xuaW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xuXG4vKipcbiAqIEVudW0gZm9yIGF4aXMgZGlyZWN0aW9ucy5cbiAqXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtDbGFzc31cbiAqL1xuY29uc3QgQXhpc01hcCA9IHtcbiAgUG9zaXRpdmVYOiBbMSwgMCwgMF0sXG4gIE5lZ2F0aXZlWDogWy0xLCAwLCAwXSxcbiAgUG9zaXRpdmVZOiBbMCwgMSwgMF0sXG4gIE5lZ2F0aXZlWTogWzAsIC0xLCAwXSxcbiAgUG9zaXRpdmVaOiBbMCwgMCwgMV0sXG4gIE5lZ2F0aXZlWjogWzAsIDAsIC0xXSxcbn07XG5cbmNvbnN0IEZhY2VUYXJnZXRUeXBlcyA9IHtcbiAgRXllQ2VudGVyOiAwLFxuICBFeWVMZWZ0OiAxLFxuICBFeWVSaWdodDogMixcbiAgTW91dGg6IDMsXG59XG5cbi8vIEF2ZXJhZ2UgZGlzdGFuY2UgYmV0d2VlbiBwdXBpbHMgaXMgLjA2NG0sIGdvbGRlbiByYXRpbyBzYXlzIHRoYXQgdGhlIGRpc3RhbmNlXG4vLyBmcm9tIGNlbnRlciBvZiB0aGUgcHVwaWxzIHRvIHRoZSBjZW50ZXIgb2YgdGhlIG1vdXRoIHNob3VsZCBiZSBhYm91dCB0aGUgc2FtZS5cbmNvbnN0IEZhY2VWZWN0b3JzID0gW1xuICBbMCwgMCwgMF0sXG4gIFstLjAzMiwgMCwgMF0sXG4gIFsuMDMyLCAwLCAwXSxcbiAgWzAsIC0uMDY0LCAwXVxuXTtcblxuLy8gVGltZSByYW5nZXMgdG8gdXNlIHdoZW4gY2hvb3NpbmcgYSBuZXcgcmFuZG9tIHdhaXQgdGltZSBiZXR3ZWVuIHNhY2NhZGVzXG5jb25zdCBNaWNyb1NhY2NhZGVXYWl0UmFuZ2VzID0ge1xuICBkZWZhdWx0OiBbMC44LCAxLjc1XSxcbiAgcG9zdE1hY3JvOiBbMC42LCAxLjMxMjVdLFxufTtcblxuY29uc3QgTWFjcm9TYWNjYWRlV2FpdFJhbmdlcyA9IHtcbiAgZGVmYXVsdDogWzUuMCwgOC4wXSxcbiAgbW91dGhUYXJnZXQ6IFswLjIsIDAuNzVdLCAvLyBMb29rIGF3YXkgZnJvbSBhIG1vdXRoIHRhcmdldCB0aGUgZmFzdGVzdFxuICBleWVUYXJnZXQ6IFsxLjUsIDQuMF1cbn07XG5cbi8vIE1pbmltdW0gYW5nbGUgaW4gZGVncmVlcyB0aGUgZXllIGRpcmVjdGlvbiBtdXN0IGNoYW5nZSB0byB0cmlnZ2VyIGEgYmxpbmsgYW5pbWF0aW9uXG5jb25zdCBCbGlua1RocmVzaG9sZCA9IDM1O1xuXG4vLyBNYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdXNlIGZvciBjYWxjdWxhdGluZyBsb29rIHNwZWVkXG5jb25zdCBNYXhEZWx0YSA9IDEwMCAvIDM7XG5cbi8qKlxuICogUG9pbnRPZkludGVyZXN0IGNvbnRyb2xzIHRoZSBnYXplIGRpcmVjdGlvbiBvZiB0aGUgaG9zdC4gR2l2ZW4gb25lIG9yIG1vcmVcbiAqIGFuaW1hdGlvbnMgb2YgdHlwZSBCbGVuZDJkU3RhdGUsIGl0IGNhbGN1bGF0ZXMgdGhlIGFuZ2xlcyBiZXR3ZWVuIHRoZSBsb29rVHJhY2tlclxuICogb2JqZWN0IChnZW5lcmFsbHkgYSBqb2ludCBpbiB0aGUgaG9zdCdzIHNrZWxldG9uKSBhbmQgdGhlIGxvb2tUYXJnZXQgKHRoZSBvYmplY3RcbiAqIHRoZSBob3N0IHNob3VsZCBsb29rIGF0KSBhbmQgZHJpdmVzIHRoZSBtYW5hZ2VkIEJsZW5kMmRTdGF0ZXMnIFggYW5kIFkgYmxlbmRcbiAqIHZhbHVlcyB1c2luZyB0aGUgcmVzdWx0LiBZb3UgY2FuIG9wdGlvbmFsbHkgYWRkIHNhY2NhZGljIG1vdmVtZW50IHRvIGFueSBtYW5hZ2VkXG4gKiBhbmltYXRpb24gdG8gaGVscCBtYWtlIHRoZSBob3N0J3MgZXllcyBhcHBlYXIgYWxpdmUgd2hlbiBmb2N1c2VkIG9uIHRoZSBzYW1lXG4gKiBwb2ludCBmb3IgZXh0ZWRlZCBwZXJpb2RzIG9mIHRpbWUuIElmIGJsaW5rIGFuaW1hdGlvbnMgYXJlIHNwZWNpZmllZCwgYSBibGlua1xuICogd2lsbCBiZSBwbGF5ZWQgZHVyaW5nIGxhcmdlIGNoYW5nZXMgaW4gZ2F6ZSBkaXJlY3Rpb24uXG4gKlxuICogQGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZVxuICogQGFsaWFzIGNvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICogQGltcGxlbWVudHMgU1NNTFNwZWVjaG1hcmtJbnRlcmZhY2VcbiAqIEBpbXBsZW1lbnRzIE1hbmFnZWRBbmltYXRpb25MYXllckludGVyZmFjZVxuICovXG5jbGFzcyBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZS5taXgoXG4gIFNTTUxTcGVlY2htYXJrSW50ZXJmYWNlLk1peGluLFxuICBNYW5hZ2VkQW5pbWF0aW9uTGF5ZXJJbnRlcmZhY2UuTWl4aW5cbikge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCB0aGF0IG93bnMgdGhlIGZlYXR1cmUuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBmZWF0dXJlLlxuICAgKiBAcGFyYW0ge09iamVjdD19IHRhcmdldCAtIDNEIHRyYW5zZm9ybWF0aW9uIG5vZGUgdGhhdCB0aGUgaG9zdCBzaG91bGQgdHJ5IHRvXG4gICAqIGxvb2sgYXQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLmxvb2tUcmFja2VyIC0gM0QgdHJhbnNmb3JtYXRpb24gbm9kZSB0aGF0IHJlcHJlc2VudHNcbiAgICogdGhlIGRpcmVjdGlvbiB0aGUgaG9zdCBpcyBjdXJyZW50bHkgbG9va2luZyBkdXJpbmcgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMuc2NlbmUgLSBFbmdpbmUtc3BlY2lmaWMgc2NlbmUgb2JqZWN0IHRoYXQgY29udGFpbnNcbiAgICogdGhlIGhvc3QuIFRoaXMgb2JqZWN0IG11c3QgYmUgZGVmaW5lZCBpZiB1c2luZyAnc2V0VGFyZ2V0QnlOYW1lJyBvciAnU2V0VGFyZ2V0QnlJZCdcbiAgICogbWV0aG9kcy5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBsb29rT3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsb29rIGFuaW1hdGlvbiBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbG9va09wdGlvbnMuYmxlbmRUaW1lPTAuMV0gLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIGl0IHdpbGxcbiAgICogdGFrZSB0byBtYW5pcHVsYXRlIHRoZSB3ZWlnaHRzIG9mIHRoZSBsb29rIGxheWVycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtsb29rT3B0aW9ucy5lYXNpbmdGbj1RdWFkcmF0aWMuSW5PdXRdIC0gRGVmYXVsdCBlYXNpbmcgZnVuY3Rpb25cbiAgICogdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIGxvb2sgbGF5ZXIgd2VpZ2h0cy5cbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW2xvb2tPcHRpb25zLmxheWVycz1bXV0gLSBBbiBhcnJheSBvZiBsYXllciBvcHRpb25zXG4gICAqIG9iamVjdHMgdG8gcmVnaXN0ZXIgYXMgbG9vayBsYXllcnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gYmxpbmtPcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGJsaW5rIGFuaW1hdGlvbiBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYmxpbmtPcHRpb25zLmJsZW5kVGltZT0wLjA3NV0gLSBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIGl0XG4gICAqIHdpbGwgdGFrZSB0byBtYW5pcHVsYXRlIHRoZSB3ZWlnaHRzIG9mIHRoZSBibGluayBsYXllcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYmxpbmtPcHRpb25zLmVhc2luZ0ZuPVF1YWRyYXRpYy5Jbk91dF0gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvblxuICAgKiB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgYmxpbmsgbGF5ZXIgd2VpZ2h0cy5cbiAgICogQHBhcmFtIHtBcnJheS48T2JqZWN0Pn0gW2JsaW5rT3B0aW9ucy5sYXllcnM9W11dIC0gQW4gYXJyYXkgb2YgbGF5ZXIgb3B0aW9uc1xuICAgKiBvYmplY3RzIHRvIHJlZ2lzdGVyIGFzIGJsaW5rIGxheWVycy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGhvc3QsXG4gICAge1xuICAgICAgdGFyZ2V0LFxuICAgICAgbG9va1RyYWNrZXIsXG4gICAgICBzY2VuZVxuICAgIH0gPSB7fSxcbiAgICB7XG4gICAgICBibGVuZFRpbWU6IGxvb2tCbGVuZFRpbWUgPSAwLjEsXG4gICAgICBlYXNpbmdGbjogbG9va0Vhc2luZ0ZuID0gUXVhZHJhdGljLkluT3V0LFxuICAgICAgbGF5ZXJzOiBsb29rTGF5ZXJzID0gW10sXG4gICAgfSA9IHt9LFxuICAgIHtcbiAgICAgIGJsZW5kVGltZTogYmxpbmtCbGVuZFRpbWUgPSAwLjA3NSxcbiAgICAgIGVhc2luZ0ZuOiBibGlua0Vhc2luZ0ZuID0gUXVhZHJhdGljLkluT3V0LFxuICAgICAgbGF5ZXJzOiBibGlua0xheWVycyA9IFtdLFxuICAgIH0gPSB7fVxuICApIHtcbiAgICBzdXBlcihob3N0KTtcblxuICAgIGlmICghdGhpcy5jb25zdHJ1Y3Rvci5fdmFsaWRhdGVUcmFuc2Zvcm1PYmplY3QobG9va1RyYWNrZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBpbml0aWFsaXplIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUgb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBMb29rVHJhY2tlciBtdXN0IGJlIGRlZmluZWQgYXMgYSB2YWxpZCB0cmFuc2Zvcm1hdGlvbiBvYmplY3QuYCk7XG4gICAgfVxuICAgIHRoaXMuX2xvb2tUcmFja2VyID0gbG9va1RyYWNrZXI7XG5cbiAgICB0aGlzLl9zY2VuZSA9IHNjZW5lO1xuICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldCB8fCBudWxsO1xuICAgIHRoaXMuX3ByZXZUYXJnZXRQb3MgPSBbMCwgMCwgMF07XG4gICAgdGhpcy5faXNUYXJnZXRNb3ZpbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9sb29rTGF5ZXJzID0gdGhpcy5fbG9va0xheWVycyB8fCB7fTtcbiAgICB0aGlzLl90cmFja2luZ0NvbmZpZ3MgPSB0aGlzLl90cmFja2luZ0NvbmZpZ3MgfHwgW107XG4gICAgdGhpcy5fYmxpbmtMYXllcnMgPSB0aGlzLl9ibGlua0xheWVycyB8fCB7fTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBsb29rIGxheWVyc1xuICAgIGxvb2tMYXllcnMuZm9yRWFjaCgoe1xuICAgICAgbmFtZSxcbiAgICAgIGFuaW1hdGlvbixcbiAgICAgIG1heFNwZWVkLFxuICAgICAgcmVmZXJlbmNlLFxuICAgICAgZm9yd2FyZEF4aXMsXG4gICAgICBoYXNTYWNjYWRlLFxuICAgICAgYmxlbmRUaW1lLFxuICAgICAgZWFzaW5nRm5cbiAgICB9KSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyTG9va0xheWVyKG5hbWUsIHtcbiAgICAgICAgYW5pbWF0aW9uLFxuICAgICAgICBtYXhTcGVlZCxcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmb3J3YXJkQXhpcyxcbiAgICAgICAgaGFzU2FjY2FkZSxcbiAgICAgICAgYmxlbmRUaW1lOiBibGVuZFRpbWUgIT09IHVuZGVmaW5lZCA/IGJsZW5kVGltZSA6IGxvb2tCbGVuZFRpbWUsXG4gICAgICAgIGVhc2luZ0ZuOiBlYXNpbmdGbiAhPT0gdW5kZWZpbmVkID8gZWFzaW5nRm4gOiBsb29rRWFzaW5nRm4sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBibGluayBsYXllcnNcbiAgICBibGlua0xheWVycy5mb3JFYWNoKCh7IG5hbWUsIGFuaW1hdGlvbiwgYmxlbmRUaW1lLCBlYXNpbmdGbiB9KSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyQmxpbmtMYXllcihuYW1lLCB7XG4gICAgICAgIGFuaW1hdGlvbixcbiAgICAgICAgYmxlbmRUaW1lOiBibGVuZFRpbWUgIT09IHVuZGVmaW5lZCA/IGJsZW5kVGltZSA6IGJsaW5rQmxlbmRUaW1lLFxuICAgICAgICBlYXNpbmdGbjogZWFzaW5nRm4gIT09IHVuZGVmaW5lZCA/IGVhc2luZ0ZuIDogYmxpbmtFYXNpbmdGbixcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYW5kIHNldHMgdGhlIHRhcmdldCBvYmplY3QgdGhlIGhvc3Qgc2hvdWxkIGxvb2sgYXQuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R8bnVsbH1cbiAgICovXG4gIGdldCB0YXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhcmdldDtcbiAgfVxuXG4gIHNldCB0YXJnZXQodGFyZ2V0KSB7XG4gICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0IHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgZ2xvYmFsIHBvc2l0aW9uIG9mIGFuIG9iamVjdC4gU2hvdWxkIGJlXG4gICAqIG92ZXJsb2FkZWQgZm9yIGVhY2ggcmVuZGVyaW5nIGVuZ2luZSBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IF9vYmogLSBFbmdpbmUtc3BlY2lmaWMgM0QgdHJhbnNmb3JtIG9iamVjdC5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5LjxudW1iZXI+fSAtIEFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgdGhyZWUgbnVtYmVycyByZXByZXNlbnRpbmdcbiAgICogeCwgeSBhbmQgeiBjb29yZGluYXRlcy5cbiAgICovXG4gIHN0YXRpYyBfZ2V0V29ybGRQb3NpdGlvbihvYmopIHtcbiAgICByZXR1cm4gWzAsIDAsIDBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hdHJpeCByZXByZXNlbnRpbmcgdGhlIGdsb2JhbCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb2YgYW4gb2JqZWN0LlxuICAgKiBTaG91bGQgYmUgb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gb2JqIC0gRW5naW5lLXNwZWNpZmljIDNEIHRyYW5zZm9ybSBvYmplY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheS48bnVtYmVyPn0gLSBBbiBhcnJheSBjb25zaXN0aW5nIG9mIDE2IG51bWJlcnMgcmVwcmVzZW50aW5nXG4gICAqIHRoZSAzZCB0cmFuc2Zvcm1hdGlvbi5cbiAgICovXG4gIHN0YXRpYyBfZ2V0V29ybGRNYXRyaXgob2JqKSB7XG4gICAgcmV0dXJuIFsxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb3RhdGUgdGhlIGdpdmVuIGxvY2FsIGRpcmVjdGlvbiB2ZWN0b3IgYnkgdGhlIG9iamVjdCdzIHdvcmxkIHJvdGF0aW9uIG1hdHJpeC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IG9iaiAtIEVuZ2luZS1zcGVjaWZpYyAzRCB0cmFuc2Zvcm0gb2JqZWN0LlxuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBmb3J3YXJkVmVjdG9yIC0gVW5pdCB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhbFxuICAgKiBmb3J3YXJkIGRpcmVjdGlvbiBvZiB0aGUgb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59XG4gICAqL1xuICBzdGF0aWMgX2dldE9iamVjdERpcmVjdGlvbihvYmosIGZvcndhcmRWZWN0b3IgPSBBeGlzTWFwLlBvc2l0aXZlWikge1xuICAgIGNvbnN0IHJvdGF0aW9uID0gTWF0aFV0aWxzLmdldFJvdGF0aW9uTWF0cml4KHRoaXMuX2dldFdvcmxkTWF0cml4KG9iaikpO1xuXG4gICAgcmV0dXJuIE1hdGhVdGlscy5yb3RhdGVWZWN0b3IoZm9yd2FyZFZlY3Rvciwgcm90YXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBsb29rIGFuZ2xlcyBpbiBkZWdyZWVzIGdpdmVuIHNwaGVyaWNhbCB0aGV0YVxuICAgKiBhbmQgcGhpIGFuZ2xlcyBpbiByYWRpYW5zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGhldGEgLSBWZXJ0aWNhbC9wb2xhciBhbmdsZSBpbiByYWRpYW5zIHdoZXJlIDAgcG9pbnRzIGRpcmVjdGx5XG4gICAqIGFsb25nIHBvc2l0aXZlIFkgYXhpcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoaSAtIEhvcml6b250YWwvYXppbXV0aGFsIGFuZ2xlIGluIHJhZGlhbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IC0gQW4gb2JqZWN0IHdpdGggdGhlIHNpZ25hdHVyZSB7aDogbnVtYmVyLCB2OiBudW1iZXJ9IHdoZXJlXG4gICAqIGggcmVwcmVzZW50cyBob3Jpem9udGFsIHJvdGF0aW9uIGluIGRlZ3JlZXMgYW5kIHYgcmVwcmVzZW50cyB2ZXJ0aWNhbCByb3RhdGlvblxuICAgKiBpbiBkZWdyZWVzLlxuICAgKi9cbiAgc3RhdGljIF9zcGhlcmljYWxUb0JsZW5kVmFsdWUodGhldGEsIHBoaSkge1xuICAgIGNvbnN0IGggPSBNYXRoVXRpbHMudG9EZWdyZWVzKHBoaSk7XG5cbiAgICAvLyBPZmZzZXQgdGhlIHZlcnRpY2FsIGFuZ2xlIHNvIDAgaXMgcG9pbnRpbmcgZm9yd2FyZCBpbnN0ZWFkIG9mIHVwXG4gICAgY29uc3QgdiA9IE1hdGhVdGlscy50b0RlZ3JlZXModGhldGEpIC0gOTA7XG5cbiAgICAvLyBDb252ZXJ0IHZlcnRpY2FsIGFuZ2xlIHRvIC0xODAsIDE4MCByYW5nZVxuICAgIHJldHVybiB7IGgsIHYgfVxuICB9XG5cbiAgX29uTGF5ZXJBZGRlZCh7IG5hbWUgfSkge1xuICAgIHRoaXMuX2xvb2tMYXllcnMgPSB0aGlzLl9sb29rTGF5ZXJzIHx8IHt9O1xuICAgIHRoaXMuX2JsaW5rTGF5ZXJzID0gdGhpcy5fYmxpbmtMYXllcnMgfHwge307XG5cbiAgICBzdXBlci5fb25MYXllckFkZGVkKHsgbmFtZSB9KTtcblxuICAgIC8vIFZhbGlkYXRlIHRoZSBsb29rIGFuaW1hdGlvblxuICAgIGlmICh0aGlzLl9sb29rTGF5ZXJzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyTG9va0FuaW1hdGlvbihuYW1lLCB0aGlzLl9sb29rTGF5ZXJzW25hbWVdKTtcbiAgICB9XG4gIH1cblxuICBfb25BbmltYXRpb25BZGRlZCh7IGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSB9KSB7XG4gICAgdGhpcy5fbG9va0xheWVycyA9IHRoaXMuX2xvb2tMYXllcnMgfHwge307XG4gICAgdGhpcy5fYmxpbmtMYXllcnMgPSB0aGlzLl9ibGlua0xheWVycyB8fCB7fTtcblxuICAgIHN1cGVyLl9vbkFuaW1hdGlvbkFkZGVkKHsgbGF5ZXJOYW1lIH0pO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhlIGxvb2sgYW5pbWF0aW9uXG4gICAgaWYgKHRoaXMuX2xvb2tMYXllcnNbbGF5ZXJOYW1lXSA9PT0gYW5pbWF0aW9uTmFtZSkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJMb29rQW5pbWF0aW9uKGxheWVyTmFtZSwgYW5pbWF0aW9uTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSB0aGF0IHJlZ2lzdGVyZWQgbG9vayBhbmltYXRpb25zIGFyZSBCbGVuZDJkU3RhdGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBjb250YWlucyB0aGUgbG9vayBhbmltYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbmltYXRpb25OYW1lIC0gTmFtZSBvZiB0aGUgYW5pbWF0aW9uLlxuICAgKi9cbiAgX3JlZ2lzdGVyTG9va0FuaW1hdGlvbihsYXllck5hbWUsIGFuaW1hdGlvbk5hbWUpIHtcbiAgICBpZiAodGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbYW5pbWF0aW9uTmFtZV0uaXNBY3RpdmUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgQW5pbWF0aW9uVHlwZXNbdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvblR5cGUoXG4gICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgIGFuaW1hdGlvbk5hbWVcbiAgICAgICAgKV0gIT09IEFuaW1hdGlvblR5cGVzLmJsZW5kMmRcbiAgICAgICkge1xuICAgICAgICAvLyBXYXJuIGFuZCBkZWFjdGl2YXRlIGlmIHRoZSByZWdpc3RlcmVkIHN0YXRlIGlzIG5vdCBibGVuZDJkXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgQ2Fubm90IHJlZ2lzdGVyIFBvaW50IG9mIEludGVyZXN0IGxvb2sgYW5pbWF0aW9uICR7YW5pbWF0aW9uTmFtZX0gb24gbGF5ZXIgJHtsYXllck5hbWV9IGZvciBob3N0ICR7dGhpcy5faG9zdC5pZH0uIExvb2sgYW5pbWF0aW9ucyBtdXN0IGJlIG9mIHR5cGUgJ2JsZW5kMmQnLmBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdLmFuaW1hdGlvbnNbXG4gICAgICAgICAgYW5pbWF0aW9uTmFtZVxuICAgICAgICBdLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBnaXZlbiBvYmplY3QgaXMgbm90IG9mIGFuIGVuZ2luZS1zcGVjaWZpYyB0eXBlLiBTaG91bGRcbiAgICogYmUgb3ZlcmxvYWRlZCBmb3IgZWFjaCByZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gb2JqIC0gT2JqZWN0IHRvIHZhbGlkYXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBfdmFsaWRhdGVUcmFuc2Zvcm1PYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIE9iamVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBzdG9yZWQgYXMgYSB0cmFja2luZ1xuICAgKiBjb25maWcuIElmIGl0IGhhcywgcmV0dXJuIHRoZSBzdG9yZWQgY29uZmlndXJhdGlvbi4gT3RoZXJ3aXNlLCBzdG9yZSBhbmRcbiAgICogcmV0dXJuIGl0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gT2JqZWN0IGNvbnRhaW5pbmcgdHJhY2tlciwgcmVmZXJlbmNlIGFuZCBmb3J3YXJkQXhpc1xuICAgKiBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cbiAgX2FkZFRyYWNraW5nQ29uZmlnKGNvbmZpZykge1xuICAgIGNvbnN0IHRyYWNraW5nQ29uZmlnID0gdGhpcy5fdHJhY2tpbmdDb25maWdzLmZpbmQoYyA9PlxuICAgICAgYy5yZWZlcmVuY2UgPT09IGNvbmZpZy5yZWZlcmVuY2UgJiYgYy5mb3J3YXJkQXhpcyA9PT0gY29uZmlnLmZvcndhcmRBeGlzXG4gICAgKTtcblxuICAgIGlmICh0cmFja2luZ0NvbmZpZykge1xuICAgICAgcmV0dXJuIHRyYWNraW5nQ29uZmlnO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcuYW5nbGVzID0geyBoOiAwLCB2OiAwIH07XG4gICAgICBjb25maWcucHJldkFuZ2xlcyA9IHsgaDogMCwgdjogMCB9O1xuICAgICAgdGhpcy5fdHJhY2tpbmdDb25maWdzLnB1c2goY29uZmlnKTtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbG9vayB0cmFja2VyIGFuZCB0aGUgbG9vayB0YXJnZXQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBfZ2V0VGFyZ2V0RGlzdGFuY2UoKSB7XG4gICAgLy8gRmluZCB0aGUgdmVjdG9yIGJldHdlZW4gdGhlIGdsb2JhbCBwb3NpdGlvbnMgb2YgdHJhY2tlciBhbmQgdGFyZ2V0XG4gICAgY29uc3Qgc291cmNlUG9zaXRpb24gPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXRXb3JsZFBvc2l0aW9uKHRoaXMuX2xvb2tUcmFja2VyKTtcbiAgICBjb25zdCB0YXJnZXRQb3NpdGlvbiA9IHRoaXMuY29uc3RydWN0b3IuX2dldFdvcmxkUG9zaXRpb24odGhpcy5fdGFyZ2V0KTtcbiAgICBjb25zdCBsb29rVmVjdG9yID0gW1xuICAgICAgdGFyZ2V0UG9zaXRpb25bMF0gLSBzb3VyY2VQb3NpdGlvblswXSxcbiAgICAgIHRhcmdldFBvc2l0aW9uWzFdIC0gc291cmNlUG9zaXRpb25bMV0sXG4gICAgICB0YXJnZXRQb3NpdGlvblsyXSAtIHNvdXJjZVBvc2l0aW9uWzJdXG4gICAgXTtcblxuICAgIHJldHVybiBNYXRoVXRpbHMuZ2V0VmVjdG9yTWFnbml0dWRlKGxvb2tWZWN0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGFsbCBzdG9yZWQgdHJhY2tpbmcgYW5nbGVzIHRvIDAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzZXRMb29rQW5nbGVzKCkge1xuICAgIHRoaXMuX3RyYWNraW5nQ29uZmlncy5mb3JFYWNoKCh7IGFuZ2xlcyB9KSA9PiB7XG4gICAgICBhbmdsZXMuaCA9IDA7XG4gICAgICBhbmdsZXMudiA9IDA7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgdGhlIGRpZmZlcmVuY2UgaW4gaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgcm90YXRpb24gZm9yIHRoZSB0cmFja2VyJ3NcbiAgICogcmVmZXJlbmNlIHJvdGF0aW9uIGFuZCB0aGUgZGlyZWN0aW9uIG9mIHRoZSB0YXJnZXQgZnJvbSB0aGUgdHJhY2tlci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9zZXRMb29rQW5nbGVzKCkge1xuICAgIC8vIEdldCB0aGUgY3VycmVudCBwb3NpdGlvbnMgb2YgdGhlIHRyYWNrZXIgYW5kIHRhcmdldCBvYmplY3RzXG4gICAgY29uc3QgdGFyZ2V0UG9zID0gdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0V29ybGRQb3NpdGlvbih0aGlzLl90YXJnZXQpO1xuICAgIGNvbnN0IHRyYWNrZXJQb3MgPSB0aGlzLmNvbnN0cnVjdG9yLl9nZXRXb3JsZFBvc2l0aW9uKHRoaXMuX2xvb2tUcmFja2VyKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgaGFzIG1vdmVkXG4gICAgdGhpcy5faXNUYXJnZXRNb3ZpbmcgPSBNYXRoVXRpbHMuZ2V0VmVjdG9yTWFnbml0dWRlKFtcbiAgICAgIHRhcmdldFBvc1swXSAtIHRoaXMuX3ByZXZUYXJnZXRQb3NbMF0sXG4gICAgICB0YXJnZXRQb3NbMV0gLSB0aGlzLl9wcmV2VGFyZ2V0UG9zWzFdLFxuICAgICAgdGFyZ2V0UG9zWzJdIC0gdGhpcy5fcHJldlRhcmdldFBvc1syXV1cbiAgICApID4gMDtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3ByZXZUYXJnZXRQb3MsIHRhcmdldFBvcyk7XG5cblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYW5nbGVzIHRvIHJvdGF0ZSB0byB0aGUgdGFyZ2V0XG4gICAgY29uc3QgdGFyZ2V0U3BoZXJpY2FsID0gTWF0aFV0aWxzLmNhcnRlc2lhblRvU3BoZXJpY2FsKFxuICAgICAgdGFyZ2V0UG9zWzBdIC0gdHJhY2tlclBvc1swXSxcbiAgICAgIHRhcmdldFBvc1sxXSAtIHRyYWNrZXJQb3NbMV0sXG4gICAgICB0YXJnZXRQb3NbMl0gLSB0cmFja2VyUG9zWzJdXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRBbmdsZXMgPSB0aGlzLmNvbnN0cnVjdG9yLl9zcGhlcmljYWxUb0JsZW5kVmFsdWUoXG4gICAgICB0YXJnZXRTcGhlcmljYWxbMV0sXG4gICAgICB0YXJnZXRTcGhlcmljYWxbMl1cbiAgICApO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGFuZ2xlcyByZWxhdGl2ZSB0byB0aGUgcmVmZXJlbmNlIG9iamVjdHNcbiAgICB0aGlzLl90cmFja2luZ0NvbmZpZ3MuZm9yRWFjaCgoe1xuICAgICAgcmVmZXJlbmNlLFxuICAgICAgZm9yd2FyZEF4aXMsXG4gICAgICBhbmdsZXNcbiAgICB9KSA9PiB7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFuZ2xlcyB0byByb3RhdGUgdG8gdGhlIGRpcmVjdGlvbiBvZiB0aGUgdHJhY2tlclxuICAgICAgY29uc3QgcmVmRGlyZWN0aW9uID0gdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0T2JqZWN0RGlyZWN0aW9uKFxuICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgIGZvcndhcmRBeGlzLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlZlNwaGVyaWNhbCA9IE1hdGhVdGlscy5jYXJ0ZXNpYW5Ub1NwaGVyaWNhbCguLi5yZWZEaXJlY3Rpb24pO1xuICAgICAgY29uc3QgcmVmQW5nbGVzID0gdGhpcy5jb25zdHJ1Y3Rvci5fc3BoZXJpY2FsVG9CbGVuZFZhbHVlKFxuICAgICAgICByZWZTcGhlcmljYWxbMV0sXG4gICAgICAgIHJlZlNwaGVyaWNhbFsyXVxuICAgICAgKTtcblxuICAgICAgLy8gU3RvcmUgdGhlIGRpZmZlcmVuY2VcbiAgICAgIGFuZ2xlcy5oID0gdGFyZ2V0QW5nbGVzLmggLSByZWZBbmdsZXMuaDtcbiAgICAgIGFuZ2xlcy52ID0gdGFyZ2V0QW5nbGVzLnYgLSByZWZBbmdsZXMudjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIGFuZ2xlcyBpdCB3b3VsZCByZXF1aXJlIHRvIHNpbXVsYXRlIGxvb2tpbmdcbiAgICogYXQgdGhlIGdpdmVuIHR5cGUgb2YgZmFjZSB0YXJnZXRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRhcmdldFR5cGUgLSBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgRmFjZVRhcmdldFR5cGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9LSBBbiBvYmplY3Qgd2l0aCBzaWduYXR1cmUge3I6IG51bWJlciwgaDogbnVtYmVyLCB2OiBudW1iZXJ9XG4gICAqIHdoZXJlICdyJyByZXByZXNlbnRzIHJhZGl1cywgaCByZXByZXNlbnRzIHRoZSBob3Jpem9udGFsL2F6aW11dGhhbCBhbmdsZSBhbmRcbiAgICogdiByZXByZXNlbnRzIHRoZSB2ZXJ0aWNhbC9wb2xhciBhbmdsZS5cbiAgICovXG4gIF9nZXRGYWNlVGFyZ2V0QW5nbGVzKHRhcmdldFR5cGUpIHtcbiAgICAvLyBObyBvZmZzZXQgd2hlbiB0aGUgdGFyZ2V0IGlzIHRoZSBjZW50ZXIgb2YgdGhlIGV5ZXNcbiAgICBpZiAodGFyZ2V0VHlwZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHsgaDogMCwgdjogMCB9O1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIGEgdmVjdG9yIHRvIHRoZSBmYWNlIHRhcmdldCB0eXBlIHVzaW5nIHRoZSBjdXJyZW50IGRpc3RhbmNlIHRvIHRoZSB0YXJnZXRcbiAgICBjb25zdCBkaXN0YW5jZSA9IHRoaXMuX2dldFRhcmdldERpc3RhbmNlKHRoaXMuX2xvb2tUcmFja2VyKTtcbiAgICBjb25zdCBmYWNlVmVjdG9yID0gWy4uLkZhY2VWZWN0b3JzW3RhcmdldFR5cGVdXTtcbiAgICBmYWNlVmVjdG9yWzJdID0gZGlzdGFuY2U7XG4gICAgY29uc3Qgc3BoZXJpY2FsID0gTWF0aFV0aWxzLmNhcnRlc2lhblRvU3BoZXJpY2FsKC4uLmZhY2VWZWN0b3IpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHZhbHVlcyBhcmUgY2xhbXBlZCB3aXRoaW4gdGhlIHJhbmdlIG9mIG1vdGlvbiBvZiB0aGUgaHVtYW4gZXllLCBpbiBjYXNlIHRoZSB0YXJnZXQgaXMgdmVyeSBjbG9zZVxuICAgIGNvbnN0IGJsZW5kVmFsdWVzID0gdGhpcy5jb25zdHJ1Y3Rvci5fc3BoZXJpY2FsVG9CbGVuZFZhbHVlKHNwaGVyaWNhbFsxXSwgc3BoZXJpY2FsWzJdKTtcbiAgICBibGVuZFZhbHVlcy5oID0gTWF0aFV0aWxzLmNsYW1wKGJsZW5kVmFsdWVzLmgsIC0zNSwgMzUpO1xuICAgIGJsZW5kVmFsdWVzLnYgPSBNYXRoVXRpbHMuY2xhbXAoYmxlbmRWYWx1ZXMudiwgLTI1LCAzMCk7XG5cbiAgICByZXR1cm4gYmxlbmRWYWx1ZXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlZCB0aGUgc3RvcmVkIHNwZWVkIGFuZCBkdXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgbGF5ZXIgYmFzZWQgb24gdGhlXG4gICAqIGNoYW5nZSBpbiBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBhbmdsZXMgb2YgdGhlIHRyYWNrZXIuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0byBzdG9yZSB2YWx1ZXMgb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoIC0gQ2hhbmdlIGluIGhvcml6b250YWwgYW5nbGUsIGluIGRlZ3JlZXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2IC0gQ2hhbmdlIGluIHZlcnRpY2FsIGFuZ2xlLCBpbiBkZWdyZWVzLlxuICAgKi9cbiAgX3VwZGF0ZUxheWVyU3BlZWQobGF5ZXJOYW1lLCBoLCB2KSB7XG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV07XG5cbiAgICAvLyBGcm9tIFwiUmVhbGlzdGljIEF2YXRhciBhbmQgaGVhZCBBbmltYXRpb24gVXNpbmcgYSBOZXVyb2Jpb2xvZ2ljYWwgTW9kZWwgb2YgVmlzdWFsIEF0dGVudGlvblwiLCBJdHRpLCBEaGF2YWxlLCBQaWdoaW5cbiAgICBsYXllci5tYXhIU3BlZWQgPSA0NzMgKiAoMSAtIE1hdGguZXhwKC1oIC8gNy44KSk7XG4gICAgbGF5ZXIubWF4VlNwZWVkID0gNDczICogKDEgLSBNYXRoLmV4cCgtdiAvIDcuOCkpO1xuXG4gICAgLy8gRnJvbSBcIkV5ZXMgQWxpdmVcIiwgTGVlLCBCYWRsZXJcbiAgICBjb25zdCBEMCA9IDAuMDI1O1xuICAgIGNvbnN0IGQgPSAwLjAwMjM1O1xuICAgIGxheWVyLmhEdXJhdGlvbiA9IEQwICsgZCAqIGg7XG4gICAgbGF5ZXIudkR1cmF0aW9uID0gRDAgKyBkICogdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG1pY3JvU2FjY2FkZSBvYmplY3Qgd2l0aCBuZXcgcmFuZG9taXplZCB2YWx1ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IG93bnMgdGhlIHNhY2NhZGUgbW90aW9uLlxuICAgKi9cbiAgX3NldE1pY3JvU2FjY2FkZShsYXllck5hbWUpIHtcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBjb25zdCB7IG1pY3JvU2FjY2FkZSB9ID0gbGF5ZXI7XG5cbiAgICBpZiAodGhpcy5fdGFyZ2V0KSB7XG4gICAgICAvLyBNaWNybyBtb3ZlbWVudHMgc2hvdWxkIGJlIHNtYWxsZXIgd2hlbiBmb2N1c2VkIG9uIGEgdGFyZ2V0XG4gICAgICBtaWNyb1NhY2NhZGUuaCA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4wMSwgLjE1KTtcbiAgICAgIG1pY3JvU2FjY2FkZS52ID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjAxLCAuMTUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNaWNyb3NhY2NhZGVzLiBFbmN5Y2xvcGVkaWEgb2YgTmV1cm9zY2llbmNlLiAoMjAwOSkgU3ByaW5nZXIsIEJlcmxpbiwgSGVpZGVsYmVyZy4gaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDcvOTc4LTMtNTQwLTI5Njc4LTJfMzQ5MlxuICAgICAgbWljcm9TYWNjYWRlLmggPSBVdGlscy5nZXRSYW5kb21GbG9hdCguMDEsIC4zKTtcbiAgICAgIG1pY3JvU2FjY2FkZS52ID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjAxLCAuMyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlTGF5ZXJTcGVlZChsYXllck5hbWUsIG1pY3JvU2FjY2FkZS5oLCBtaWNyb1NhY2NhZGUudik7XG5cbiAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lclxuICAgIHRoaXMuX2luaXRpYWxpemVNaWNyb1RpbWVyKGxheWVyTmFtZSwgLi4uTWljcm9TYWNjYWRlV2FpdFJhbmdlcy5kZWZhdWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG1hY3JvU2FjY2FkZSBvYmplY3Qgd2l0aCBuZXcgcmFuZG9taXplZCB2YWx1ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllck5hbWUgLSBOYW1lIG9mIHRoZSBsYXllciB0aGF0IG93bnMgdGhlIHNhY2NhZGUgbW90aW9uLlxuICAgKi9cbiAgX3NldE1hY3JvU2FjY2FkZShsYXllck5hbWUpIHtcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBjb25zdCB7IG1hY3JvU2FjY2FkZSB9ID0gbGF5ZXI7XG4gICAgbGV0IG1hY3JvU2FjY2FkZVdhaXRSYW5nZTtcblxuICAgIC8vIEluY3JlYXNlIHJhbmRvbSB2YWx1ZSByYW5nZSB3aGVuIG5vdCBmb2N1c2VkIG9uIGEgdGFyZ2V0XG4gICAgaWYgKCF0aGlzLl90YXJnZXQpIHtcbiAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdDtcblxuICAgICAgLy8gTm9ybWFsIGh1bWFuIGhvcml6b250YWwgZXllIHJvdGF0aW9uIGxpbWl0IGlzIGFib3V0IDM1IGRlZ3JlZXNcbiAgICAgIGNvbnN0IGhMaW1pdCA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC4xNDMsIC4yODYpO1xuICAgICAgY29uc3QgaEZhY3RvciA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KC1oTGltaXQsIGhMaW1pdCk7XG4gICAgICBtYWNyb1NhY2NhZGUuaCA9IGhGYWN0b3IgKiAzNTtcblxuICAgICAgLy8gTm9ybWFsIGh1bWFuIHZlcnRpY2FsIGV5ZSByb3RhdGlvbiBsaW1pdCBpcyBhYm91dCAyNSBkZWdyZWVzIHVwd2FyZCBhbmQgMzAgZGVncmVlcyBkb3dud2FyZFxuICAgICAgY29uc3QgdkxpbWl0ID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLjA5MywgLjE4Nik7XG4gICAgICBjb25zdCB2RmFjdG9yID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQoLXZMaW1pdCwgdkxpbWl0KTtcbiAgICAgIG1hY3JvU2FjY2FkZS52ID0gdkZhY3RvciA+IDAgPyB2RmFjdG9yICogMjUgOiB2RmFjdG9yICogMzA7XG4gICAgfVxuXG4gICAgLy8gUGljayBhIG5ldyBmYWNlIHRhcmdldFxuICAgIGVsc2Uge1xuICAgICAgLy8gU29jaWFsIHRyaWFuZ2xlIC0gc2FjY2FkZSBiZXR3ZWVuIGV5ZXMgYW5kIG1vdXRoLCB3ZWlnaHRlZCB0byBsb29rIGF0IGV5ZXMgbW9yZSBvZnRlblxuICAgICAgc3dpdGNoIChsYXllci5zYWNjYWRlVGFyZ2V0KSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtYWNyb1NhY2NhZGVXYWl0UmFuZ2UgPSBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmV5ZVRhcmdldDtcbiAgICAgICAgICBsYXllci5zYWNjYWRlVGFyZ2V0ID0gTWF0aC5yYW5kb20oKSA8IDAuNzUgPyBGYWNlVGFyZ2V0VHlwZXMuRXllUmlnaHRcbiAgICAgICAgICAgIDogRmFjZVRhcmdldFR5cGVzLk1vdXRoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5leWVUYXJnZXQ7XG4gICAgICAgICAgbGF5ZXIuc2FjY2FkZVRhcmdldCA9IE1hdGgucmFuZG9tKCkgPCAwLjc1ID8gRmFjZVRhcmdldFR5cGVzLkV5ZUxlZnRcbiAgICAgICAgICAgIDogRmFjZVRhcmdldFR5cGVzLk1vdXRoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWFjcm9TYWNjYWRlV2FpdFJhbmdlID0gTWFjcm9TYWNjYWRlV2FpdFJhbmdlcy5tb3V0aFRhcmdldDtcbiAgICAgICAgICBsYXllci5zYWNjYWRlVGFyZ2V0ID0gTWF0aC5yYW5kb20oKSA8IDAuNSA/IEZhY2VUYXJnZXRUeXBlcy5FeWVMZWZ0XG4gICAgICAgICAgICA6IEZhY2VUYXJnZXRUeXBlcy5FeWVSaWdodDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG1hY3JvU2FjY2FkZVdhaXRSYW5nZSA9IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZXllVGFyZ2V0O1xuICAgICAgICAgIGxheWVyLnNhY2NhZGVUYXJnZXQgPSBNYXRoLnJhbmRvbSgpIDwgMC41ID8gRmFjZVRhcmdldFR5cGVzLkV5ZUxlZnRcbiAgICAgICAgICAgIDogRmFjZVRhcmdldFR5cGVzLkV5ZVJpZ2h0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGgsIHYgfSA9IHRoaXMuX2dldEZhY2VUYXJnZXRBbmdsZXMobGF5ZXIuc2FjY2FkZVRhcmdldCk7XG4gICAgICBtYWNyb1NhY2NhZGUuaCA9IGg7XG4gICAgICBtYWNyb1NhY2NhZGUudiA9IHY7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlTGF5ZXJTcGVlZChsYXllck5hbWUsIG1hY3JvU2FjY2FkZS5oLCBtYWNyb1NhY2NhZGUudik7XG5cbiAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lcnNcbiAgICB0aGlzLl9pbml0aWFsaXplTWljcm9UaW1lcihsYXllck5hbWUsIC4uLk1pY3JvU2FjY2FkZVdhaXRSYW5nZXMucG9zdE1hY3JvKTtcbiAgICB0aGlzLl9pbml0aWFsaXplTWFjcm9UaW1lcihsYXllck5hbWUsIC4uLm1hY3JvU2FjY2FkZVdhaXRSYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSBuZXcgd2FpdCB0aW1lciB0aGF0IHdpbGwgc2V0IGEgbmV3IG1pY3JvIHNhY2NhZGUgbW92ZW1lbnQgd2hlbiBpdFxuICAgKiByZXNvbHZlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRoYXQgb3ducyB0aGUgc2FjY2FkZSBtb3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW5XYWl0VGltZSAtIE1pbmltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGEgbmV3IHNhY2NhZGVcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhXYWl0VGltZSAtIE1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIGEgbmV3IHNhY2NhZGVcbiAgICogd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAqL1xuICBfaW5pdGlhbGl6ZU1pY3JvVGltZXIobGF5ZXJOYW1lLCBtaW5XYWl0VGltZSwgbWF4V2FpdFRpbWUpIHtcbiAgICBjb25zdCBsYXllciA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcbiAgICBjb25zdCB3YWl0VGltZSA9IFV0aWxzLmdldFJhbmRvbUZsb2F0KG1pbldhaXRUaW1lLCBtYXhXYWl0VGltZSk7XG5cbiAgICBpZiAobGF5ZXIubWljcm9TYWNjYWRlVGltZXIpIHtcbiAgICAgIGxheWVyLm1pY3JvU2FjY2FkZVRpbWVyLmNhbmNlbCgpO1xuICAgIH1cbiAgICBsYXllci5taWNyb1NhY2NhZGVUaW1lciA9IFV0aWxzLndhaXQod2FpdFRpbWUsIHtcbiAgICAgIG9uRmluaXNoOiAoKSA9PiB7IHRoaXMuX3NldE1pY3JvU2FjY2FkZShsYXllck5hbWUpIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIG5ldyB3YWl0IHRpbWVyIHRoYXQgd2lsbCBzZXQgYSBuZXcgbWFjcm8gc2FjY2FkZSBtb3ZlbWVudCB3aGVuIGl0XG4gICAqIHJlc29sdmVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdGhhdCBvd25zIHRoZSBzYWNjYWRlIG1vdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pbldhaXRUaW1lIC0gTWluaW11bSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgYSBuZXcgc2FjY2FkZVxuICAgKiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heFdhaXRUaW1lIC0gTWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgYSBuZXcgc2FjY2FkZVxuICAgKiB3aWxsIGJlIHRyaWdnZXJlZC5cbiAgICovXG4gIF9pbml0aWFsaXplTWFjcm9UaW1lcihsYXllck5hbWUsIG1pbldhaXRUaW1lLCBtYXhXYWl0VGltZSkge1xuICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbWFuYWdlZExheWVyc1tsYXllck5hbWVdO1xuICAgIGNvbnN0IHdhaXRUaW1lID0gVXRpbHMuZ2V0UmFuZG9tRmxvYXQobWluV2FpdFRpbWUsIG1heFdhaXRUaW1lKTtcblxuICAgIGlmIChsYXllci5tYWNyb1NhY2NhZGVUaW1lcikge1xuICAgICAgbGF5ZXIubWFjcm9TYWNjYWRlVGltZXIuY2FuY2VsKCk7XG4gICAgfVxuICAgIGxheWVyLm1hY3JvU2FjY2FkZVRpbWVyID0gVXRpbHMud2FpdCh3YWl0VGltZSwge1xuICAgICAgb25GaW5pc2g6ICgpID0+IHsgdGhpcy5fc2V0TWFjcm9TYWNjYWRlKGxheWVyTmFtZSkgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fG51bGx9IHRhcmdldCAtIFRoZSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXG4gICAqL1xuICBzZXRUYXJnZXQodGFyZ2V0KSB7XG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYW4gb2JqZWN0IGdpdmVuIGl0cyBuYW1lIGFuZCBzZXRzIGl0IGFzIHRoZSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXG4gICAqIFNob3VsZCBiZSBvdmVybG9hZGVkIGZvciBlYWNoIHJlbmRlcmluZyBlbmdpbmUgaW1wbGVtZW50YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBOYW1lIHRvIHNlYXJjaCBmb3IuXG4gICAqL1xuICBzZXRUYXJnZXRCeU5hbWUobmFtZSkge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhpcy5fdGFyZ2V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3NjZW5lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgUG9pbnRPZkludGVyZXN0RmVhdHVyZSB0YXJnZXQgdXNpbmcgbmFtZSAke25hbWV9IG9uIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gU2NlbmUgbXVzdCBiZSBkZWZpbmVkLmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhbiBvYmplY3QgZ2l2ZW4gaXRzIGlkIGFuZCBzZXRzIGl0IGFzIHRoZSBuZXcgdGFyZ2V0IHRvIGxvb2sgYXQuXG4gICAqIFNob3VsZCBiZSBvdmVybG9hZGVkIGZvciBlYWNoIHJlbmRlcmluZyBlbmdpbmUgaW1wbGVtZW50YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdGFyZ2V0IC0gSWQgdG8gc2VhcmNoIGZvci5cbiAgICovXG4gIHNldFRhcmdldEJ5SWQoaWQpIHtcbiAgICBpZiAoIWlkKSB7XG4gICAgICB0aGlzLl90YXJnZXQgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc2NlbmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIHRhcmdldCB1c2luZyBpZCAke2lkfSBvbiBob3N0ICR7dGhpcy5faG9zdC5pZH0uIFNjZW5lIG11c3QgYmUgZGVmaW5lZC5gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQga2VlcGluZyB0cmFjayBvZiBhbiBhbmltYXRpb24gbGF5ZXIgdGhhdCBvd25zIGEgYmxlbmQyZCBhbmltYXRpb24gd2l0aFxuICAgKiBibGVuZFdlaWdodHMgY29ycmVzcG9uZGluZyB0byBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBsb29rIGFuZ2xlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyTmFtZSAtIE5hbWUgb2YgdGhlIGxheWVyIHRvIGtlZXAgdHJhY2sgb2YuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBsYXllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuaW1hdGlvbiA9ICdsb29rJ10gLSBOYW1lIG9mIHRoZSBhbmltYXRpb24gb24gdGhlXG4gICAqIGxheWVyIHdob3NlIGJsZW5kV2VpZ2h0cyB3aWxsIGJlIGRyaXZlbiBiYXNlZCBvbiB0aGUgYW5nbGUgYmV0d2VlbiB0aGUgbG9va1RyYWNrZXJcbiAgICogYW5kIHRoZSBsb29rVGFyZ2V0LiBUaGlzIGFuaW1hdGlvbiBtdXN0IGJlIG9mIHR5cGUgYmxlbmQyZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFNwZWVkID0gMjVdIC0gVGhlIG1heGltdW0gc3BlZWQgYXQgd2hpY2ggdGhlIGJsZW5kMmRcbiAgICogYmxlbmRXZWlnaHRzIGNhbiBiZSBtYW5pcHVsYXRlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmZvcndhcmRBeGlzID0gJ1Bvc2l0aXZlWiddIC0gQXhpcyBwb2ludGluZyBmcm9tIHRoZVxuICAgKiBmcm9udCBvZiB0aGUgbG9va1JlZmVyZW5jZSBvYmplY3QuIFZhbGlkIG9wdGlvbnMgYXJlICdQb3NpdGl2ZVgnLCAnTmVnYXRpdmVYJyxcbiAgICogJ1Bvc2l0aXZlWScsICdOZWdhdGl2ZVknLCAnUG9zaXRpdmVaJywgJ05lZ2F0aXZlWicuXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucy5sb29rUmVmZXJlbmNlIC0gM0QgdHJhbnNmb3JtYXRpb24gbm9kZSB0aGF0IHRoZSBsb29rVHJhY2tlclxuICAgKiByb3RhdGlvbiBsaW1pdHMgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8uIERlZmF1bHRzIHRvIHRoZSBob3N0IG93bmVyLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuaGFzU2FjY2FkZSA9IGZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGVcbiAgICogc2FjY2FkaWMgbW90aW9uIG9udG8gdGhlIGJsZW5kV2VpZ2h0IGFuaW1hdGlvbi4gVGhpcyBzaG91bGQgb25seSBiZSBzZXQgdG9cbiAgICogdHJ1ZSBmb3IgYmxlbmQyZCBhbmltYXRpb25zIHJlcHJlc2VudGluZyBleWUgYW5pbWF0aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcj19IFtvcHRpb25zLmJsZW5kVGltZT1bUG9pbnRPZkludGVyZXN0RmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lXXtAbGluayBQb2ludE9mSW50ZXJlc3RGZWF0dXJlI0RFRkFVTFRfTEFZRVJfT1BUSU9OUyNibGVuZFRpbWV9XSAtXG4gICAqIERlZmF1bHQgYW1vdW50IG9mIHRpbWUgdG8gdXNlIHdoZW4gbWFuaXB1bGF0aW5nIGxheWVyIHdlaWdodC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9wdGlvbnMuZWFzaW5nRm4gLSBEZWZhdWx0IGVhc2luZyBmdW5jdGlvbiB0byB1c2Ugd2hlblxuICAgKiBtYW5pcHVsYXRpbmcgbGF5ZXIgd2VpZ2h0LlxuICAgKi9cbiAgcmVnaXN0ZXJMb29rTGF5ZXIoXG4gICAgbGF5ZXJOYW1lLFxuICAgIHtcbiAgICAgIGFuaW1hdGlvbiA9ICdsb29rJyxcbiAgICAgIG1heFNwZWVkID0gMjUsXG4gICAgICByZWZlcmVuY2UsXG4gICAgICBmb3J3YXJkQXhpcyA9ICdQb3NpdGl2ZVonLFxuICAgICAgaGFzU2FjY2FkZSA9IGZhbHNlLFxuICAgICAgYmxlbmRUaW1lID0gUG9pbnRPZkludGVyZXN0RmVhdHVyZS5ERUZBVUxUX0xBWUVSX09QVElPTlMuYmxlbmRUaW1lLFxuICAgICAgZWFzaW5nRm5cbiAgICB9ID0ge31cbiAgKSB7XG4gICAgLy8gVmFsaWRhdGUgcmVmZXJlbmNlIG9iamVjdFxuICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZSB8fCB0aGlzLl9ob3N0Lm93bmVyO1xuXG4gICAgaWYgKCF0aGlzLmNvbnN0cnVjdG9yLl92YWxpZGF0ZVRyYW5zZm9ybU9iamVjdChyZWZlcmVuY2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBpbml0aWFsaXplIHJlZ2lzdGVyIGxvb2sgbGF5ZXIgJHtsYXllck5hbWV9IGZvciBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIG9uIGhvc3QgJHt0aGlzLl9ob3N0LmlkfS4gUmVmZXJlbmNlIG11c3QgYmUgZGVmaW5lZCBhcyBhIHZhbGlkIHRyYW5zZm9ybWF0aW9uIG9iamVjdC5gKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHZlY3RvciBhc3NvY2lhdGVkIHdpdGggYXhpcyBzdHJpbmdcbiAgICBmb3J3YXJkQXhpcyA9IEF4aXNNYXBbZm9yd2FyZEF4aXNdICE9PSB1bmRlZmluZWRcbiAgICAgID8gQXhpc01hcFtmb3J3YXJkQXhpc11cbiAgICAgIDogQXhpc01hcC5Qb3NpdGl2ZVo7XG5cbiAgICAvLyBTdG9yZSB0cmFja2luZyBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgdHJhY2tpbmdDb25maWcgPSB0aGlzLl9hZGRUcmFja2luZ0NvbmZpZyh7XG4gICAgICByZWZlcmVuY2UsXG4gICAgICBmb3J3YXJkQXhpc1xuICAgIH0pO1xuXG4gICAgLy8gUmVnaXN0ZXIgdGhlIGxheWVyIGFuZCBhbmltYXRpb25cbiAgICB0aGlzLnJlZ2lzdGVyTGF5ZXIobGF5ZXJOYW1lLCB7XG4gICAgICB0cmFja2luZ0NvbmZpZyxcbiAgICAgIG1heFNwZWVkLFxuICAgICAgbWF4SFNwZWVkOiB1bmRlZmluZWQsXG4gICAgICBtYXhWU3BlZWQ6IHVuZGVmaW5lZCxcbiAgICAgIGhEdXJhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgdkR1cmF0aW9uOiB1bmRlZmluZWQsXG4gICAgICBoVmVsb2NpdHk6IFswLCAwXSxcbiAgICAgIHZWZWxvY2l0eTogWzAsIDBdLFxuICAgICAgaGFzU2FjY2FkZSxcbiAgICAgIGJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuLFxuICAgICAgbWljcm9TYWNjYWRlOiB7IGg6IDAsIHY6IDAgfSxcbiAgICAgIG1hY3JvU2FjY2FkZTogeyBoOiAwLCB2OiAwIH0sXG4gICAgICBzYWNjYWRlVGFyZ2V0OiBGYWNlVGFyZ2V0VHlwZXMuRXllQ2VudGVyLFxuICAgICAgYW5pbWF0aW9uczogeyBbYW5pbWF0aW9uXToge30gfSxcbiAgICB9KTtcbiAgICB0aGlzLl9sb29rTGF5ZXJzW2xheWVyTmFtZV0gPSBhbmltYXRpb247XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgbG9vayBhbmltYXRpb25cbiAgICB0aGlzLl9yZWdpc3Rlckxvb2tBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltYXRpb24pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzYWNjYWRlIHRpbWVyc1xuICAgIGlmIChoYXNTYWNjYWRlKSB7XG4gICAgICBjb25zdCBtYWNyb1NhY2NhZGVXYWl0UmFuZ2UgPSB0aGlzLl90YXJnZXRcbiAgICAgICAgPyBNYWNyb1NhY2NhZGVXYWl0UmFuZ2VzLmV5ZVRhcmdldFxuICAgICAgICA6IE1hY3JvU2FjY2FkZVdhaXRSYW5nZXMuZGVmYXVsdDtcbiAgICAgIHRoaXMuX2luaXRpYWxpemVNaWNyb1RpbWVyKGxheWVyTmFtZSwgLi4uTWljcm9TYWNjYWRlV2FpdFJhbmdlcy5kZWZhdWx0KTtcbiAgICAgIHRoaXMuX2luaXRpYWxpemVNYWNyb1RpbWVyKGxheWVyTmFtZSwgLi4ubWFjcm9TYWNjYWRlV2FpdFJhbmdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQga2VlcGluZyB0cmFjayBvZiBhbiBhbmltYXRpb24gbGF5ZXIgdGhhdCBvd25zIGEgYmxpbmsgYW5pbWF0aW9uLiBCbGlua1xuICAgKiBhbmltYXRpb25zIGNhbiBiZSBvZiBhbnkgdHlwZSwgYnV0IGlmIGl0IGlzIG9mIHR5cGUgcmFuZG9tQW5pbWF0aW9uIHRoZW4gYVxuICAgKiBpdCB3aWxsIGJlIHJhbmRvbWl6ZWQgZWFjaCB0aW1lIGEgYmxpbmsgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJOYW1lIC0gTmFtZSBvZiB0aGUgbGF5ZXIgdG8ga2VlcCB0cmFjayBvZi5cbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5pbWF0aW9uID0gJ2JsaW5rJ10gLSBOYW1lIG9mIHRoZSBibGluayBhbmltYXRpb25cbiAgICogb24gdGhlIGxheWVyLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYmxlbmRUaW1lPVtQb2ludE9mSW50ZXJlc3RGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWVde0BsaW5rIFBvaW50T2ZJbnRlcmVzdEZlYXR1cmUjREVGQVVMVF9MQVlFUl9PUFRJT05TI2JsZW5kVGltZX1dIC1cbiAgICogRGVmYXVsdCBhbW91bnQgb2YgdGltZSB0byB1c2Ugd2hlbiBtYW5pcHVsYXRpbmcgdGhlIGxheWVyJ3Mgd2VpZ2h0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb3B0aW9ucy5lYXNpbmdGbiAtIERlZmF1bHQgZWFzaW5nIGZ1bmN0aW9uIHRvIHVzZSB3aGVuXG4gICAqIG1hbmlwdWxhdGluZyB0aGUgbGF5ZXIncyB3ZWlnaHQuXG4gICAqL1xuICByZWdpc3RlckJsaW5rTGF5ZXIoXG4gICAgbGF5ZXJOYW1lLFxuICAgIHtcbiAgICAgIGFuaW1hdGlvbiA9ICdibGluaycsXG4gICAgICBibGVuZFRpbWUgPSBQb2ludE9mSW50ZXJlc3RGZWF0dXJlLkRFRkFVTFRfTEFZRVJfT1BUSU9OUy5ibGVuZFRpbWUsXG4gICAgICBlYXNpbmdGblxuICAgIH0gPSB7fVxuICApIHtcbiAgICAvLyBSZWdpc3RlciB0aGUgbGF5ZXIgYW5kIGFuaW1hdGlvblxuICAgIHRoaXMucmVnaXN0ZXJMYXllcihsYXllck5hbWUsIHtcbiAgICAgIGJsZW5kVGltZSxcbiAgICAgIGVhc2luZ0ZuLFxuICAgICAgYW5pbWF0aW9uczogeyBbYW5pbWF0aW9uXToge30gfSxcbiAgICB9KTtcbiAgICB0aGlzLl9ibGlua0xheWVyc1tsYXllck5hbWVdID0gYW5pbWF0aW9uO1xuICB9XG5cbiAgdXBkYXRlKGRlbHRhVGltZSkge1xuICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBsb29rIGFuZ2xlc1xuICAgIGlmICh0aGlzLl90YXJnZXQpIHtcbiAgICAgIHRoaXMuX3NldExvb2tBbmdsZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVzZXRMb29rQW5nbGVzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFTZWNvbmRzID0gTWF0aC5taW4oZGVsdGFUaW1lLCBNYXhEZWx0YSkgLyAxMDAwO1xuICAgIGxldCB0cmlnZ2VyQmxpbmsgPSBmYWxzZTtcblxuICAgIC8vIFNldCBsb29rIGJsZW5kIHZhbHVlc1xuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuX2xvb2tMYXllcnMpLmZvckVhY2goKFtsYXllck5hbWUsIGFuaW1OYW1lXSkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX21hbmFnZWRMYXllcnNbbGF5ZXJOYW1lXTtcblxuICAgICAgLy8gSW5jcmVtZW50IHRoZSBzYWNjYWRlIHRpbWVyc1xuICAgICAgaWYgKG9wdGlvbnMuaXNBY3RpdmUgJiYgb3B0aW9ucy5oYXNTYWNjYWRlKSB7XG4gICAgICAgIG9wdGlvbnMubWljcm9TYWNjYWRlVGltZXIuZXhlY3V0ZShkZWx0YVRpbWUpO1xuICAgICAgICBvcHRpb25zLm1hY3JvU2FjY2FkZVRpbWVyLmV4ZWN1dGUoZGVsdGFUaW1lKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHRoZSBibGVuZCB2YWx1ZXNcbiAgICAgIGlmIChvcHRpb25zLmFuaW1hdGlvbnNbYW5pbU5hbWVdLmlzQWN0aXZlKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRIID0gdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLmdldEFuaW1hdGlvbkJsZW5kV2VpZ2h0KFxuICAgICAgICAgIGxheWVyTmFtZSwgYW5pbU5hbWUsICdYJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBjdXJyZW50ViA9IHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5nZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgICBsYXllck5hbWUsIGFuaW1OYW1lLCAnWSdcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgdGFyZ2V0SCA9IG9wdGlvbnMudHJhY2tpbmdDb25maWcuYW5nbGVzLmg7XG4gICAgICAgIGxldCB0YXJnZXRWID0gb3B0aW9ucy50cmFja2luZ0NvbmZpZy5hbmdsZXMudjtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgbG9vayBhbmdsZSBoYXMgY2hhbmdlZCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJsaW5rXG4gICAgICAgIGlmICh0aGlzLl9pc1RhcmdldE1vdmluZyAmJiAhdHJpZ2dlckJsaW5rKSB7XG4gICAgICAgICAgY29uc3QgcHJldlRhcmdldEggPSBvcHRpb25zLnRyYWNraW5nQ29uZmlnLnByZXZBbmdsZXMuaDtcbiAgICAgICAgICBjb25zdCBwcmV2VGFyZ2V0ViA9IG9wdGlvbnMudHJhY2tpbmdDb25maWcucHJldkFuZ2xlcy52O1xuICAgICAgICAgIGNvbnN0IGNoYW5nZUFtb3VudCA9IE1hdGhVdGlscy50b0RlZ3JlZXMoXG4gICAgICAgICAgICBNYXRoVXRpbHMuZ2V0QW5nbGVCZXR3ZWVuKFxuICAgICAgICAgICAgICBbcHJldlRhcmdldEgsIHByZXZUYXJnZXRWXSxcbiAgICAgICAgICAgICAgW3RhcmdldEgsIHRhcmdldFZdXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChjaGFuZ2VBbW91bnQgPj0gQmxpbmtUaHJlc2hvbGQpIHtcbiAgICAgICAgICAgIHRyaWdnZXJCbGluayA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy50cmFja2luZ0NvbmZpZy5wcmV2QW5nbGVzLmggPSB0YXJnZXRIO1xuICAgICAgICBvcHRpb25zLnRyYWNraW5nQ29uZmlnLnByZXZBbmdsZXMudiA9IHRhcmdldFY7XG5cbiAgICAgICAgLy8gQWRkIGluIHRoZSBzYWNjYWRlIG1vdmVtZW50XG4gICAgICAgIGlmIChvcHRpb25zLmhhc1NhY2NhZGUpIHtcbiAgICAgICAgICBNYXRoVXRpbHMuZGFtcFZhbHVlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIG9wdGlvbnMubWFjcm9TYWNjYWRlLmggKyBvcHRpb25zLm1hY3JvU2FjY2FkZS5oLFxuICAgICAgICAgICAgb3B0aW9ucy5oVmVsb2NpdHksXG4gICAgICAgICAgICBvcHRpb25zLmhEdXJhdGlvbixcbiAgICAgICAgICAgIG9wdGlvbnMubWF4SFNwZWVkXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0YXJnZXRIICs9IG9wdGlvbnMuaFZlbG9jaXR5WzBdO1xuICAgICAgICAgIE1hdGhVdGlscy5kYW1wVmFsdWUoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgb3B0aW9ucy5tYWNyb1NhY2NhZGUudiArIG9wdGlvbnMubWFjcm9TYWNjYWRlLnYsXG4gICAgICAgICAgICBvcHRpb25zLnZWZWxvY2l0eSxcbiAgICAgICAgICAgIG9wdGlvbnMudkR1cmF0aW9uLFxuICAgICAgICAgICAgb3B0aW9ucy5tYXhWU3BlZWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRhcmdldFYgKz0gb3B0aW9ucy52VmVsb2NpdHlbMF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbGFtcCB0byBtYXggc3BlZWRcbiAgICAgICAgY29uc3QgZmFjdG9yID0gTWF0aFV0aWxzLmNsYW1wKGRlbHRhU2Vjb25kcyAqIG9wdGlvbnMubWF4U3BlZWQsIDAsIDEpO1xuICAgICAgICB0YXJnZXRIID0gTWF0aFV0aWxzLmxlcnAoY3VycmVudEgsIHRhcmdldEgsIGZhY3Rvcik7XG4gICAgICAgIHRhcmdldFYgPSBNYXRoVXRpbHMubGVycChjdXJyZW50ViwgdGFyZ2V0ViwgZmFjdG9yKTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIGJsZW5kIHZhbHVlc1xuICAgICAgICB0aGlzLl9ob3N0LkFuaW1hdGlvbkZlYXR1cmUuc2V0QW5pbWF0aW9uQmxlbmRXZWlnaHQoXG4gICAgICAgICAgbGF5ZXJOYW1lLFxuICAgICAgICAgIGFuaW1OYW1lLFxuICAgICAgICAgICdYJyxcbiAgICAgICAgICB0YXJnZXRIXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2hvc3QuQW5pbWF0aW9uRmVhdHVyZS5zZXRBbmltYXRpb25CbGVuZFdlaWdodChcbiAgICAgICAgICBsYXllck5hbWUsXG4gICAgICAgICAgYW5pbU5hbWUsXG4gICAgICAgICAgJ1knLFxuICAgICAgICAgIHRhcmdldFZcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghdHJpZ2dlckJsaW5rIHx8ICF0aGlzLl9pc1RhcmdldE1vdmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGUgYmxpbmtcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLl9ibGlua0xheWVycykuZm9yRWFjaCgoW2xheWVyTmFtZSwgYW5pbU5hbWVdKSA9PiB7XG4gICAgICBjb25zdCBhbmltYXRpb24gPSB0aGlzLl9tYW5hZ2VkTGF5ZXJzW2xheWVyTmFtZV0uYW5pbWF0aW9uc1thbmltTmFtZV07XG5cbiAgICAgIGlmIChhbmltYXRpb24uaXNBY3RpdmUpIHtcbiAgICAgICAgdGhpcy5faG9zdC5BbmltYXRpb25GZWF0dXJlLnBsYXlBbmltYXRpb24obGF5ZXJOYW1lLCBhbmltTmFtZSk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGluc3RhbGxBcGkoKSB7XG4gICAgLyoqXG4gICAgICogQGlubmVyXG4gICAgICogQG5hbWVzcGFjZSBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICovXG4gICAgY29uc3QgYXBpID0gc3VwZXIuaW5zdGFsbEFwaSgpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3RhcmdldFxuICAgICAgICovXG4gICAgICB0YXJnZXQ6IHtcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLnRhcmdldCxcbiAgICAgICAgc2V0OiB0YXJnZXQgPT4geyB0aGlzLnRhcmdldCA9IHRhcmdldCB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIE9iamVjdC5hc3NpZ24oYXBpLCB7XG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3JlZ2lzdGVyTG9va0xheWVyXG4gICAgICAgKi9cbiAgICAgIHJlZ2lzdGVyTG9va0xheWVyOiB0aGlzLnJlZ2lzdGVyTG9va0xheWVyLmJpbmQodGhpcyksXG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3JlZ2lzdGVyQmxpbmtMYXllclxuICAgICAgICovXG4gICAgICByZWdpc3RlckJsaW5rTGF5ZXI6IHRoaXMucmVnaXN0ZXJCbGlua0xheWVyLmJpbmQodGhpcyksXG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3NldFRhcmdldFxuICAgICAgICovXG4gICAgICBzZXRUYXJnZXQ6IHRoaXMuc2V0VGFyZ2V0LmJpbmQodGhpcyksXG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3NldFRhcmdldEJ5TmFtZVxuICAgICAgICovXG4gICAgICBzZXRUYXJnZXRCeU5hbWU6IHRoaXMuc2V0VGFyZ2V0QnlOYW1lLmJpbmQodGhpcyksXG4gICAgICAvKipcbiAgICAgICAqIEBtZW1iZXJvZiBQb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAqIEBtZXRob2RcbiAgICAgICAqIEBzZWUgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlI3NldFRhcmdldEJ5SWRcbiAgICAgICAqL1xuICAgICAgc2V0VGFyZ2V0QnlJZDogdGhpcy5zZXRUYXJnZXRCeUlkLmJpbmQodGhpcyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXBpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBvaW50T2ZJbnRlcmVzdEZlYXR1cmU7XG5leHBvcnQgeyBBeGlzTWFwIH07IiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcbmltcG9ydCBDb3JlUG9pbnRPZkludGVyZXN0RmVhdHVyZSwge0F4aXNNYXB9IGZyb20gJ2NvcmUvUG9pbnRPZkludGVyZXN0RmVhdHVyZSc7XG5cbi8qKlxuICogQGV4dGVuZHMgY29yZS9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlXG4gKiBAYWxpYXMgdGhyZWUuanMvUG9pbnRPZkludGVyZXN0RmVhdHVyZVxuICovXG5jbGFzcyBQb2ludE9mSW50ZXJlc3RGZWF0dXJlIGV4dGVuZHMgQ29yZVBvaW50T2ZJbnRlcmVzdEZlYXR1cmUge1xuICBzdGF0aWMgX2dldFdvcmxkUG9zaXRpb24ob2JqKSB7XG4gICAgb2JqLnVwZGF0ZVdvcmxkTWF0cml4KHRydWUsIGZhbHNlKTtcbiAgICByZXR1cm4gb2JqLm1hdHJpeFdvcmxkLmVsZW1lbnRzLnNsaWNlKDEyLCAxNSk7XG4gIH1cblxuICBzdGF0aWMgX2dldFdvcmxkTWF0cml4KG9iaikge1xuICAgIG9iai51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG4gICAgcmV0dXJuIFsuLi5vYmoubWF0cml4V29ybGQuZWxlbWVudHNdO1xuICB9XG5cbiAgX3ZhbGlkYXRlVHJhbnNmb3JtT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBUSFJFRS5PYmplY3QzRDtcbiAgfVxuXG4gIHNldFRhcmdldEJ5TmFtZShuYW1lKSB7XG4gICAgc3VwZXIuc2V0VGFyZ2V0QnlOYW1lKG5hbWUpO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5fc2NlbmUuZ2V0T2JqZWN0QnlOYW1lKG5hbWUpO1xuICB9XG5cbiAgc2V0VGFyZ2V0QnlJZChpZCkge1xuICAgIHN1cGVyLnNldFRhcmdldEJ5TmFtZShpZCk7XG4gICAgaWYgKCFpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5fc2NlbmUuZ2V0T2JqZWN0QnlJZChpZCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUG9pbnRPZkludGVyZXN0RmVhdHVyZTtcbmV4cG9ydCB7QXhpc01hcH07XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvcHJlZmVyLWRlZmF1bHQtZXhwb3J0XHJcbmV4cG9ydCBjb25zdCBlbnYgPSAndGhyZWUnO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuXG5pbXBvcnQgVXRpbHMgZnJvbSAnY29yZS9VdGlscyc7XG5cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIHVzZWZ1bCB0ZXh0LXRvLXNwZWVjaCBmdW5jdGlvbnMuXG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICovXG5jbGFzcyBUZXh0VG9TcGVlY2hVdGlscyB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IHN0cmluZyB3aXRoIFNTTUwgbWFya3MgaW5zZXJ0ZWQgYmFzZWQgb25cbiAgICogbWF0Y2hlcyBiZXR3ZWVuIHRoZSBpbnB1dCBzdHJpbmcgYW5kIHRoZSBpbnB1dCBtYXAuIFRoZVxuICAgKiB3b3JkIG1hdGNoZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuIFdvcmRzIHdpdGhpbiBleGlzdGluZ1xuICAgKiBTU01MIHRhZ3Mgd2lsbCBub3QgYmUgYWZmZWN0ZWQuIElucHV0IHRleHQgd2lsbCBiZSBzdXJyb3VuZGVkXG4gICAqIGJ5IDxzcGVhaz48L3NwZWFrPiB0YWdzIGlmIG5lZWRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBJbnB1dCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtYXAgLSBJbnB1dCBvYmplY3QgdGhhdCBtYXBzIG1hcmsga2V5c1xuICAgKiB0byBhcnJheXMgb2Ygd29yZHMuIEV4YW1wbGU6XG4gICAqXG4gICAqICB7XG4gICAqICAgICdtYXJrOnNhZCcgOiBbJ3NhZCcsICdibHVlJywgJ2Rvd24nXSxcbiAgICogICAgJ21hcms6aGFwcHknIDogWydqb3knLCAnZ2xhZCcsICdncmVhdCddLFxuICAgKiAgICAnbWFyazpubycgOiBbJ25vJywgJ25haCcsICduYXknLCAnc3VyZSddXG4gICAqICB9XG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IFtyYW5kb21NYXJrcyA9IFtdXSAtIElmIHRoZXJlIGFyZSBzZW50ZW5jZXMgdGhhdCBkb24ndFxuICAgKiBtYXRjaCBhbnkgd29yZHMgZnJvbSB0aGUgbWFwIG9iamVjdCwgbWFya3MgZnJvbSB0aGlzIGFycmF5IHdpbGwgYmUgcmFuZG9tbHlcbiAgICogY2hvc2VuIGFuZCBpbnNlcnRlZC5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVcGRhdGVkIGlucHV0IHN0cmluZy5cbiAgICovXG4gIHN0YXRpYyBhdXRvR2VuZXJhdGVTU01MTWFya3ModGV4dCwgbWFwLCByYW5kb21NYXJrcyA9IFtdKSB7XG4gICAgaWYgKHR5cGVvZiBtYXAgIT09ICdvYmplY3QnIHx8IG1hcCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGdlbmVyYXRlIFNTTUwgbWFya3MgZm9yIHRleHQgXCIke3RleHR9XCIgYmVjYXVzZSBtYXAgaXMgbm90IGFuIG9iamVjdC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHByb2Nlc3MgdGhlIGlucHV0IG1hcCBpbnRvIGFuIGludGVybmFsIGZvcm1hdFxuICAgIGNvbnN0IGludGVybmFsTWFwID0gdGhpcy5fcHJvY2Vzc0lucHV0TWFwKG1hcCk7XG5cbiAgICBjb25zdCBzcGVha1RhZ3MgPSBbJzxzcGVhaz4nLCAnPC9zcGVhaz4nXTtcbiAgICBjb25zdCBzc21sTWFya1JlZ2V4ID0gLzxtYXJrIG5hbWU9KD86XCJ8JykoLio/KSg/OlwifCcpXFwvPi87XG4gICAgY29uc3Qgc3NtbFRhZ1JlZ2V4ID0gLzxbXj5dKj4vZztcblxuICAgIC8vIElkZW50aWZ5IGFueSBleGlzdGluZyBTU01MIHRhZ3NcbiAgICBjb25zdCBleGlzdGluZ1RhZ3MgPSBbXTtcbiAgICBsZXQgcmVzdWx0ID0gc3NtbFRhZ1JlZ2V4LmV4ZWModGV4dCk7XG5cbiAgICB3aGlsZSAocmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICBleGlzdGluZ1RhZ3MucHVzaCh7XG4gICAgICAgIHN0YXJ0OiByZXN1bHQuaW5kZXgsXG4gICAgICAgIGVuZDogcmVzdWx0LmluZGV4ICsgcmVzdWx0WzBdLmxlbmd0aCxcbiAgICAgICAgdGV4dDogcmVzdWx0WzBdLFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdCA9IHNzbWxUYWdSZWdleC5leGVjKHRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgbGV0IHNzbWxNYXJrUmVzdWx0O1xuICAgIGxldCBkdXBsaWNhdGVNYXJrVG9DaGVjayA9IFtdO1xuICAgIGV4aXN0aW5nVGFncy5mb3JFYWNoKGV4aXN0aW5nVGFnID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0ciA9IHRleHQuc2xpY2UoaW5kZXgsIGV4aXN0aW5nVGFnLnN0YXJ0KTtcblxuICAgICAgaWYgKHN1YnN0ciAhPT0gJycpIHtcbiAgICAgICAgLy8gYXV0by1tYXJrIG5vbi10YWcgdGV4dFxuICAgICAgICBjaHVua3MucHVzaChcbiAgICAgICAgICB0aGlzLl9pbnNlcnRNYXJrcyhzdWJzdHIsIGludGVybmFsTWFwLCBkdXBsaWNhdGVNYXJrVG9DaGVjaylcbiAgICAgICAgKTtcblxuICAgICAgICBkdXBsaWNhdGVNYXJrVG9DaGVjayA9IFtdO1xuICAgICAgfVxuXG4gICAgICBzc21sTWFya1Jlc3VsdCA9IHNzbWxNYXJrUmVnZXguZXhlYyhleGlzdGluZ1RhZy50ZXh0KTtcblxuICAgICAgaWYgKHNzbWxNYXJrUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1hcmtUZXh0ID0gc3NtbE1hcmtSZXN1bHRbMV07XG4gICAgICAgIGR1cGxpY2F0ZU1hcmtUb0NoZWNrLnB1c2gobWFya1RleHQpO1xuICAgICAgfSBlbHNlIGlmICghc3BlYWtUYWdzLmluY2x1ZGVzKGV4aXN0aW5nVGFnLnRleHQpKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKGV4aXN0aW5nVGFnLnRleHQpO1xuICAgICAgfVxuXG4gICAgICAvLyBhZHZhbmNlIHRoZSBpbmRleFxuICAgICAgaW5kZXggPSBleGlzdGluZ1RhZy5lbmQ7XG4gICAgfSk7XG5cbiAgICBjaHVua3MucHVzaChcbiAgICAgIHRoaXMuX2luc2VydE1hcmtzKHRleHQuc2xpY2UoaW5kZXgpLCBpbnRlcm5hbE1hcCwgZHVwbGljYXRlTWFya1RvQ2hlY2spXG4gICAgKTtcblxuICAgIGxldCBtYXJrZWRUZXh0ID0gY2h1bmtzLmpvaW4oJycpO1xuXG4gICAgaWYgKHJhbmRvbU1hcmtzICYmIHJhbmRvbU1hcmtzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIGFkZCByYW5kb20gbWFya3MgdG8gYW55IHVubWFya2VkIHNlbnRlbmNlc1xuICAgICAgbWFya2VkVGV4dCA9IHRoaXMuYWRkTWFya3NUb1VubWFya2VkU2VudGVuY2VzKFxuICAgICAgICBtYXJrZWRUZXh0LFxuICAgICAgICByYW5kb21NYXJrc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVGV4dFRvU3BlZWNoVXRpbHMudmFsaWRhdGVUZXh0KG1hcmtlZFRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgc3RyaW5nIHdpdGggYSByYW5kb20gU1NNTCBtYXJrIGluc2VydGVkIGF0IGVhY2ggc2VudGVuY2UgdGhhdFxuICAgKiBkb2VzIG5vdCBhbHJlYWR5IGNvbnRhaW4gYW4gU1NNTCBtYXJrLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIElucHV0IHN0cmluZy5cbiAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gbWFya3MgLSBBbnkgYXJyYXkgb2YgcmFuZG9tIFNTTUwgbWFya3MgdG8gY2hvb3NlIGZyb21cbiAgICogd2hlbiBtb2RpZnlpbmcgdGhlIHRleHQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgYWRkTWFya3NUb1VubWFya2VkU2VudGVuY2VzKHRleHQsIG1hcmtzKSB7XG4gICAgaWYgKCFtYXJrcyB8fCBtYXJrcy5sZW5ndGggPT09IDApIHJldHVybiB0ZXh0O1xuXG4gICAgY29uc3Qgc3NtbE1hcmtSZWdleCA9IC88bWFyayBuYW1lPSg/OlwifCcpKC4qPykoPzpcInwnKVxcLz4vZztcbiAgICBjb25zdCBzc21sVGFnUmVnZXggPSAvPFtePl0qPi9nO1xuXG4gICAgLy8gRmluZCB0aGUgaW5kaWNlcyBvZiBhbnkgbWFya3MgaW4gdGhlIHRleHRcbiAgICBjb25zdCBtYXJrSW5kaWNlcyA9IFtdO1xuICAgIGxldCBtYXJrUmVzdWx0ID0gc3NtbE1hcmtSZWdleC5leGVjKHRleHQpO1xuXG4gICAgd2hpbGUgKG1hcmtSZXN1bHQgIT09IG51bGwpIHtcbiAgICAgIG1hcmtJbmRpY2VzLnB1c2gobWFya1Jlc3VsdC5pbmRleCk7XG4gICAgICBtYXJrUmVzdWx0ID0gc3NtbE1hcmtSZWdleC5leGVjKHRleHQpO1xuICAgIH1cblxuICAgIC8vIEZpbmQgYWxsIFNTTUwgdGFncyBpbiB0aGUgdGV4dFxuICAgIGNvbnN0IGV4aXN0aW5nVGFncyA9IFtdO1xuICAgIGxldCBzc21sUmVzdWx0ID0gc3NtbFRhZ1JlZ2V4LmV4ZWModGV4dCk7XG4gICAgd2hpbGUgKHNzbWxSZXN1bHQgIT09IG51bGwpIHtcbiAgICAgIGV4aXN0aW5nVGFncy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IHNzbWxSZXN1bHQuaW5kZXgsXG4gICAgICAgIGVuZDogc3NtbFJlc3VsdC5pbmRleCArIHNzbWxSZXN1bHRbMF0ubGVuZ3RoLFxuICAgICAgICB0ZXh0OiBzc21sUmVzdWx0WzBdLFxuICAgICAgfSk7XG4gICAgICBzc21sUmVzdWx0ID0gc3NtbFRhZ1JlZ2V4LmV4ZWModGV4dCk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgdGV4dCB3aXRoIGFsbCBTU01MIG1hcmtzIHJlcGxhY2VzIHdpdGggd2hpdGVzcGFjZVxuICAgIGxldCBjbGVhbmVkVGV4dCA9IHRleHQuc2xpY2UoKTtcbiAgICBleGlzdGluZ1RhZ3MuZm9yRWFjaChleGlzdGluZ1NzbWwgPT4ge1xuICAgICAgY29uc3Qgd2hpdGVzcGFjZSA9IG5ldyBBcnJheShleGlzdGluZ1NzbWwudGV4dC5sZW5ndGggKyAxKS5qb2luKCcgJyk7XG4gICAgICBjbGVhbmVkVGV4dCA9IFtcbiAgICAgICAgY2xlYW5lZFRleHQuc2xpY2UoMCwgZXhpc3RpbmdTc21sLnN0YXJ0KSxcbiAgICAgICAgd2hpdGVzcGFjZSxcbiAgICAgICAgY2xlYW5lZFRleHQuc2xpY2UoZXhpc3RpbmdTc21sLmVuZCksXG4gICAgICBdLmpvaW4oJycpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2VudGVuY2VFbmRJbmRpY2VzID0gdGhpcy5fZ2V0U2VudGVuY2VFbmRzKGNsZWFuZWRUZXh0KTtcblxuICAgIC8vIE9ubHkgaW5zZXJ0IHJhbmRvbSBtYXJrcyBpbnRvIHNlbnRlbmNlcyB0aGF0IGRvbid0IGFscmVhZHkgaGF2ZSBhbnlcbiAgICBsZXQgcHJldkluZGV4ID0gMDtcbiAgICBjb25zdCB0YXJnZXRJbmRpY2VzID0gc2VudGVuY2VFbmRJbmRpY2VzLmZpbHRlcihpbmRleCA9PiB7XG4gICAgICBjb25zdCBjb250YWluc01hcmsgPVxuICAgICAgICBtYXJrSW5kaWNlcy5maW5kSW5kZXgobWFya0luZGV4ID0+IHtcbiAgICAgICAgICByZXR1cm4gcHJldkluZGV4IDw9IG1hcmtJbmRleCAmJiBpbmRleCA+IG1hcmtJbmRleDtcbiAgICAgICAgfSkgIT09IC0xO1xuICAgICAgcHJldkluZGV4ID0gaW5kZXg7XG4gICAgICByZXR1cm4gIWNvbnRhaW5zTWFyaztcbiAgICB9KTtcblxuICAgIGNvbnN0IHJhbmRvbU1hcmtlZFRleHQgPSB0aGlzLl9pbnNlcnRSYW5kb21NYXJrc0F0KFxuICAgICAgdGV4dCxcbiAgICAgIHRhcmdldEluZGljZXMsXG4gICAgICBtYXJrc1xuICAgICk7XG5cbiAgICByZXR1cm4gcmFuZG9tTWFya2VkVGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHZlcnNpb24gb2YgZ2l2ZW4gdGV4dCB0aGF0IGlzIGVuY2xvc2VkIGJ5IFBvbGx5IHNzbWwgc3BlYWsgdGFncy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCB0byB2YWxpZGF0ZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBVcGRhdGVkIGlucHV0IHN0cmluZy5cbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZVRleHQodGV4dCkge1xuICAgIGlmICghdGV4dCkge1xuICAgICAgdGV4dCA9ICc8c3BlYWs+PC9zcGVhaz4nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZXh0ID0gdGV4dFxuICAgICAgICAucmVwbGFjZSgvKF5cXHMqPFxccypzcGVha1xccyopPlxccyp8KF5cXHMqKS8sICc8c3BlYWs+JylcbiAgICAgICAgLnJlcGxhY2UoLyhcXHMqPFxccypcXC9cXHMqc3BlYWtcXHMqPlxccyokfFxccyokKS8sICc8L3NwZWFrPicpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFuIGlucHV0IHN0cmluZyBhbmQgaW5zZXJ0IFNTTUwgbWFya3MgYmFzZWQgb25cbiAgICogd29yZCBtYXRjaGVzIGluIGEgbWFwLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIElucHV0IHN0cmluZy5cbiAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gW2luZGljZXMgPSBbXV0gLSBBbiBhcnJheSBvZiBpbmRpY2VzIGluIHRoZSB0ZXh0IGlucHV0XG4gICAqIHdoZXJlIHJhbmRvbSBtYXJrcyBzaG91bGQgYmUgaW5zZXJ0ZWQuXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IFttYXJrcyA9IFtdXSAtIEFuIGFycmF5IG9mIG1hcmsgc3RyaW5ncyB0byBjaG9vc2VcbiAgICogZnJvbSB3aGVuIGluc2VydGluZyByYW5kb20gbWFya3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBpbnB1dCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgX2luc2VydFJhbmRvbU1hcmtzQXQodGV4dCwgaW5kaWNlcyA9IFtdLCBtYXJrcyA9IFtdKSB7XG4gICAgaWYgKCFtYXJrcyB8fCBtYXJrcy5sZW5ndGggPT09IDAgfHwgIWluZGljZXMgfHwgaW5kaWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cblxuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGluZGljZXMuZm9yRWFjaChpbmRleCA9PiB7XG4gICAgICBjb25zdCByYW5kb21NYXJrID0gYDxtYXJrIG5hbWU9JyR7XG4gICAgICAgIG1hcmtzW1V0aWxzLmdldFJhbmRvbUludCgwLCBtYXJrcy5sZW5ndGgpXVxuICAgICAgfScvPmA7XG4gICAgICB0ZXh0ID0gW1xuICAgICAgICB0ZXh0LnNsaWNlKDAsIGluZGV4ICsgb2Zmc2V0KSxcbiAgICAgICAgcmFuZG9tTWFyayxcbiAgICAgICAgdGV4dC5zbGljZShpbmRleCArIG9mZnNldCksXG4gICAgICBdLmpvaW4oJycpO1xuICAgICAgb2Zmc2V0ICs9IHJhbmRvbU1hcmsubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGEgc3RyaW5nIG9mIHRleHQgYW5kIHJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW5kaWNlc1xuICAgKiBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gYSBzZW50ZW5jZSB0aGF0IGlzIG5vdCBpbiB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAqICAoJy4nLCAnPycsICchJylcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IHRvIHByb2Nlc3MgZm9yIGVuZCBvZiBzZW50ZW5jZVxuICAgKiBpbmRpY2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXkuPG51bWJlcj59IC0gQXJyYXkgb2YgZW5kIG9mIHNlbnRlbmNlIGluZGljZXMuXG4gICAqL1xuICBzdGF0aWMgX2dldFNlbnRlbmNlRW5kcyh0ZXh0KSB7XG4gICAgY29uc3Qgc2VudGVuY2VSZWdleCA9IC9bXi4hP10rWy4hP10rL2c7XG4gICAgY29uc3QgZW5kU2VudGVuY2VSZWdleCA9IC9bLiE/XSsvO1xuXG4gICAgbGV0IHJlc3VsdCA9IHNlbnRlbmNlUmVnZXguZXhlYyh0ZXh0KTtcbiAgICBjb25zdCBzZW50ZW5jZUVuZHMgPSBbXTtcbiAgICB3aGlsZSAocmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAvLyBmaW5kIHRoZSBsYXN0IG5vbi1wdW5jdHVhdGlvbiBjaGFyYWN0ZXJcbiAgICAgIGNvbnN0IHB1bmN0UmVzdWx0ID0gZW5kU2VudGVuY2VSZWdleC5leGVjKHJlc3VsdFswXSk7XG4gICAgICBzZW50ZW5jZUVuZHMucHVzaChcbiAgICAgICAgcmVzdWx0LmluZGV4ICsgcmVzdWx0WzBdLmxlbmd0aCAtIHB1bmN0UmVzdWx0WzBdLmxlbmd0aFxuICAgICAgKTtcbiAgICAgIHJlc3VsdCA9IHNlbnRlbmNlUmVnZXguZXhlYyh0ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VudGVuY2VFbmRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFuIGlucHV0IHN0cmluZyBhbmQgaW5zZXJ0IFNTTUwgbWFya3MgYmFzZWQgb25cbiAgICogd29yZCBtYXRjaGVzIGluIGEgbWFwLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIElucHV0IHN0cmluZy5cbiAgICogQHBhcmFtIHtNYXB9IG1hcCAtIE1hcHBpbmcgb2Ygd29yZHMgdG8gbWFyayB2YWx1ZXMgdGhhdFxuICAgKiB3aWxsIGJlIGluc2VydGVkIGFzIHRoZSB2YWx1ZSBmb3IgYSBtYXJrJ3MgJ25hbWUnIGF0dHJpYnV0ZS5cbiAgICogQHBhcmFtIHtBcnJheX0gZHVwbGljYXRlc1RvQ2hlY2sgLSBBIGxpc3Qgb2YgbWFyayB2YWx1ZXMgdG8gY2hlY2sgZm9yIGR1cGxpY2F0ZSBhZ2FpbnN0IHRoZSBmaXJzdCB3b3JkXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVXBkYXRlZCBpbnB1dCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgX2luc2VydE1hcmtzKHRleHQsIG1hcCwgZHVwbGljYXRlc1RvQ2hlY2spIHtcbiAgICBpZiAodGV4dCA9PT0gJycpIHJldHVybiB0ZXh0O1xuXG4gICAgY29uc3Qgd29yZFJlZ2V4ID0gL1xcdyt8XFxzK3xbXlxcc1xcd10rL2c7XG5cbiAgICBsZXQgbG93ZXJDYXNlV29yZDtcbiAgICBsZXQgY2hlY2tEdXBsaWNhdGUgPSB0cnVlO1xuICAgIGNvbnN0IG1hcmtlZFdvcmRzID0gdGV4dC5tYXRjaCh3b3JkUmVnZXgpLm1hcCh3b3JkID0+IHtcbiAgICAgIGxvd2VyQ2FzZVdvcmQgPSB3b3JkLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmIChtYXAuaGFzKGxvd2VyQ2FzZVdvcmQpKSB7XG4gICAgICAgIGNvbnN0IG1hcmtzID0gbWFwLmdldChsb3dlckNhc2VXb3JkKS5tYXAobWFyayA9PiB7XG4gICAgICAgICAgaWYgKGNoZWNrRHVwbGljYXRlKSB7XG4gICAgICAgICAgICBjaGVja0R1cGxpY2F0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGR1cGxpY2F0ZXNUb0NoZWNrLmluY2x1ZGVzKG1hcmspXG4gICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgOiBgPG1hcmsgbmFtZT0nJHttYXJrfScvPmA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBgPG1hcmsgbmFtZT0nJHttYXJrfScvPmA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGAke21hcmtzLmpvaW4oJycpfSR7d29yZH1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2tEdXBsaWNhdGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHdvcmQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBleGlzdGluZ01hcmtzID0gZHVwbGljYXRlc1RvQ2hlY2subWFwKG1hcmsgPT4ge1xuICAgICAgcmV0dXJuIGA8bWFyayBuYW1lPScke21hcmt9Jy8+YDtcbiAgICB9KTtcblxuICAgIHJldHVybiBgJHtleGlzdGluZ01hcmtzLmpvaW4oJycpfSR7bWFya2VkV29yZHMuam9pbignJyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgYW4gaW5wdXQgb2JqZWN0IGZvciBtYXBwaW5nIGFuIGFycmF5XG4gICAqIG9mIHdvcmRzIHRvIHNwZWNpZmljIG1hcmsga2V5cy4gQ29udmVydHMgdGhlIGlucHV0XG4gICAqIG1hcCBpbnRvIGEgTWFwIHdpdGggYSBtb3JlIGVmZmljaWVudCBmb3JtYXQgZm9yXG4gICAqIHBlcmZvcm1pbmcgbWFyayBpbmplY3Rpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtYXAgLSBJbnB1dCBvYmplY3QgdGhhdCBtYXBzIG1hcmsga2V5c1xuICAgKiB0byBhcnJheXMgb2Ygd29yZHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtNYXB9IC0gTWFwIGZvciBpbnRlcm5hbCB1c2UuXG4gICAqL1xuICBzdGF0aWMgX3Byb2Nlc3NJbnB1dE1hcChtYXApIHtcbiAgICBjb25zdCBpbnRlcm5hbE1hcCA9IG5ldyBNYXAoKTtcblxuICAgIGxldCBsaXN0ID0gW107XG4gICAgT2JqZWN0LmVudHJpZXMobWFwKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgZ2VuZXJhdGUgU1NNTCBtYXJrcyBmcm9tIG1hcCBcIiR7bWFwfVwiIGJlY2F1c2UgdmFsdWUgZm9yIGtleSAnJHtrZXl9JyBpcyBub3QgYW4gYXJyYXkuYFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZS5mb3JFYWNoKHdvcmQgPT4ge1xuICAgICAgICBjb25zdCBsb3dlckNhc2VXb3JkID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsaXN0ID0gaW50ZXJuYWxNYXAuZ2V0KGxvd2VyQ2FzZVdvcmQpO1xuXG4gICAgICAgIGlmIChsaXN0ICE9PSB1bmRlZmluZWQgJiYgIWxpc3QuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIGludGVybmFsTWFwLnNldChsb3dlckNhc2VXb3JkLCBbLi4ubGlzdCwga2V5XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW50ZXJuYWxNYXAuc2V0KGxvd2VyQ2FzZVdvcmQsIFtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW50ZXJuYWxNYXA7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dFRvU3BlZWNoVXRpbHM7XG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBEZWZlcnJlZCBmcm9tICdjb3JlL0RlZmVycmVkJztcclxuXHJcbi8qKlxyXG4gKiBDbGFzcyB0aGF0IGNhbiBwbGF5IGJhY2sgYXVkaW8gZ2VuZXJhdGVkIGJ5IEFXUyBQb2xseSBhbmQgc3luY2hyb25pemVkIGVtaXRcclxuICogc3BlZWNobWFyayBtZXNzYWdlcy5cclxuICpcclxuICogQGFic3RyYWN0XHJcbiAqL1xyXG5jbGFzcyBBYnN0cmFjdFNwZWVjaCB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2NvcmUvVGV4dFRvU3BlZWNoRmVhdHVyZX0gc3BlYWtlciAtIFRoZSBmZWF0dXJlIHRoYXQgb3ducyB0aGUgU3BlZWNoIGFuZFxyXG4gICAqIHdpbGwgZW1pdCBzcGVlY2htYXJrIG1lc3NhZ2VzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbc3BlZWNobWFya3M9W11dIC0gQW4gYXJyYXkgb2Ygc3BlZWNobWFyayBvYmplY3RzIHJlcHJlc2VudGluZ1xyXG4gICAqIHRoZSB0ZXh0IGFuZCB0aW1pbmcgb2YgdGhlIHNwZWVjaC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihzcGVha2VyLCB0ZXh0LCBzcGVlY2htYXJrcyA9IFtdKSB7XHJcbiAgICB0aGlzLl9zcGVha2VyID0gc3BlYWtlcjtcclxuICAgIHRoaXMuX3RleHQgPSB0ZXh0O1xyXG4gICAgdGhpcy5fc3BlZWNobWFya3MgPSBzcGVlY2htYXJrcztcclxuICAgIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgPSAwO1xyXG4gICAgdGhpcy5fcmVzZXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IHRyYWNraW5nIHByb3BlcnRpZXMuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtjdXJyZW50VGltZT0wXSAtIFRpbWUgdG8gdXNlIGZvciBfc3RhcnRUaW1lLlxyXG4gICAqL1xyXG4gIF9yZXNldChjdXJyZW50VGltZSA9IDApIHtcclxuICAgIHRoaXMuX3N0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xyXG4gICAgdGhpcy5fbG9jYWxUaW1lID0gMDtcclxuICAgIHRoaXMuX3BhdXNlVGltZSA9IDA7XHJcbiAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLl9tYXJrSXRlciA9IHRoaXMuX3NwZWVjaG1hcmtzLnZhbHVlcygpO1xyXG4gICAgY29uc3Qge3ZhbHVlLCBkb25lfSA9IHRoaXMuX21hcmtJdGVyLm5leHQoKTtcclxuICAgIHRoaXMuX2N1cnJlbnRNYXJrID0gdmFsdWU7XHJcbiAgICB0aGlzLl9lbmRUaW1lID0gdGhpcy5fc3BlZWNobWFya3MubGVuZ3RoXHJcbiAgICAgID8gdGhpcy5fc3BlZWNobWFya3NbdGhpcy5fc3BlZWNobWFya3MubGVuZ3RoIC0gMV0udGltZVxyXG4gICAgICA6IDA7XHJcbiAgICB0aGlzLl9kb25lID0gZG9uZTtcclxuICAgIHRoaXMuX3Byb21pc2UgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IHByb21pc2UgdGhhdCB3aWxsIHN0b3AgcGxheWJhY2sgYW5kIGVtaXQgbWVzc2FnZXMgZm9yIHRoaXMgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRmluaXNoIC0gRnVuY2l0b24gdG8gZXhlY3V0ZSBvbmNlIHRoZSBzcGVlY2ggc3RvcHMuXHJcbiAgICogQHBhcmFtIHtvbkVycm9yPX0gb25FcnJvciAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaCBlbmNvdW50ZXJzIGFuXHJcbiAgICogZXJyb3IuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uSW50ZXJydXB0IC0gRnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoIGlzIGNhbmNlbGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfY3JlYXRlUHJvbWlzZShvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpIHtcclxuICAgIGNvbnN0IG9uUmVzb2x2ZSA9IHZhbHVlID0+IHtcclxuICAgICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5fc3BlYWtlci5lbWl0KHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnN0b3AsIHRoaXMpO1xyXG4gICAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQoXHJcbiAgICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMuc3RvcCxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uRmluaXNoID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25GaW5pc2godmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9uUmVqZWN0ID0gZSA9PiB7XHJcbiAgICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5zdG9wLCB0aGlzKTtcclxuICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KFxyXG4gICAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnN0b3AsXHJcbiAgICAgICAgdGhpc1xyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGVuY291bnRlcmVkIGFuIHVuZXhwZWN0ZWQgZXJyb3I6ICR7ZX1gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvbkVycm9yKGUpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9uQ2FuY2VsID0gdmFsdWUgPT4ge1xyXG4gICAgICB0aGlzLl9wbGF5aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMuaW50ZXJydXB0LCB0aGlzKTtcclxuICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5lbWl0KFxyXG4gICAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLmludGVycnVwdCxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIG9uSW50ZXJydXB0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgb25JbnRlcnJ1cHQodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgRGVmZXJyZWQodW5kZWZpbmVkLCBvblJlc29sdmUsIG9uUmVqZWN0LCBvbkNhbmNlbCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gd2hldGhlciBvciBub3QgdGhlIHNwZWVjaCBoYXMgcmVhY2hlZCBpdCdzIGVuZC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBfY2hlY2tGaW5pc2hlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kb25lICYmIHRoaXMuX2xvY2FsVGltZSA+PSB0aGlzLl9lbmRUaW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgcGxheWJhY2sgc3RhdGUgb2YgdGhlIGF1ZGlvLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IHBsYXlpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGxheWluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIHRleHQgb2YgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0IHRleHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGV4dDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIHNwZWVjaG1hcmtzIGFycmF5IGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge0FycmF5LjxPYmplY3Q+fVxyXG4gICAqL1xyXG4gIGdldCBzcGVlY2htYXJrcygpIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5fc3BlZWNobWFya3NdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gb2Zmc2V0IHNwZWVjaG1hcmsgZW1pc3Npb24uXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBnZXQgc3BlZWNobWFya09mZnNldCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0IC8gMTAwMDtcclxuICB9XHJcblxyXG4gIHNldCBzcGVlY2htYXJrT2Zmc2V0KG9mZnNldCkge1xyXG4gICAgdGhpcy5fc3BlZWNobWFya09mZnNldCA9IG9mZnNldCAqIDEwMDA7IC8vIFN0b3JlIGFzIG1pbGxpc2Vjb25kc1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdCBzcGVlY2htYXJrIG1lc3NhZ2VzIGFzIHRoZXkgYXJlIGVuY291bnRlcmVkIGluIHN5bmMgd2l0aCBhdWRpby5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50VGltZSAtIEN1cnJlbnQgZ2xvYmFsIHRpbWUgd2hlbiB1cGRhdGUgd2FzIGNhbGxlZC5cclxuICAgKi9cclxuICB1cGRhdGUoY3VycmVudFRpbWUpIHtcclxuICAgIGlmICghdGhpcy5fcGxheWluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIGxvY2FsIGF1ZGlvIHRpbWVcclxuICAgIHRoaXMuX2xvY2FsVGltZSA9IGN1cnJlbnRUaW1lIC0gdGhpcy5fc3RhcnRUaW1lO1xyXG5cclxuICAgIGlmICghdGhpcy5fZG9uZSkge1xyXG4gICAgICAvLyBFbWl0IHNwZWVjaG1hcmsgbWVzc2FnZXMgZm9yIG1hcmtzIHVwIHRvIHRoZSBjdXJyZW50IHRpbWVcclxuICAgICAgd2hpbGUgKFxyXG4gICAgICAgICF0aGlzLl9kb25lICYmXHJcbiAgICAgICAgdGhpcy5fY3VycmVudE1hcmsudGltZSArIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgPD0gdGhpcy5fbG9jYWxUaW1lXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuX3NwZWFrZXIuZW1pdChcclxuICAgICAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTW3RoaXMuX2N1cnJlbnRNYXJrLnR5cGVdLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBzcGVlY2g6IHRoaXMsXHJcbiAgICAgICAgICAgIG1hcms6IHRoaXMuX2N1cnJlbnRNYXJrLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qge3ZhbHVlLCBkb25lfSA9IHRoaXMuX21hcmtJdGVyLm5leHQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY3VycmVudE1hcmsgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLl9kb25lID0gZG9uZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEVuZCBwbGF5YmFja1xyXG4gICAgaWYgKHRoaXMuX2NoZWNrRmluaXNoZWQoKSkge1xyXG4gICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgdGhpcy5fcmVzZXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBsYXkgdGhlIHNwZWVjaCBmcm9tIHRoZSBiZWdpbm5pbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudFRpbWUgLSBDdXJyZW50IGdsb2JhbCB0aW1lIHdoZW4gcGxheSB3YXMgY2FsbGVkLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbkZpbmlzaCAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb25jZSB0aGUgc3BlZWNoXHJcbiAgICogcHJvbWlzZSByZXNvbHZlcy5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25FcnJvciAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaWYgdGhlIHNwZWVjaFxyXG4gICAqIGVuY291bnRlcnMgYW5kIGVycm9yIGR1cmluZyBwbGF5YmFjay5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25JbnRlcnJ1cHQgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2hcclxuICAgKiBpcyBjYW5jZWxlZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgb25jZSB0aGUgc3BlZWNoIHJlYWNoZXMgdGhlIGVuZCBvZiBwbGF5YmFjay5cclxuICAgKi9cclxuICBwbGF5KGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpIHtcclxuICAgIHRoaXMuX3Jlc2V0KGN1cnJlbnRUaW1lKTtcclxuICAgIHRoaXMuX3BsYXlpbmcgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuX3NwZWFrZXIuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5wbGF5LCB0aGlzKTtcclxuICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5wbGF5LCB0aGlzKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlUHJvbWlzZShvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgdGhlIHNwZWVjaCBhdCB0aGUgY3VycmVudCB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRUaW1lIC0gQ3VycmVudCBnbG9iYWwgdGltZSB3aGVuIHBhdXNlIHdhcyBjYWxsZWQuXHJcbiAgICovXHJcbiAgcGF1c2UoY3VycmVudFRpbWUpIHtcclxuICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuX3BhdXNlVGltZSA9IGN1cnJlbnRUaW1lO1xyXG5cclxuICAgIHRoaXMuX3NwZWFrZXIuZW1pdCh0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLkVWRU5UUy5wYXVzZSwgdGhpcyk7XHJcbiAgICB0aGlzLl9zcGVha2VyLmNvbnN0cnVjdG9yLmVtaXQoXHJcbiAgICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuRVZFTlRTLnBhdXNlLFxyXG4gICAgICB0aGlzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzdW1lIHRoZSBzcGVlY2ggYXQgdGhlIGN1cnJlbnQgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50VGltZSAtIEN1cnJlbnQgZ2xvYmFsIHRpbWUgd2hlbiByZXN1bWUgd2FzIGNhbGxlZC5cclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25GaW5pc2ggLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIG9uY2UgdGhlIHNwZWVjaFxyXG4gICAqIHByb21pc2UgcmVzb2x2ZXMuXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uRXJyb3IgLSBPcHRpb25hbCBmdW5jdGlvbiB0byBleGVjdXRlIGlmIHRoZSBzcGVlY2hcclxuICAgKiBlbmNvdW50ZXJzIGFuZCBlcnJvciBkdXJpbmcgcGxheWJhY2suXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbj19IG9uSW50ZXJydXB0IC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpZiB0aGUgc3BlZWNoXHJcbiAgICogaXMgY2FuY2VsZWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7RGVmZXJyZWR9IFJlc29sdmVzIG9uY2UgdGhlIHNwZWVjaCByZWFjaGVzIHRoZSBlbmQgb2YgcGxheWJhY2suXHJcbiAgICovXHJcbiAgcmVzdW1lKGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpIHtcclxuICAgIC8vIFBsYXkgZnJvbSB0aGUgYmVnaW5uaW5nIGlmIHRoZSBzcGVlY2ggaGFzbid0IHBsYXllZCB5ZXRcclxuICAgIGlmICghdGhpcy5fcHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9yZXNldChjdXJyZW50VGltZSk7XHJcbiAgICAgIHRoaXMuX2NyZWF0ZVByb21pc2Uob25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9wbGF5aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuX3N0YXJ0VGltZSArPSBjdXJyZW50VGltZSAtIHRoaXMuX3BhdXNlVGltZTtcclxuXHJcbiAgICB0aGlzLl9zcGVha2VyLmVtaXQodGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucmVzdW1lLCB0aGlzKTtcclxuICAgIHRoaXMuX3NwZWFrZXIuY29uc3RydWN0b3IuZW1pdChcclxuICAgICAgdGhpcy5fc3BlYWtlci5jb25zdHJ1Y3Rvci5FVkVOVFMucmVzdW1lLFxyXG4gICAgICB0aGlzXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VscyBwbGF5YmFjayBvZiB0aGUgc3BlZWNoIGF0IHRoZSBjdXJyZW50IHRpbWUuIENhbmNlbCB0aGUgc3BlZWNoIHByb21pc2UuXHJcbiAgICovXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgaWYgKHRoaXMuX3Byb21pc2UpIHtcclxuICAgICAgdGhpcy5fcHJvbWlzZS5jYW5jZWwoKTtcclxuICAgICAgdGhpcy5fcHJvbWlzZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcCB0aGUgc3BlZWNoIGFuZCByZXNldCB0aW1lIHRvIHRoZSBiZWdpbm5pbmcuIFJlc29sdmUgdGhlIHNwZWVjaCBwcm9taXNlLlxyXG4gICAqL1xyXG4gIHN0b3AoKSB7XHJcbiAgICBpZiAodGhpcy5fcHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9wcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgdGhpcy5fcHJvbWlzZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcGxheWluZyA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQWJzdHJhY3RTcGVlY2g7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IEFic3RyYWN0U3BlZWNoIGZyb20gJy4vQWJzdHJhY3RTcGVlY2gnO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBidWlsdC1pbiBjbGFzcyBmb3IgYXN5bmNocm9ub3VzIFByb21pc2VzLlxyXG4gKiBAZXh0ZXJuYWwgQXVkaW9cclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEF1ZGlvRWxlbWVudC9BdWRpb1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAZXh0ZW5kcyBBYnN0cmFjdFNwZWVjaFxyXG4gKiBAYWxpYXMgY29yZS9TcGVlY2hcclxuICovXHJcbmNsYXNzIFNwZWVjaCBleHRlbmRzIEFic3RyYWN0U3BlZWNoIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7VGV4dFRvU3BlZWNofSBzcGVha2VyIC0gVGhlIG93bmVyIG9mIHRoZSBTcGVlY2ggdGhhdCB3aWxsIGVtaXQgc3BlZWNobWFya1xyXG4gICAqIG1lc3NhZ2VzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBbc3BlZWNobWFya3M9W11dIC0gQW4gYXJyYXkgb2Ygc3BlZWNobWFyayBvYmplY3RzIHJlcHJlc2VudGluZ1xyXG4gICAqIHRoZSB0ZXh0IGFuZCB0aW1pbmcgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gYXVkaW9Db25maWcgLSBPYmplY3QgY29udGFpbmluZyBhdWRpbyBhbmQgdXJsLlxyXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6QXVkaW99IGF1ZGlvQ29uZmlnLmF1ZGlvIC0gUGxheWFibGUgYXVkaW8gb2JqZWN0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHNwZWFrZXIsIHRleHQsIHNwZWVjaG1hcmtzID0gW10sIGF1ZGlvQ29uZmlnKSB7XHJcbiAgICBzdXBlcihzcGVha2VyLCB0ZXh0LCBzcGVlY2htYXJrcyk7XHJcbiAgICB0aGlzLl9hdWRpbyA9IGF1ZGlvQ29uZmlnLmF1ZGlvO1xyXG5cclxuICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGUgYXVkaW8gaGFzIGZpbmlzaGVkIHBsYXlpbmcgdGhyb3VnaFxyXG4gICAgdGhpcy5fYXVkaW8ub25lbmRlZCA9ICgpID0+IHtcclxuICAgICAgdGhpcy5fYXVkaW9GaW5pc2hlZCA9IHRydWU7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5fYXVkaW9GaW5pc2hlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBfY2hlY2tGaW5pc2hlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9hdWRpb0ZpbmlzaGVkICYmIHN1cGVyLl9jaGVja0ZpbmlzaGVkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBwbGF5YWJsZSBhdWRpbyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEB0eXBlIHtleHRlcm5hbDpBdWRpb31cclxuICAgKi9cclxuICBnZXQgYXVkaW8oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW87XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBhdWRpbyB2b2x1bWUgZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCB2b2x1bWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW8udm9sdW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgYXVkaW8gdm9sdW1lIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqL1xyXG4gIHNldCB2b2x1bWUodm9sdW1lKSB7XHJcbiAgICB0aGlzLl9hdWRpby52b2x1bWUgPSB2b2x1bWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGF1ZGlvJ3MgY3VycmVudCBsb2NhbCB0aW1lIGFuZCBwbGF5IGl0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfcGxheUF1ZGlvKCkge1xyXG4gICAgaWYgKHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgPCAwKSB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvLmN1cnJlbnRUaW1lID0gdGhpcy5fc3BlZWNobWFya09mZnNldDtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BsYXlpbmcpIHtcclxuICAgICAgICAgIHRoaXMuX2F1ZGlvLmN1cnJlbnRUaW1lID1cclxuICAgICAgICAgICAgKHRoaXMuX2xvY2FsVGltZSArIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQpIC8gMTAwMDtcclxuICAgICAgICAgIHRoaXMuX2F1ZGlvLnBsYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIC10aGlzLl9zcGVlY2htYXJrT2Zmc2V0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvLmN1cnJlbnRUaW1lID0gMDtcclxuICAgICAgdGhpcy5fYXVkaW8ucGxheSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGF1c2UgdGhlIGF1ZGlvIG9uY2UgaXQgaXMgcGxheWFibGUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF9wYXVzZUF1ZGlvKCkge1xyXG4gICAgdGhpcy5fYXVkaW8ucGxheSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuX3BsYXlpbmcpIHtcclxuICAgICAgICB0aGlzLl9hdWRpby5wYXVzZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHBsYXkoY3VycmVudFRpbWUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCkge1xyXG4gICAgdGhpcy5fYXVkaW9GaW5pc2hlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcGxheUF1ZGlvKCk7XHJcblxyXG4gICAgcmV0dXJuIHN1cGVyLnBsYXkoY3VycmVudFRpbWUsIG9uRmluaXNoLCBvbkVycm9yLCBvbkludGVycnVwdCk7XHJcbiAgfVxyXG5cclxuICBwYXVzZShjdXJyZW50VGltZSkge1xyXG4gICAgdGhpcy5fcGF1c2VBdWRpbygpO1xyXG4gICAgc3VwZXIucGF1c2UoY3VycmVudFRpbWUpO1xyXG4gIH1cclxuXHJcbiAgcmVzdW1lKGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpIHtcclxuICAgIHRoaXMuX2F1ZGlvRmluaXNoZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX2F1ZGlvLnBsYXkoKTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIucmVzdW1lKGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5fcGF1c2VBdWRpbygpO1xyXG4gICAgc3VwZXIuY2FuY2VsKCk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgdGhpcy5fcGF1c2VBdWRpbygpO1xyXG4gICAgdGhpcy5fYXVkaW8uY3VycmVudFRpbWUgPSAwO1xyXG4gICAgc3VwZXIuc3RvcCgpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BlZWNoO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBDb3JlU3BlZWNoIGZyb20gJ2NvcmUvYXdzcGFjay9TcGVlY2gnO1xyXG5cclxuLyoqXHJcbiAqIFRocmVlanMgQXVkaW8gb2JqZWN0XHJcbiAqIEBleHRlcm5hbCBcIlRIUkVFLkF1ZGlvXCJcclxuICogQHNlZSBodHRwczovL3RocmVlanMub3JnL2RvY3MvI2FwaS9lbi9hdWRpby9BdWRpb1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBUaHJlZWpzIFBvc2l0aW9uYWxBdWRpbyBvYmplY3RcclxuICogQGV4dGVybmFsIFwiVEhSRUUuUG9zaXRpb25hbEF1ZGlvXCJcclxuICogQHNlZSBodHRwczovL3RocmVlanMub3JnL2RvY3MvI2FwaS9lbi9hdWRpby9Qb3NpdGlvbmFsQXVkaW9cclxuICovXHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgY29yZS9TcGVlY2hcclxuICogQGFsaWFzIHRocmVlLmpzL1NwZWVjaFxyXG4gKi9cclxuY2xhc3MgU3BlZWNoIGV4dGVuZHMgQ29yZVNwZWVjaCB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3RocmVlLmpzL1RleHRUb1NwZWVjaEZlYXR1cmV9IHNwZWFrZXIgLSBUaGUgb3duZXIgb2YgdGhlIFNwZWVjaCB0aGF0XHJcbiAgICogd2lsbCBlbWl0IHNwZWVjaG1hcmsgbWVzc2FnZXMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IHNwZWVjaG1hcmtzIC0gQW4gYXJyYXkgb2Ygc3BlZWNobWFyayBvYmplY3RzIHJlcHJlc2VudGluZ1xyXG4gICAqIHRoZSB0ZXh0IGFuZCB0aW1pbmcgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gYXVkaW9Db25maWcgLSBPYmplY3QgY29udGFpbmluZyBhdWRpbyBhbmQgdXJsLlxyXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6QXVkaW99IGF1ZGlvQ29uZmlnLmF1ZGlvIC0gUGxheWFibGUgYXVkaW8gb2JqZWN0LlxyXG4gICAqIEBwYXJhbSB7KGV4dGVybmFsOlwiVEhSRUUuQXVkaW9cInxleHRlcm5hbDpcIlRIUkVFLlBvc2l0aW9uYWxBdWRpb1wiKX0gYXVkaW9Db25maWcudGhyZWVBdWRpbyAtXHJcbiAgICogVGhyZWUuanMgYXVkaW8gb2JqZWN0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHRleHRUb1NwZWVjaCwgdGV4dCwgc3BlZWNobWFya3MgPSBbXSwgYXVkaW9Db25maWcpIHtcclxuICAgIHN1cGVyKHRleHRUb1NwZWVjaCwgdGV4dCwgc3BlZWNobWFya3MsIGF1ZGlvQ29uZmlnKTtcclxuICAgIHRoaXMuX3RocmVlQXVkaW8gPSBhdWRpb0NvbmZpZy50aHJlZUF1ZGlvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgVGhyZWUuanMgYXVkaW8gb2JqZWN0IGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUgeyhleHRlcm5hbDpcIlRIUkVFLkF1ZGlvXCJ8ZXh0ZXJuYWw6XCJUSFJFRS5Qb3NpdGlvbmFsQXVkaW9cIil9XHJcbiAgICovXHJcbiAgZ2V0IGF1ZGlvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RocmVlQXVkaW87XHJcbiAgfVxyXG5cclxuICBfcGF1c2VBdWRpbygpIHtcclxuICAgIHRoaXMuX2F1ZGlvLnBhdXNlKCk7XHJcbiAgfVxyXG5cclxuICBwbGF5KGN1cnJlbnRUaW1lLCBvbkZpbmlzaCwgb25FcnJvciwgb25JbnRlcnJ1cHQpIHtcclxuICAgIC8vIFJlLWNvbm5lY3QgdGhlIEF1ZGlvIGVsZW1lbnQgdG8gc3RvcCBwbGF5YmFja1xyXG4gICAgdGhpcy5fdGhyZWVBdWRpby5kaXNjb25uZWN0KCk7XHJcbiAgICB0aGlzLl90aHJlZUF1ZGlvLmNvbm5lY3QoKTtcclxuXHJcbiAgICByZXR1cm4gc3VwZXIucGxheShjdXJyZW50VGltZSwgb25GaW5pc2gsIG9uRXJyb3IsIG9uSW50ZXJydXB0KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNwZWVjaDtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5pbXBvcnQgQWJzdHJhY3RIb3N0RmVhdHVyZSBmcm9tICdjb3JlL0Fic3RyYWN0SG9zdEZlYXR1cmUnO1xyXG5pbXBvcnQgQW5pbWF0aW9uVXRpbHMgZnJvbSAnY29yZS9hbmltcGFjay9BbmltYXRpb25VdGlscyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBTcGVlY2ggZnJvbSAnLi9BYnN0cmFjdFNwZWVjaCc7XHJcbmltcG9ydCBUZXh0VG9TcGVlY2hVdGlscyBmcm9tICcuL1RleHRUb1NwZWVjaFV0aWxzJztcclxuXHJcbi8qKlxyXG4gKiBUaGUgQW1hem9uIFBvbGx5IHNlcnZpY2Ugb2JqZWN0LlxyXG4gKiBAZXh0ZXJuYWwgUG9sbHlcclxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL1BvbGx5Lmh0bWxcclxuICovXHJcblxyXG4vKipcclxuICogVGhlIHByZXNpZ25lciBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSBwcmVzaWduZWQgdXJscyBmb3IgdGhlIFBvbGx5IHNlcnZpY2UuXHJcbiAqIEBleHRlcm5hbCBQcmVzaWduZXJcclxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL1BvbGx5L1ByZXNpZ25lci5odG1sXHJcbiAqL1xyXG5cclxuLy8gQXZhaWxhYmxlIG9wdGlvbnMgZm9yIFBvbGx5XHJcbmNvbnN0IGVuZ2luZXMgPSBbJ3N0YW5kYXJkJywgJ25ldXJhbCddO1xyXG5jb25zdCBhdWRpb0Zvcm1hdHMgPSBbJ21wMycsICdvZ2dfdm9yYmlzJywgJ3BjbSddO1xyXG5jb25zdCBzcGVlY2htYXJrVHlwZXMgPSBbJ3NlbnRlbmNlJywgJ3NzbWwnLCAndmlzZW1lJywgJ3dvcmQnXTtcclxuY29uc3Qgc2FtcGxlUmF0ZXMgPSB7XHJcbiAgbXAzOiB7XHJcbiAgICByYXRlczogWyc4MDAwJywgJzE2MDAwJywgJzIyMDUwJywgJzI0MDAwJ10sXHJcbiAgICBkZWZhdWx0czoge1xyXG4gICAgICBzdGFuZGFyZDogJzIwNTAnLFxyXG4gICAgICBuZXVyYWw6ICcyNDAwJyxcclxuICAgIH0sXHJcbiAgfSxcclxuICBwY206IHtcclxuICAgIHJhdGVzOiBbJzgwMDAnLCAnMTYwMDAnXSxcclxuICAgIGRlZmF1bHRzOiB7XHJcbiAgICAgIHN0YW5kYXJkOiAnMTYwMCcsXHJcbiAgICAgIG5ldXJhbDogJzE2MDAnLFxyXG4gICAgfSxcclxuICB9LFxyXG59O1xyXG5zYW1wbGVSYXRlcy5vZ2dfdm9yYmlzID0gc2FtcGxlUmF0ZXMubXAzO1xyXG5sZXQgYXdzVmVyc2lvbjtcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNsYXNzIGZvciB0dXJuaW5nIHRleHQgaW5wdXQgaW50byBwbGF5YWJsZSBhdWRpby4gVGhlcmUgc2hvdWxkIGJlIG9uZSBpbnN0YW5jZVxyXG4gKiBwZXIgc3BlYWtlciwgZWFjaCBpbnN0YW5jZSBjYW4gcGxheSBvbmx5IG9uZSBwaWVjZSBvZiB0ZXh0IGF0IGEgdGltZS5cclxuICpcclxuICogQGV4dGVuZHMgQWJzdHJhY3RIb3N0RmVhdHVyZVxyXG4gKiBAYWJzdHJhY3RcclxuICpcclxuICogQHByb3BlcnR5IHsobnVtYmVyfHVuZGVmaW5lZCl9IEFXU19WRVJTSU9OIC0gR2V0cyB0aGUgdmVyc2lvbiBvZiBBV1MgU0RLIGJlaW5nXHJcbiAqIHVzZWQuIFdpbGwgYmUgdW5kZWZpbmVkIHVudGlsIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfTUlOX05FVVJBTF9WRVJTSU9OPScyLjUwMyddIC0gR2V0cyB0aGUgbWluaW11bSB2ZXJzaW9uXHJcbiAqIG9mIHRoZSBBV1MgU0RLIHRoYXQgaXMgbmVjZXNzYXJ5IHRvIHVzZSBuZXVyYWwgdm9pY2VzIHdpdGggQVdTIFBvbGx5LlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gUE9MTFlfREVGQVVMVFMgLSBEZWZhdWx0IHZhbHVlcyB0byB1c2Ugd2l0aCBjYWxscyB0byB7QGxpbmsgZXh0ZXJuYWw6UG9sbHl9LlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLkVuZ2luZT0nc3RhbmRhcmQnXVxyXG4gKiBAcHJvcGVydHkge0FycmF5LjxzdHJpbmc+fSBbUE9MTFlfREVGQVVMVFMuTGV4aWNvbk5hbWVzPVtdXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW1BPTExZX0RFRkFVTFRTLk91dHB1dEZvcm1hdD0nbXAzJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5TYW1wbGVSYXRlPScyMjA1MCddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuVGV4dD0nJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5UZXh0VHlwZT0nc3NtbCddXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbUE9MTFlfREVGQVVMVFMuVm9pY2VJZD0nQW15J11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5MYW5ndWFnZUNvZGU9J2VuLUdCJ11cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtQT0xMWV9ERUZBVUxUUy5MYW5ndWFnZU5hbWU9J0JyaXRpc2ggRW5nbGlzaCddXHJcbiAqIEBwcm9wZXJ0eSB7QXJyYXkuPHN0cmluZz59IFtQT0xMWV9WT0lDRVM9W11dIC0gQW4gYXJyYXkgb2Ygdm9pY2VzIGF2YWlsYWJsZSBpblxyXG4gKiBQb2xseS4gV2lsbCBiZSBlbXB0eSB1bnRpbCBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBTZWUgW1BvbGx5IERvY3VtZW50YXRpb25de0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9wb2xseS9sYXRlc3QvZGcvdm9pY2VsaXN0Lmh0bWx9XHJcbiAqIGZvciBhIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgdm9pY2VzLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW1BPTExZX0xBTkdVQUdFUz17fV0gLSBBbiBvYmplY3QgdGhhdCBtYXBzIGxhbmd1YWdlIG5hbWVzXHJcbiAqIHRvIGxhbmd1YWdlIGNvZGVzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbiBQb2xseS4gV2lsbCBiZSBlbXB0eSB1bnRpbFxyXG4gKiBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkLiBTZWUgW1BvbGx5IERvY3VtZW50YXRpb25de0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9wb2xseS9sYXRlc3QvZGcvU3VwcG9ydGVkTGFuZ3VhZ2UuaHRtbH1cclxuICogZm9yIGEgZnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgYW5kIGNvcnJlc3BvbmRpbmcgY29kZXMuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbUE9MTFlfTEFOR1VBR0VfQ09ERVM9e31dIC0gQW4gb2JqZWN0IHRoYXQgbWFwcyBsYW5ndWFnZSBjb2Rlc1xyXG4gKiB0byBsYW5ndWFnZSBuYW1lcyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gUG9sbHkuIFdpbGwgYmUgZW1wdHkgdW50aWxcclxuICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9XHJcbiAqIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4gU2VlIFtQb2xseSBEb2N1bWVudGF0aW9uXXtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcG9sbHkvbGF0ZXN0L2RnL1N1cHBvcnRlZExhbmd1YWdlLmh0bWx9XHJcbiAqIGZvciBhIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIGFuZCBjb3JyZXNwb25kaW5nIGNvZGVzLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gRVZFTlRTIC0gQnVpbHQtaW4gbWVzc2FnZXMgdGhhdCB0aGUgZmVhdHVyZSBlbWl0cy4gV2hlbiB0aGVcclxuICogZmVhdHVyZSBpcyBhZGRlZCB0byBhIHtAbGluayBjb3JlL0hvc3RPYmplY3R9LCBldmVudCBuYW1lcyB3aWxsIGJlIHByZWZpeGVkIGJ5IHRoZVxyXG4gKiBuYW1lIG9mIHRoZSBmZWF0dXJlIGNsYXNzICsgJy4nLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZWFkeT1vblJlYWR5RXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9IGhhcyBiZWVuXHJcbiAqIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMucGxheT1vblBsYXlFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3BsYXlde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwbGF5fS4gVGhlIHNwZWVjaCB0aGF0IHdhcyBwbGF5ZWRcclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5wYXVzZT1vblBhdXNlRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXJcclxuICogZWFjaCBjYWxsIHRvIFtwYXVzZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3BhdXNlfS4gVGhlIHNwZWVjaCB0aGF0IHdhcyBwYXVzZWRcclxuICogaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5yZXN1bWU9b25SZXN1bWVFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZCBhZnRlclxyXG4gKiBlYWNoIGNhbGwgdG8gW3Jlc3VtZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3Jlc3VtZX0uIFRoZSBzcGVlY2ggdGhhdCB3YXNcclxuICogcmVzdW1lZCBpcyBzdXBwbGllZCBhcyBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbRVZFTlRTLmludGVycnVwdD1vbkludGVycnVwdEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGlmIHRoZXJlIGlzIGEgY3VycmVudCBzcGVlY2ggaW4gcHJvZ3Jlc3MgYW5kIFtwbGF5XXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGxheX1cclxuICogb3IgW3Jlc3VtZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3Jlc3VtZX0gYXJlIGV4ZWN1dGVkIGZvciBhIG5ldyBzcGVlY2guXHJcbiAqIFRoZSBzcGVlY2ggdGhhdCB3YXMgaW50ZXJydXB0ZWQgaXMgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy5zdG9wPW9uU3RvcEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkIGFmdGVyXHJcbiAqIGVhY2ggY2FsbCB0byBbc3RvcF17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3N0b3B9IGFuZCB3aGVuIGEgc3BlZWNoIHJlYWNoZXNcclxuICogdGhlIGVuZCBvZiBwbGF5YmFjay4gVGhlIHNwZWVjaCB0aGF0IHdhcyBzdG9wcGVkIGlzIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50XHJcbiAqIHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuc2VudGVuY2U9b25TZW50ZW5jZUV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGVhY2ggdGltZSBhIHNlbnRlbmNlIHNwZWVjaG1hcmsgaXMgZW5jb3VudGVyZWQgd2hvc2UgdGltZXN0YW1wIG1hdGNoZXMgdXAgd2l0aFxyXG4gKiB0aGUgc3BlZWNoIGF1ZGlvJ3MgY3VycmVudCB0aW1lLiBUaGUgc2VudGVuY2Ugc3BlZWNobWFyayBvYmplY3QgaXMgc3VwcGxpZWQgYXNcclxuICogYW4gYXJndW1lbnQgdG8gbGlzdGVuZXIgZnVuY3Rpb25zLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW0VWRU5UUy53b3JkPW9uV29yZEV2ZW50XSAtIE1lc3NhZ2UgdGhhdCBpcyBlbWl0dGVkXHJcbiAqIGVhY2ggdGltZSBhIHdvcmQgc3BlZWNobWFyayBpcyBlbmNvdW50ZXJlZCB3aG9zZSB0aW1lc3RhbXAgbWF0Y2hlcyB1cCB3aXRoXHJcbiAqIHRoZSBzcGVlY2ggYXVkaW8ncyBjdXJyZW50IHRpbWUuIFRoZSB3b3JkIHNwZWVjaG1hcmsgb2JqZWN0IGlzIHN1cHBsaWVkIGFzXHJcbiAqIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMudmlzZW1lPW9uVmlzZW1lRXZlbnRdIC0gTWVzc2FnZSB0aGF0IGlzIGVtaXR0ZWRcclxuICogZWFjaCB0aW1lIGEgdmlzZW1lIHNwZWVjaG1hcmsgaXMgZW5jb3VudGVyZWQgd2hvc2UgdGltZXN0YW1wIG1hdGNoZXMgdXAgd2l0aFxyXG4gKiB0aGUgc3BlZWNoIGF1ZGlvJ3MgY3VycmVudCB0aW1lLiBUaGUgdmlzZW1lIHNwZWVjaG1hcmsgb2JqZWN0IGlzIHN1cHBsaWVkIGFzXHJcbiAqIGFuIGFyZ3VtZW50IHRvIGxpc3RlbmVyIGZ1bmN0aW9ucy5cclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtFVkVOVFMuc3NtbD1vblNzbWxFdmVudF0gLSBNZXNzYWdlIHRoYXQgaXMgZW1pdHRlZFxyXG4gKiBlYWNoIHRpbWUgYSBzc21sIHNwZWVjaG1hcmsgaXMgZW5jb3VudGVyZWQgd2hvc2UgdGltZXN0YW1wIG1hdGNoZXMgdXAgd2l0aFxyXG4gKiB0aGUgc3BlZWNoIGF1ZGlvJ3MgY3VycmVudCB0aW1lLiBUaGUgc3NtbCBzcGVlY2htYXJrIG9iamVjdCBpcyBzdXBwbGllZCBhc1xyXG4gKiBhbiBhcmd1bWVudCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBTRVJWSUNFUyAtIEFXUyBzZXJ2aWNlcyB0aGF0IGFyZSBuZWNlc3NhcnkgZm9yIHRoZSBmZWF0dXJlXHJcbiAqIHRvIGZ1bmN0aW9uLlxyXG4gKiBAcHJvcGVydHkge2V4dGVybmFsOlBvbGx5fSBTRVJWSUNFUy5wb2xseSAtIFRoZSBQb2xseSBzZXJ2aWNlIHRoYXQgaXMgdXNlZFxyXG4gKiB0byBzeW50aGVzaXplIHNwZWVjaG1hcmtzLiBXaWxsIGJlIHVuZGVmaW5lZCB1bnRpbCBbaW5pdGlhbGl6ZVNlcnZpY2Vde0BsaW5rIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZS5pbml0aWFsaXplU2VydmljZX1cclxuICogaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkXHJcbiAqIEBwcm9wZXJ0eSB7ZXh0ZXJuYWw6UHJlc2lnbmVyfSBTRVJWSUNFUy5wcmVzaWduZXIgLSBUaGUgUG9sbHkgUHJlc2lnbmVyXHJcbiAqIG9iamVjdCB0aGF0IGlzIHVzZWQgdG8gc3ludGhlc2l6ZSBzcGVlY2ggYXVkaW8uIFdpbGwgYmUgdW5kZWZpbmVkIHVudGlsXHJcbiAqIFtpbml0aWFsaXplU2VydmljZV17QGxpbmsgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlLmluaXRpYWxpemVTZXJ2aWNlfVxyXG4gKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZXhlY3V0ZWQuXHJcbiAqL1xyXG5jbGFzcyBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUgZXh0ZW5kcyBBYnN0cmFjdEhvc3RGZWF0dXJlIHtcclxuICAvKipcclxuICAgKiBAY29uc3RydWN0b3JcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Y29yZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgbWFuYWdpbmcgdGhlIGZlYXR1cmUuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyB0aGF0IHdpbGwgYmUgc2VudCB0byBQb2xseSBmb3IgZWFjaCBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLnZvaWNlIC0gVGhlIG5hbWUgb2YgdGhlIFBvbGx5IHZvaWNlIHRvIHVzZSBmb3IgYWxsIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMuZW5naW5lIC0gVGhlIG5hbWUgb2YgdGhlIFBvbGx5IGVuZ2luZSB0byB1c2UgZm9yIGFsbCBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLmxhbmd1YWdlIC0gVGhlIG5hbWUgb2YgdGhlIGxhbmd1YWdlIHRvIHVzZSBmb3IgYWxsIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge2F1ZGlvRm9ybWF0fSBbb3B0aW9ucy5hdWRpb0Zvcm1hdD0nbXAzJ10gLSBUaGUgZm9ybWF0IHRvIHVzZSBmb3IgZ2VuZXJhdGVkXHJcbiAgICogYXVkaW8gZm9yIGFsbCBzcGVlY2hlcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZz19IG9wdGlvbnMuc2FtcGxlUmF0ZSAtIFRoZSBzYW1wbGUgcmF0ZSBmb3IgYXVkaW8gZmlsZXMgZm9yIGFsbFxyXG4gICAqIHNwZWVjaGVzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zcGVlY2htYXJrT2Zmc2V0PTBdIC0gQW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0b1xyXG4gICAqIG9mZnNldCBzcGVlY2htYXJrIGV2ZW50IGVtaXNzaW9uIGZyb20gdGhlIGF1ZGlvLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5FbmRNYXJrRHVyYXRpb249LjA1XSAtIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lXHJcbiAgICogaW4gc2Vjb25kcyB0aGF0IHRoZSBsYXN0IHNwZWVjaG1hcmsgb2YgZWFjaCB0eXBlIGluIGEgc3BlZWNoIGNhbiBoYXZlIGl0c1xyXG4gICAqIGR1cmF0aW9uIHByb3BlcnR5IHNldCB0by5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMudm9sdW1lPTFdIC0gVGhlIGRlZmF1bHQgdm9sdW1lIHRvIHBsYXkgc3BlZWNoIGF1ZGlvXHJcbiAgICogd2l0aC5cclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGhvc3QsXHJcbiAgICBvcHRpb25zID0ge1xyXG4gICAgICB2b2ljZTogdW5kZWZpbmVkLFxyXG4gICAgICBlbmdpbmU6IHVuZGVmaW5lZCxcclxuICAgICAgbGFuZ3VhZ2U6IHVuZGVmaW5lZCxcclxuICAgICAgYXVkaW9Gb3JtYXQ6ICdtcDMnLFxyXG4gICAgICBzYW1wbGVSYXRlOiB1bmRlZmluZWQsXHJcbiAgICAgIHNwZWVjaG1hcmtPZmZzZXQ6IDAsXHJcbiAgICAgIG1pbkVuZE1hcmtEdXJhdGlvbjogMC4wNSxcclxuICAgICAgdm9sdW1lOiAxLFxyXG4gICAgfVxyXG4gICkge1xyXG4gICAgc3VwZXIoaG9zdCk7XHJcblxyXG4gICAgdGhpcy5fc3BlZWNoQ2FjaGUgPSB7fTtcclxuICAgIHRoaXMuX2N1cnJlbnRTcGVlY2ggPSBudWxsO1xyXG4gICAgdGhpcy5fY3VycmVudFByb21pc2UgPSBudWxsO1xyXG4gICAgdGhpcy5faXNWYWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuc3BlZWNobWFya09mZnNldCA9IE51bWJlci5pc05hTihOdW1iZXIob3B0aW9ucy5zcGVlY2htYXJrT2Zmc2V0KSlcclxuICAgICAgPyAwXHJcbiAgICAgIDogTnVtYmVyKG9wdGlvbnMuc3BlZWNobWFya09mZnNldCk7XHJcbiAgICB0aGlzLm1pbkVuZE1hcmtEdXJhdGlvbiA9IE51bWJlci5pc05hTihOdW1iZXIob3B0aW9ucy5taW5FbmRNYXJrRHVyYXRpb24pKVxyXG4gICAgICA/IDBcclxuICAgICAgOiBOdW1iZXIob3B0aW9ucy5taW5FbmRNYXJrRHVyYXRpb24pO1xyXG4gICAgdGhpcy52b2x1bWUgPSBOdW1iZXIuaXNOYU4oTnVtYmVyKG9wdGlvbnMudm9sdW1lKSlcclxuICAgICAgPyAxXHJcbiAgICAgIDogTnVtYmVyKG9wdGlvbnMudm9sdW1lKTtcclxuICAgIHRoaXMuX3Byb21pc2VzID0ge1xyXG4gICAgICB2b2x1bWU6IERlZmVycmVkLnJlc29sdmUoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLl92b2x1bWVQYXVzZWQgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBTZXQgZGVmYXVsdCBvcHRpb25zIGZvciBlYWNoIHNwZWVjaFxyXG4gICAgdGhpcy5fdm9pY2UgPSBvcHRpb25zLnZvaWNlIHx8IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuVm9pY2VJZDtcclxuICAgIHRoaXMuX2xhbmd1YWdlID0gb3B0aW9ucy5sYW5ndWFnZSB8fCB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLkxhbmd1YWdlTmFtZTtcclxuICAgIHRoaXMuX2VuZ2luZSA9IGVuZ2luZXMuaW5jbHVkZXMob3B0aW9ucy5lbmdpbmUpXHJcbiAgICAgID8gb3B0aW9ucy5lbmdpbmVcclxuICAgICAgOiB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX0RFRkFVTFRTLkVuZ2luZTtcclxuICAgIHRoaXMuX2F1ZGlvRm9ybWF0ID0gYXVkaW9Gb3JtYXRzLmluY2x1ZGVzKG9wdGlvbnMuYXVkaW9Gb3JtYXQpXHJcbiAgICAgID8gb3B0aW9ucy5hdWRpb0Zvcm1hdFxyXG4gICAgICA6IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuT3V0cHV0Rm9ybWF0O1xyXG4gICAgdGhpcy5fc2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGVzW3RoaXMuX2F1ZGlvRm9ybWF0XS5yYXRlcy5pbmNsdWRlcyhcclxuICAgICAgb3B0aW9ucy5zYW1wbGVSYXRlXHJcbiAgICApXHJcbiAgICAgID8gb3B0aW9ucy5zYW1wbGVSYXRlXHJcbiAgICAgIDogdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5TYW1wbGVSYXRlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgUG9sbHksIFByZXNpZ25lciBhbmQgQVdTIFNESyBWZXJzaW9uIGZvciB1c2UgYWNyb3NzIGFsbCBpbnN0YW5jZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOlBvbGx5fSBwb2xseSAtIFBvbGx5IGluc3RhbmNlIHRvIHVzZSB0byBnZW5lcmF0ZSBzcGVlY2htYXJrcy5cclxuICAgKiBAcGFyYW0ge2V4dGVybmFsOlByZXNpZ25lcn0gcHJlc2lnbmVyIC0gUHJlc2lnbmVyIGluc3RhbmNlIHRvIHVzZSB0byBnZW5lcmF0ZVxyXG4gICAqIGF1ZGlvIFVSTHMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBWZXJzaW9uIG9mIHRoZSBBV1MgU0RLIHRvIHVzZSB0byB2YWxpZGF0ZSB2b2ljZSBvcHRpb25zLlxyXG4gICAqL1xyXG4gIHN0YXRpYyBpbml0aWFsaXplU2VydmljZShwb2xseSwgcHJlc2lnbmVyLCB2ZXJzaW9uKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgYWxsIHdlcmUgZGVmaW5lZFxyXG4gICAgaWYgKFxyXG4gICAgICBwb2xseSA9PT0gdW5kZWZpbmVkXHJcbiAgICAgIHx8IHByZXNpZ25lciA9PT0gdW5kZWZpbmVkXHJcbiAgICAgIHx8IHZlcnNpb24gPT09IHVuZGVmaW5lZFxyXG4gICAgKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnQ2Fubm90IGluaXRpYWxpemUgVGV4dFRvU3BlZWNoIGZlYXR1cmUuIEFsbCBhcmd1bWVudHMgbXVzdCBiZSBkZWZpbmVkLidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgc3VtZXJpYW4gaG9zdHMgdXNlci1hZ2VudFxyXG4gICAgaWYgKHBvbGx5LmNvbmZpZykge1xyXG4gICAgICBwb2xseS5jb25maWcuY3VzdG9tVXNlckFnZW50ID0gdGhpcy5fd2l0aEN1c3RvbVVzZXJBZ2VudChcclxuICAgICAgICBwb2xseS5jb25maWcuY3VzdG9tVXNlckFnZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAocHJlc2lnbmVyLnNlcnZpY2UgJiYgcHJlc2lnbmVyLnNlcnZpY2UuY29uZmlnKSB7XHJcbiAgICAgIHByZXNpZ25lci5zZXJ2aWNlLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnQgPSB0aGlzLl93aXRoQ3VzdG9tVXNlckFnZW50KFxyXG4gICAgICAgIHByZXNpZ25lci5zZXJ2aWNlLmNvbmZpZy5jdXN0b21Vc2VyQWdlbnRcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pc1JlYWR5ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gU3RvcmUgcGFyYW1ldGVyc1xyXG4gICAgdGhpcy5TRVJWSUNFUy5wb2xseSA9IHBvbGx5O1xyXG4gICAgdGhpcy5TRVJWSUNFUy5wcmVzaWduZXIgPSBwcmVzaWduZXI7XHJcbiAgICBhd3NWZXJzaW9uID0gdmVyc2lvbjtcclxuXHJcbiAgICAvLyBDbGVhciB0aGUgY3VycmVudCBwb2xseSBvYmplY3RzXHJcbiAgICBjb25zdCBhdmFpbGFibGVWb2ljZXMgPSB0aGlzLlBPTExZX1ZPSUNFUztcclxuICAgIGF2YWlsYWJsZVZvaWNlcy5sZW5ndGggPSAwO1xyXG5cclxuICAgIGNvbnN0IGF2YWlsYWJsZUxhbmd1YWdlcyA9IHRoaXMuUE9MTFlfTEFOR1VBR0VTO1xyXG4gICAgT2JqZWN0LmtleXMoYXZhaWxhYmxlTGFuZ3VhZ2VzKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICBkZWxldGUgYXZhaWxhYmxlTGFuZ3VhZ2VzW25hbWVdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYXZhaWxhYmxlTGFuZ3VhZ2VDb2RlcyA9IHRoaXMuUE9MTFlfTEFOR1VBR0VfQ09ERVM7XHJcbiAgICBPYmplY3Qua2V5cyhhdmFpbGFibGVMYW5ndWFnZUNvZGVzKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICBkZWxldGUgYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc1tuYW1lXTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFJlLXBvcHVsYXRlIGFjY29yZGluZyB0byB2ZXJzaW9uXHJcbiAgICBjb25zdCBtaW5OZXVyYWxTZGsgPSB0aGlzLlBPTExZX01JTl9ORVVSQUxfVkVSU0lPTjtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5TRVJWSUNFUy5wb2xseVxyXG4gICAgICAuZGVzY3JpYmVWb2ljZXMoKVxyXG4gICAgICAucHJvbWlzZSgpXHJcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICBjb25zdCBhbGxDb2RlcyA9IHt9O1xyXG5cclxuICAgICAgICByZXNwb25zZS5Wb2ljZXMuZm9yRWFjaCh2b2ljZSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHZvaWNlLlN1cHBvcnRlZEVuZ2luZXMuaW5jbHVkZXMoJ3N0YW5kYXJkJylcclxuICAgICAgICAgICAgfHwgdmVyc2lvbiA+PSBtaW5OZXVyYWxTZGtcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBhdmFpbGFibGVWb2ljZXMucHVzaCh2b2ljZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYXZhaWxhYmxlVm9pY2VzLmZvckVhY2godm9pY2UgPT4ge1xyXG4gICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZXNbdm9pY2UuTGFuZ3VhZ2VOYW1lXSA9IHZvaWNlLkxhbmd1YWdlQ29kZTtcclxuICAgICAgICAgICAgYWxsQ29kZXNbdm9pY2UuTGFuZ3VhZ2VDb2RlXSA9IHZvaWNlLkxhbmd1YWdlTmFtZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBPYmplY3QuZW50cmllcyhhdmFpbGFibGVMYW5ndWFnZXMpLmZvckVhY2goKFtuYW1lLCBjb2RlXSkgPT4ge1xyXG4gICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VDb2Rlc1tjb2RlXSA9IG5hbWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIE5vdGlmeSB0aGF0IHdlJ3JlIHJlYWR5IHRvIGdlbmVyYXRlIHNwZWVjaGVzXHJcbiAgICAgICAgdGhpcy5faXNSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuRVZFTlRTLnJlYWR5KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGNsYXNzIGlzIGNhcGFibGUgb2YgZ2VuZXJhdGluZyBzcGVlY2ggYXVkaW8uIFBvbGx5LFxyXG4gICAqIFByZXNpZ25lciBhbmQgQVdTIFNESyB2ZXJzaW9uIG51bWJlciBtdXN0IGhhdmUgYmVlbiBkZWZpbmVkIHVzaW5nXHJcbiAgICogW2luaXRpYWxpemVTZXJ2aWNlXXtAbGluayBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUuaW5pdGlhbGl6ZVNlcnZpY2V9LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgc3RhdGljIGdldCBpc1JlYWR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzUmVhZHk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB0ZXh0IG9mIHRoZSBjdXJyZW50bHkgcGxheWluZyBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmVhZG9ubHlcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldCBjdXJyZW50U3BlZWNoKCkge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2gpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTcGVlY2gudGV4dDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gb2Zmc2V0IHNwZWVjaG1hcmsgZW1pc3Npb24uXHJcbiAgICpcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldCBzcGVlY2htYXJrT2Zmc2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgc3BlZWNobWFya09mZnNldChvZmZzZXQpIHtcclxuICAgIHRoaXMuX3NwZWVjaG1hcmtPZmZzZXQgPSBvZmZzZXQ7XHJcblxyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2gpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5zcGVlY2htYXJrT2Zmc2V0ID0gb2Zmc2V0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0aGF0IHRoZSBsYXN0XHJcbiAgICogc3BlZWNobWFyayBvZiBlYWNoIHR5cGUgaW4gYSBzcGVlY2ggY2FuIGhhdmUgaXRzIGR1cmF0aW9uIHByb3BlcnR5IHNldCB0by5cclxuICAgKlxyXG4gICAqIEB0eXBlIG51bWJlclxyXG4gICAqL1xyXG4gIGdldCBtaW5FbmRNYXJrRHVyYXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uIC8gMTAwMDtcclxuICB9XHJcblxyXG4gIHNldCBtaW5FbmRNYXJrRHVyYXRpb24oZHVyYXRpb24pIHtcclxuICAgIHRoaXMuX21pbkVuZE1hcmtEdXJhdGlvbiA9IGR1cmF0aW9uICogMTAwMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGVuZHMgdGhlIFN1bWVyaWFuIEhvc3RzIGN1c3RvbSB1c2VyLWFnZW50IHRvIGEgc3RyaW5nIGlmIGl0IGlzIG5vdFxyXG4gICAqIGFscmVhZHkgcHJlc2VudC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VycmVudFVzZXJBZ2VudCAtIFN0cmluZyB0byBhcHBlbmQgdG8gaWYgbmVlZGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBzdGF0aWMgX3dpdGhDdXN0b21Vc2VyQWdlbnQoY3VycmVudFVzZXJBZ2VudCkge1xyXG4gICAgY29uc3Qgc3VtZXJpYW5Ib3N0c1VzZXJBZ2VudCA9ICdyZXF1ZXN0LXNvdXJjZS9TdW1lcmlhbkhvc3RzJztcclxuXHJcbiAgICBpZiAoY3VycmVudFVzZXJBZ2VudCA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBzdW1lcmlhbkhvc3RzVXNlckFnZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyZW50VXNlckFnZW50LmluZGV4T2Yoc3VtZXJpYW5Ib3N0c1VzZXJBZ2VudCkgIT09IC0xKSB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50VXNlckFnZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdXJyZW50VXNlckFnZW50LmNvbmNhdCgnICcsIHN1bWVyaWFuSG9zdHNVc2VyQWdlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gZW5naW5lIHR5cGUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBBV1MgU0RLIHZlcnNpb24uIElmIGl0XHJcbiAgICogaXMsIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUuIE90aGVyd2lzZSByZXR1cm4gYSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmdpbmUgLSBUaGUgdHlwZSBvZiBQb2xseSB2b2ljZSBlbmdpbmUgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUVuZ2luZShlbmdpbmUpIHtcclxuICAgIC8vIERlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIGVuZ2luZSBpZiBuZXVyYWwgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB2ZXJzaW9uXHJcbiAgICBpZiAoXHJcbiAgICAgIGVuZ2luZSA9PT0gdW5kZWZpbmVkXHJcbiAgICAgIHx8IHRoaXMuY29uc3RydWN0b3IuQVdTX1ZFUlNJT04gPCB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX01JTl9ORVVSQUxfVkVSU0lPTlxyXG4gICAgKSB7XHJcbiAgICAgIGVuZ2luZSA9IHRoaXMuY29uc3RydWN0b3IuUE9MTFlfREVGQVVMVFMuRW5naW5lO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlbmdpbmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBhdWRpbyBmb3JtYXQgdHlwZSBpcyBjb21wYXRpYmxlIHdpdGggUG9sbHkuIElmIGl0IGlzLCByZXR1cm5cclxuICAgKiB0aGUgb3JpZ2luYWwgdmFsdWUuIE90aGVyd2lzZSByZXR1cm4gYSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmdpbmUgLSBUaGUgdHlwZSBvZiBQb2xseSB2b2ljZSBlbmdpbmUgdG8gdmFsaWRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZUZvcm1hdChmb3JtYXQpIHtcclxuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCB8fCAhYXVkaW9Gb3JtYXRzLmluY2x1ZGVzKGZvcm1hdCkpIHtcclxuICAgICAgZm9ybWF0ID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5PdXRwdXRGb3JtYXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcm1hdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIGF1ZGlvIHNhbXBsaW5nIHJhdGUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IGF1ZGlvXHJcbiAgICogZm9ybWF0LiBJZiBpdCBpcywgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZS4gT3RoZXJ3aXNlIHJldHVybiBhIGRlZmF1bHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuZ2luZSAtIFRoZSB0eXBlIG9mIFBvbGx5IHZvaWNlIGVuZ2luZSB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlUmF0ZShyYXRlKSB7XHJcbiAgICAvLyBVc2UgZGVmYXVsdCBpZiBzcGVjaWZpZWQgc2FtcGxlIHJhdGUgaXMgbm90IHZhbGlkIGZvciB0aGUgYXVkaW8gZm9ybWF0XHJcbiAgICBpZiAoXHJcbiAgICAgIHJhdGUgPT09IHVuZGVmaW5lZFxyXG4gICAgICB8fCAhc2FtcGxlUmF0ZXNbdGhpcy5fYXVkaW9Gb3JtYXRdLnJhdGVzLmluY2x1ZGVzKHJhdGUpXHJcbiAgICApIHtcclxuICAgICAgcmF0ZSA9IHNhbXBsZVJhdGVzW3RoaXMuX2F1ZGlvRm9ybWF0XS5kZWZhdWx0c1t0aGlzLl9lbmdpbmVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByYXRlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gUG9sbHkgdm9pY2UgaWQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IFBvbGx5IGVuZ2luZS5cclxuICAgKiBJZiBpdCBpcywgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZS4gT3RoZXJ3aXNlIHJldHVybiBhIGRlZmF1bHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuZ2luZSAtIFRoZSB0eXBlIG9mIFBvbGx5IHZvaWNlIGVuZ2luZSB0byB2YWxpZGF0ZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgX3ZhbGlkYXRlVm9pY2Uodm9pY2VJZCkge1xyXG4gICAgY29uc3Qgdm9pY2UgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX1ZPSUNFUy5maW5kKHYgPT4gdi5JZCA9PT0gdm9pY2VJZCk7XHJcblxyXG4gICAgLy8gVXNlIHRoZSBkZWZhdWx0IHZvaWNlIGlmIHRoZSB2b2ljZSBpc24ndCBzdXBwb3J0ZWQgYnkgdGhlIGVuZ2luZVxyXG4gICAgaWYgKHZvaWNlID09PSB1bmRlZmluZWQgfHwgIXZvaWNlLlN1cHBvcnRlZEVuZ2luZXMuaW5jbHVkZXModGhpcy5fZW5naW5lKSkge1xyXG4gICAgICB2b2ljZUlkID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9ERUZBVUxUUy5Wb2ljZUlkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2b2ljZUlkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gUG9sbHkgbGFuZ3VhZ2UgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IFBvbGx5IHZvaWNlLlxyXG4gICAqIElmIGl0IGlzLCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlLiBPdGhlcndpc2UgcmV0dXJuIGEgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5naW5lIC0gVGhlIHR5cGUgb2YgUG9sbHkgdm9pY2UgZW5naW5lIHRvIHZhbGlkYXRlLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBfdmFsaWRhdGVMYW5ndWFnZShsYW5ndWFnZSkge1xyXG4gICAgY29uc3Qgdm9pY2UgPSB0aGlzLmNvbnN0cnVjdG9yLlBPTExZX1ZPSUNFUy5maW5kKHYgPT4gdi5JZCA9PT0gdGhpcy5fdm9pY2UpO1xyXG4gICAgY29uc3QgbGFuZ3VhZ2VDb2RlID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9MQU5HVUFHRVNbbGFuZ3VhZ2VdO1xyXG5cclxuICAgIC8vIEZpbmQgdGhlIGxhbmd1YWdlcyBhdmFpbGFibGUgZm9yIHRoZSBjdXJyZW50IHZvaWNlXHJcbiAgICBjb25zdCBhdmFpbGFibGVDb2RlcyA9IFt2b2ljZS5MYW5ndWFnZUNvZGVdO1xyXG4gICAgaWYgKHZvaWNlLkFkZGl0aW9uYWxMYW5ndWFnZUNvZGVzKSB7XHJcbiAgICAgIGF2YWlsYWJsZUNvZGVzLnB1c2goLi4udm9pY2UuQWRkaXRpb25hbExhbmd1YWdlQ29kZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHRoZSBjdXJyZW50IHZvaWNlIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgbGFuZ3VhZ2UsIHVzZSBpdHMgZGVmYXVsdFxyXG4gICAgaWYgKCFhdmFpbGFibGVDb2Rlcy5pbmNsdWRlcyhsYW5ndWFnZUNvZGUpKSB7XHJcbiAgICAgIGxhbmd1YWdlID0gdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9MQU5HVUFHRV9DT0RFU1t2b2ljZS5MYW5ndWFnZUNvZGVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYW5ndWFnZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlIHRoZSBjdXJyZW50IFBvbGx5IG9wdGlvbnMgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGNvbXBhdGlibGUgd2l0aCBlYWNoXHJcbiAgICogb3RoZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIF92YWxpZGF0ZSgpIHtcclxuICAgIC8vIFZhbGlkYXRlIHNwZWVjaCBwYXJhbWV0ZXJzXHJcbiAgICB0aGlzLl9lbmdpbmUgPSB0aGlzLl92YWxpZGF0ZUVuZ2luZSh0aGlzLl9lbmdpbmUpO1xyXG4gICAgdGhpcy5fYXVkaW9Gb3JtYXQgPSB0aGlzLl92YWxpZGF0ZUZvcm1hdCh0aGlzLl9hdWRpb0Zvcm1hdCk7XHJcbiAgICB0aGlzLl9zYW1wbGVSYXRlID0gdGhpcy5fdmFsaWRhdGVSYXRlKHRoaXMuX3NhbXBsZVJhdGUpO1xyXG4gICAgdGhpcy5fdm9pY2UgPSB0aGlzLl92YWxpZGF0ZVZvaWNlKHRoaXMuX3ZvaWNlKTtcclxuICAgIHRoaXMuX2xhbmd1YWdlID0gdGhpcy5fdmFsaWRhdGVMYW5ndWFnZSh0aGlzLl9sYW5ndWFnZSk7XHJcbiAgICB0aGlzLl9pc1ZhbGlkYXRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgcGFyYW1ldGVycyBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG4gICAqL1xyXG4gIF9nZXRDb25maWcoKSB7XHJcbiAgICAvLyBNYWtlIHN1cmUgcGFyYW1ldGVycyBoYXZlIGJlZW4gdmFsaWRhdGVkXHJcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5pc1JlYWR5ICYmICF0aGlzLl9pc1ZhbGlkYXRlZCkge1xyXG4gICAgICB0aGlzLl92YWxpZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBhIGNvbmZpZyBvYmplY3QgY29tcGF0aWJsZSB3aXRoIFBvbGx5XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBFbmdpbmU6IHRoaXMuX2VuZ2luZSxcclxuICAgICAgT3V0cHV0Rm9ybWF0OiB0aGlzLl9hdWRpb0Zvcm1hdCxcclxuICAgICAgU2FtcGxlUmF0ZTogdGhpcy5fc2FtcGxlUmF0ZSxcclxuICAgICAgVm9pY2VJZDogdGhpcy5fdm9pY2UsXHJcbiAgICAgIExhbmd1YWdlQ29kZTogdGhpcy5jb25zdHJ1Y3Rvci5QT0xMWV9MQU5HVUFHRVNbdGhpcy5fbGFuZ3VhZ2VdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBQb2xseSBwYXJhbWV0ZXJzIHdpdGggb3B0aW9ucyBmcm9tIGEgZ2l2ZW4gY29uZmlnLiBBbGwgc3RvcmVkIHNwZWVjaGVzXHJcbiAgICogd2lsbCBiZSB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IHBhcmFtZXRlcnMsIHVubGVzcyB0aGUgc3BlZWNoIHRleHQgaXMgY29udGFpbmVkXHJcbiAgICogaW4gdGhlICdza2lwU3BlZWNoZXMnIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gUG9sbHkgcGFyYW1ldGVyIG9wdGlvbnMgdG8gb3ZlcndyaXRlLlxyXG4gICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHNraXBTcGVlY2hlcyAtIFRleHQgb2YgYW55IHNwZWVjaGVzIHRoYXQgc2hvdWxkIG5vdFxyXG4gICAqIGhhdmUgcGFyYW1ldGVycyB1cGRhdGVkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09iamVjdH1cclxuICAgKi9cclxuICBfdXBkYXRlQ29uZmlnKGNvbmZpZywgc2tpcFNwZWVjaGVzID0gW10pIHtcclxuICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSB0aGlzLl9nZXRDb25maWcoKTtcclxuICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50Q29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2lzVmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnU3RyID0gSlNPTi5zdHJpbmdpZnkoY3VycmVudENvbmZpZyk7XHJcblxyXG4gICAgLy8gVXBkYXRlIG9wdGlvbnNcclxuICAgIGlmIChjb25maWcuRW5naW5lKSB7XHJcbiAgICAgIHRoaXMuX2VuZ2luZSA9IGNvbmZpZy5FbmdpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5hdWRpb0Zvcm1hdCkge1xyXG4gICAgICB0aGlzLl9hdWRpb0Zvcm1hdCA9IGNvbmZpZy5hdWRpb0Zvcm1hdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLlNhbXBsZVJhdGUpIHtcclxuICAgICAgdGhpcy5fc2FtcGxlUmF0ZSA9IGNvbmZpZy5TYW1wbGVSYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcuVm9pY2VJZCkge1xyXG4gICAgICB0aGlzLl92b2ljZSA9IGNvbmZpZy5Wb2ljZUlkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcuTGFuZ3VhZ2UpIHtcclxuICAgICAgdGhpcy5fbGFuZ3VhZ2UgPSBjb25maWcuTGFuZ3VhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgdGhlIGNvbmZpZ1xyXG4gICAgY29uc3QgdmFsaWRDb25maWcgPSB0aGlzLl9nZXRDb25maWcoKTtcclxuXHJcbiAgICAvLyBFeGl0IGlmIG5vdGhpbmcgaGFzIGNoYW5nZWRcclxuICAgIGNvbnN0IGNvbmZpZ1N0ciA9IEpTT04uc3RyaW5naWZ5KHZhbGlkQ29uZmlnKTtcclxuICAgIGlmIChjdXJyZW50Q29uZmlnU3RyID09PSBjb25maWdTdHIpIHtcclxuICAgICAgdGhpcy5faXNWYWxpZGF0ZWQgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gdmFsaWRDb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIGFsbCBjYWNoZWQgY29uZmlnc1xyXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5fc3BlZWNoQ2FjaGUpLmZvckVhY2goKFt0ZXh0LCBzcGVlY2hdKSA9PiB7XHJcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBza2lwcGVkIHNwZWVjaFxyXG4gICAgICBpZiAoc2tpcFNwZWVjaGVzLmluY2x1ZGVzKHRleHQpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBzcGVlY2hDb25maWdTdHIgPSBKU09OLnN0cmluZ2lmeShzcGVlY2guY29uZmlnKTtcclxuXHJcbiAgICAgIC8vIFVwZGF0ZSB0aGUgc3BlZWNoIHdpdGggbmV3IHBhcmFtZXRlcnNcclxuICAgICAgaWYgKHNwZWVjaENvbmZpZ1N0ciAhPT0gY29uZmlnU3RyKSB7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlU3BlZWNoKHRleHQsIHZhbGlkQ29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkQ29uZmlnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGFuIGV4aXN0aW5nIHNwZWVjaCwgb3IgYWRkIGEgbmV3IHNwZWVjaCB3aXRoIG5ldyBQb2xseSBwYXJhbWV0ZXJzIHdpdGhcclxuICAgKiBvcHRpb25zIGZyb20gYSBnaXZlbiBjb25maWcuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBvZiB0aGUgc3BlZWNoIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gUG9sbHkgcGFyYW1ldGVyIG9wdGlvbnMgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSAtIFdoZXRoZXIgdG8gZm9yY2UgdGhlIHNwZWVjaCB0byBiZSB1cGRhdGVkXHJcbiAgICogaWYgbm8gcGFyYW1ldGVycyBoYXZlIGNoYW5nZXMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QWJzdHJhY3RTcGVlY2h9XHJcbiAgICovXHJcbiAgX3VwZGF0ZVNwZWVjaCh0ZXh0LCBjb25maWcsIGZvcmNlID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHNwZWVjaCA9IHRoaXMuX3NwZWVjaENhY2hlW3RleHRdIHx8IHt9O1xyXG4gICAgLy8gRXhpdCBpZiBub3RoaW5nIGhhcyBjaGFuZ2VkIGFuZCBmb3JjZSBpcyBmYWxzZVxyXG4gICAgaWYgKFxyXG4gICAgICAhZm9yY2VcclxuICAgICAgJiYgY29uZmlnICE9PSB1bmRlZmluZWRcclxuICAgICAgJiYgc3BlZWNoLmNvbmZpZ1xyXG4gICAgICAmJiBKU09OLnN0cmluZ2lmeShjb25maWcpID09PSBKU09OLnN0cmluZ2lmeShzcGVlY2guY29uZmlnKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBzcGVlY2g7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIHNlcGFyYXRlIHBhcmFtZXRlcnMgZm9yIGF1ZGlvIGFuZCBzcGVlY2htYXJrIGdlbmVyYXRpb25cclxuICAgIGNvbnN0IGF1ZGlvUGFyYW1zID0ge1xyXG4gICAgICAuLi5jb25maWcsXHJcbiAgICAgIFRleHQ6IHRleHQsXHJcbiAgICAgIFRleHRUeXBlOiAnc3NtbCcsXHJcbiAgICB9O1xyXG4gICAgY29uc3Qgc3BlZWNobWFya1BhcmFtcyA9IHtcclxuICAgICAgLi4uYXVkaW9QYXJhbXMsXHJcbiAgICAgIE91dHB1dEZvcm1hdDogJ2pzb24nLFxyXG4gICAgICBTcGVlY2hNYXJrVHlwZXM6IHNwZWVjaG1hcmtUeXBlcyxcclxuICAgIH07XHJcblxyXG4gICAgLy8gR2VuZXJhdGUgYXVkaW8gYW5kIHNwZWVjaG1hcmtzXHJcbiAgICBzcGVlY2guY29uZmlnID0gY29uZmlnO1xyXG4gICAgc3BlZWNoLnByb21pc2UgPSBQcm9taXNlLmFsbChbXHJcbiAgICAgIHRoaXMuX3N5bnRoZXNpemVTcGVlY2htYXJrcyhzcGVlY2htYXJrUGFyYW1zKSxcclxuICAgICAgdGhpcy5fc3ludGhlc2l6ZUF1ZGlvKGF1ZGlvUGFyYW1zKSxcclxuICAgIF0pLnRoZW4ocmVzdWx0cyA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVTcGVlY2godGV4dCwgLi4ucmVzdWx0cyk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3NwZWVjaENhY2hlW3RleHRdID0gc3BlZWNoO1xyXG5cclxuICAgIHJldHVybiBzcGVlY2g7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgU3BlZWNoIG9iamVjdCBmb3IgdGhlIHNwZWFrZXIuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtUZXh0VG9TcGVlY2h9IHNwZWFrZXIgLSBUaGUgVGV4dFRvU3BlZWNoIGluc3RhbmNlIHRoYXQgd2lsbCBvd24gdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRleHQgb2YgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3BlZWNobWFya3MgLSBTcGVlY2htYXJrcyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gYXVkaW9Db25maWcgLSBBdWRpbyBmb3IgdGhlIHNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtBYnN0cmFjdFNwZWVjaH1cclxuICAgKi9cclxuICBfY3JlYXRlU3BlZWNoKHRleHQsIHNwZWVjaG1hcmtzLCBhdWRpb0NvbmZpZykge1xyXG4gICAgcmV0dXJuIG5ldyBTcGVlY2godGhpcywgdGV4dCwgc3BlZWNobWFya3MsIGF1ZGlvQ29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBwcmVzaWduZWQgVVJMIG9mIHNwZWVjaCBhdWRpbyBmb3IgdGhlIGdpdmVuIHNwZWVjaCB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYXVkaW8gVVJMLlxyXG4gICAqL1xyXG4gIF9zeW50aGVzaXplQXVkaW8ocGFyYW1zKSB7XHJcbiAgICByZXR1cm4gbmV3IERlZmVycmVkKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5TRVJWSUNFUy5wcmVzaWduZXIuZ2V0U3ludGhlc2l6ZVNwZWVjaFVybChcclxuICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgZnVuY3Rpb24gKGVycm9yLCB1cmwpIHtcclxuICAgICAgICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7IHVybCB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYW5kIHBhcnNlcyBzcGVlY2htYXJrcyBmb3IgdGhlIGdpdmVuIHNwZWVjaCB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBzcGVlY2htYXJrIG9iamVjdHNcclxuICAgKi9cclxuICBfc3ludGhlc2l6ZVNwZWVjaG1hcmtzKHBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuU0VSVklDRVMucG9sbHlcclxuICAgICAgLnN5bnRoZXNpemVTcGVlY2gocGFyYW1zKVxyXG4gICAgICAucHJvbWlzZSgpXHJcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgLy8gQ29udmVydCBjaGFyY29kZXMgdG8gc3RyaW5nXHJcbiAgICAgICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdC5BdWRpb1N0cmVhbSk7XHJcbiAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XHJcbiAgICAgICAgY29uc3QgZGF0YVN0ciA9IGpzb24uZGF0YS5tYXAoYyA9PiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKS5qb2luKCcnKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWFya1R5cGVzID0ge1xyXG4gICAgICAgICAgc2VudGVuY2U6IFtdLFxyXG4gICAgICAgICAgd29yZDogW10sXHJcbiAgICAgICAgICB2aXNlbWU6IFtdLFxyXG4gICAgICAgICAgc3NtbDogW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBlbmRNYXJrVHlwZXMgPSB7XHJcbiAgICAgICAgICBzZW50ZW5jZTogbnVsbCxcclxuICAgICAgICAgIHdvcmQ6IG51bGwsXHJcbiAgICAgICAgICB2aXNlbWU6IG51bGwsXHJcbiAgICAgICAgICBzc21sOiBudWxsLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFNwbGl0IGJ5IGVuY2xvc2luZyB7fSB0byBjcmVhdGUgc3BlZWNobWFyayBvYmplY3RzXHJcbiAgICAgICAgY29uc3Qgc3BlZWNoTWFya3MgPSBbLi4uZGF0YVN0ci5tYXRjaEFsbCgvXFx7Lio/XFx9KD89XFxufCQpL2dtKV0ubWFwKFxyXG4gICAgICAgICAgbWF0Y2ggPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtYXJrID0gSlNPTi5wYXJzZShtYXRjaFswXSk7XHJcblxyXG4gICAgICAgICAgICAvLyBTZXQgdGhlIGR1cmF0aW9uIG9mIHRoZSBsYXN0IHNwZWVjaG1hcmsgc3RvcmVkIG1hdGNoaW5nIHRoaXMgb25lJ3MgdHlwZVxyXG4gICAgICAgICAgICBjb25zdCBudW1NYXJrcyA9IG1hcmtUeXBlc1ttYXJrLnR5cGVdLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKG51bU1hcmtzID4gMCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxhc3RNYXJrID0gbWFya1R5cGVzW21hcmsudHlwZV1bbnVtTWFya3MgLSAxXTtcclxuICAgICAgICAgICAgICBsYXN0TWFyay5kdXJhdGlvbiA9IG1hcmsudGltZSAtIGxhc3RNYXJrLnRpbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG1hcmtUeXBlc1ttYXJrLnR5cGVdLnB1c2gobWFyayk7XHJcbiAgICAgICAgICAgIGVuZE1hcmtUeXBlc1ttYXJrLnR5cGVdID0gbWFyaztcclxuICAgICAgICAgICAgcmV0dXJuIG1hcms7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gRmluZCB0aGUgdGltZSBvZiB0aGUgbGF0ZXN0IHNwZWVjaG1hcmtcclxuICAgICAgICBjb25zdCBlbmRUaW1lcyA9IFtdO1xyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc2VudGVuY2UpIHtcclxuICAgICAgICAgIGVuZFRpbWVzLnB1c2goZW5kTWFya1R5cGVzLnNlbnRlbmNlLnRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLndvcmQpIHtcclxuICAgICAgICAgIGVuZFRpbWVzLnB1c2goZW5kTWFya1R5cGVzLndvcmQudGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMudmlzZW1lKSB7XHJcbiAgICAgICAgICBlbmRUaW1lcy5wdXNoKGVuZE1hcmtUeXBlcy52aXNlbWUudGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc3NtbCkge1xyXG4gICAgICAgICAgZW5kVGltZXMucHVzaChlbmRNYXJrVHlwZXMuc3NtbC50aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IE1hdGgubWF4KC4uLmVuZFRpbWVzKTtcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGR1cmF0aW9uIGZvciB0aGUgZW5kaW5nIHNwZWVjaE1hcmtzIG9mIGVhY2ggdHlwZVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc2VudGVuY2UpIHtcclxuICAgICAgICAgIGVuZE1hcmtUeXBlcy5zZW50ZW5jZS5kdXJhdGlvbiA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24sXHJcbiAgICAgICAgICAgIGVuZFRpbWUgLSBlbmRNYXJrVHlwZXMuc2VudGVuY2UudGltZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuZE1hcmtUeXBlcy53b3JkKSB7XHJcbiAgICAgICAgICBlbmRNYXJrVHlwZXMud29yZC5kdXJhdGlvbiA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24sXHJcbiAgICAgICAgICAgIGVuZFRpbWUgLSBlbmRNYXJrVHlwZXMud29yZC50aW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5kTWFya1R5cGVzLnZpc2VtZSkge1xyXG4gICAgICAgICAgZW5kTWFya1R5cGVzLnZpc2VtZS5kdXJhdGlvbiA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgICB0aGlzLl9taW5FbmRNYXJrRHVyYXRpb24sXHJcbiAgICAgICAgICAgIGVuZFRpbWUgLSBlbmRNYXJrVHlwZXMudmlzZW1lLnRpbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmRNYXJrVHlwZXMuc3NtbCkge1xyXG4gICAgICAgICAgZW5kTWFya1R5cGVzLnNzbWwuZHVyYXRpb24gPSBNYXRoLm1heChcclxuICAgICAgICAgICAgdGhpcy5fbWluRW5kTWFya0R1cmF0aW9uLFxyXG4gICAgICAgICAgICBlbmRUaW1lIC0gZW5kTWFya1R5cGVzLnNzbWwudGltZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzcGVlY2hNYXJrcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgU3BlZWNoIG9iamVjdCB0aGF0IGhhcyB0aGUgZ2l2ZW4gdGV4dC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIFNwZWVjaC5cclxuICAgKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyAtIE9wdGlvbnMgdG8gdXBkYXRlIHRoZSBTcGVlY2ggd2l0aC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtEZWZlcnJlZH0gUmVzb2x2ZXMgd2l0aCBTcGVlY2ggb3IgbnVsbDtcclxuICAgKi9cclxuICBfZ2V0U3BlZWNoKHRleHQsIGNvbmZpZykge1xyXG4gICAgLy8gTWFrZSBzdXJlIEFXUyBzZXJ2aWNlcyBleGlzdFxyXG4gICAgaWYgKCF0aGlzLmNvbnN0cnVjdG9yLmlzUmVhZHkpIHtcclxuICAgICAgY29uc3QgZSA9ICdBV1Mgc2VydmljZXMgaGF2ZSBub3QgYmVlbiBpbml0aWFsaXplZC4nO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1ha2Ugc3VyZSBpdHMgcG9zc2libGUgdG8gZ2VuZXJhdGUgc3BlZWNoZXNcclxuICAgIGlmICghdGV4dCkge1xyXG4gICAgICBjb25zdCBlID0gJ0Nhbm5vdCBwbGF5IGEgc3BlZWNoIHdpdGggbm8gdGV4dC4nO1xyXG4gICAgICByZXR1cm4gRGVmZXJyZWQucmVqZWN0KGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgc3BlZWNoIHdpdGggb3B0aW9uc1xyXG4gICAgdGV4dCA9IFRleHRUb1NwZWVjaFV0aWxzLnZhbGlkYXRlVGV4dCh0ZXh0KTtcclxuICAgIGNvbmZpZyA9IHRoaXMuX3VwZGF0ZUNvbmZpZyhjb25maWcsIHRleHQpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl91cGRhdGVTcGVlY2godGV4dCwgY29uZmlnKS5wcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIG5hbWVzcGFjZSB0byB0aGUgaG9zdCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIHRvIGNvbnRhaW4gcHJvcGVydGllc1xyXG4gICAqIGFuZCBtZXRob2RzIGZyb20gdGhlIGZlYXR1cmUgdGhhdCB1c2VycyBvZiB0aGUgaG9zdCBuZWVkIGFjY2VzcyB0by5cclxuICAgKlxyXG4gICAqIEBzZWUgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAqL1xyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEBpbm5lclxyXG4gICAgICogQG5hbWVzcGFjZSBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IGFwaSA9IHN1cGVyLmluc3RhbGxBcGkoKTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGxheVxyXG4gICAgICAgKi9cclxuICAgICAgcGxheTogdGhpcy5wbGF5LmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNwYXVzZVxyXG4gICAgICAgKi9cclxuICAgICAgcGF1c2U6IHRoaXMucGF1c2UuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3Jlc3VtZVxyXG4gICAgICAgKi9cclxuICAgICAgcmVzdW1lOiB0aGlzLnJlc3VtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjc3RvcFxyXG4gICAgICAgKi9cclxuICAgICAgc3RvcDogdGhpcy5zdG9wLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNnZXRWb2x1bWVcclxuICAgICAgICovXHJcbiAgICAgIGdldFZvbHVtZTogdGhpcy5nZXRWb2x1bWUuYmluZCh0aGlzKSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEBtZW1iZXJvZiBUZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3NldFZvbHVtZVxyXG4gICAgICAgKi9cclxuICAgICAgc2V0Vm9sdW1lOiB0aGlzLnNldFZvbHVtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBtZXRob2RcclxuICAgICAgICogQHNlZSBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUjcGF1c2VWb2x1bWVcclxuICAgICAgICovXHJcbiAgICAgIHBhdXNlVm9sdW1lOiB0aGlzLnBhdXNlVm9sdW1lLmJpbmQodGhpcyksXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgKiBAc2VlIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZSNyZXN1bWVWb2x1bWVcclxuICAgICAgICovXHJcbiAgICAgIHJlc3VtZVZvbHVtZTogdGhpcy5yZXN1bWVWb2x1bWUuYmluZCh0aGlzKSxcclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGFwaSwge1xyXG4gICAgICAvKipcclxuICAgICAgICogQG1lbWJlcm9mIFRleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAqIEBzZWUgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlI3NwZWVjaG1hcmtPZmZzZXRcclxuICAgICAgICovXHJcbiAgICAgIHNwZWVjaG1hcmtPZmZzZXQ6IHtcclxuICAgICAgICBnZXQ6ICgpID0+IHRoaXMuc3BlZWNobWFya09mZnNldCxcclxuICAgICAgICBzZXQ6IG9mZnNldCA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNwZWVjaG1hcmtPZmZzZXQgPSBvZmZzZXQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhcGk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB2b2x1bWUgdXNlZCBmb3IgYWxsIGF1ZGlvIGNsaXBzIHBsYXllZCBieSB0aGUgc3BlYWtlci5cclxuICAgKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgc2V0IHZvbHVtZSh2b2x1bWUpIHtcclxuICAgIHRoaXMuX3ZvbHVtZSA9IE1hdGhVdGlscy5jbGFtcCh2b2x1bWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZvbHVtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl92b2x1bWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBzcGVha2VyJ3Mgdm9sdW1lIHZhbHVlIGlzIGN1cnJlbnRseSBiZWluZyB0d2VlbmVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IHZvbHVtZVBlbmRpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZXMudm9sdW1lICYmIHRoaXMuX3Byb21pc2VzLnZvbHVtZS5wZW5kaW5nO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgdm9sdW1lIHVzZWQgZm9yIGFsbCBhdWRpbyBjbGlwcyBwbGF5ZWQgYnkgdGhlIHNwZWFrZXIuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIGdldFZvbHVtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIHZvbHVtZSB1c2VkIGZvciBhbGwgYXVkaW8gY2xpcHMgcGxheWVkIGJ5IHRoZSBzcGVha2VyIG92ZXIgdGltZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2b2x1bWUgLSBUYXJnZXQgdm9sdW1lIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kcz0wXSAtIEFtb3VudCBvZiB0aW1lIGl0IHdpbGwgdGFrZSB0byByZWFjaCB0aGUgdGFyZ2V0XHJcbiAgICogdm9sdW1lLlxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb249fSBlYXNpbmdGbiAtIEVhc2luZyBmdW5jdGlvbiB1c2VkIGZvciBpbnRlcnBvbGF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHNldFZvbHVtZSh2b2x1bWUsIHNlY29uZHMgPSAwLCBlYXNpbmdGbikge1xyXG4gICAgaWYgKHRoaXMudm9sdW1lUGVuZGluZykge1xyXG4gICAgICB0aGlzLl9wcm9taXNlcy52b2x1bWUuY2FuY2VsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdm9sdW1lID0gTWF0aFV0aWxzLmNsYW1wKHZvbHVtZSk7XHJcbiAgICB0aGlzLl9wcm9taXNlcy52b2x1bWUgPSBBbmltYXRpb25VdGlscy5pbnRlcnBvbGF0ZVByb3BlcnR5KFxyXG4gICAgICB0aGlzLFxyXG4gICAgICAndm9sdW1lJyxcclxuICAgICAgdm9sdW1lLFxyXG4gICAgICB7IHNlY29uZHMsIGVhc2luZ0ZuIH1cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2VzLnZvbHVtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdXNlIGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBzcGVha2VyJ3Mgdm9sdW1lIHByb3BlcnR5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcGF1c2VWb2x1bWUoKSB7XHJcbiAgICB0aGlzLl92b2x1bWVQYXVzZWQgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnZvbHVtZVBlbmRpbmc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXN1bWUgYW55IGludGVycG9sYXRpb24gaGFwcGVuaW5nIG9uIHRoZSBzcGVha2VyJ3Mgdm9sdW1lIHByb3BlcnR5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgcmVzdW1lVm9sdW1lKCkge1xyXG4gICAgdGhpcy5fdm9sdW1lUGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudm9sdW1lUGVuZGluZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgY3VycmVudGx5IHBsYXlpbmcgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhVGltZSAtIFRpbWUgc2luY2UgdGhlIGxhc3QgdXBkYXRlLlxyXG4gICAqL1xyXG4gIHVwZGF0ZShkZWx0YVRpbWUpIHtcclxuICAgIGlmICghdGhpcy5fdm9sdW1lUGF1c2VkKSB7XHJcbiAgICAgIHRoaXMuX3Byb21pc2VzLnZvbHVtZS5leGVjdXRlKGRlbHRhVGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2gudm9sdW1lID0gdGhpcy5fdm9sdW1lO1xyXG4gICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLnVwZGF0ZSh0aGlzLl9ob3N0Lm5vdyk7XHJcbiAgICAgIHN1cGVyLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBjdXJyZW50IHNwZWVjaCB0byBhIG5ldyBhc3NldCBhbmQgdXBkYXRlIHRoZSBzcGVlY2gncyBzcGVlY2htYXJrXHJcbiAgICogb2Zmc2V0IHZhbHVlIHRvIG1hdGNoIHRoYXQgb2YgdGhlIGZlYXR1cmUuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNwZWVjaH0gc3BlZWNoIC0gU3BlZWNoIHRvIHNldCBhcyBjdXJyZW50LlxyXG4gICAqL1xyXG4gIF9zZXRDdXJyZW50U3BlZWNoKHNwZWVjaCkge1xyXG4gICAgc3BlZWNoLnNwZWVjaG1hcmtPZmZzZXQgPSB0aGlzLl9zcGVlY2htYXJrT2Zmc2V0O1xyXG4gICAgdGhpcy5fY3VycmVudFNwZWVjaCA9IHNwZWVjaDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIHByb21pc2UgdGhhdCB3aWxsIHBsYXkvcmVzdW1lIGEgc3BlZWNoIHdpdGggdGhlIGdpdmVuIHRleHQgYWZ0ZXJcclxuICAgKiB0aGUgYXVkaW8gY29udGV4dCBhdHRlbXB0cyB0byByZXN1bWUgYW5kIHNwZWVjaCBhdWRpbyBpcyByZXRyaWV2ZWQgZnJvbSBQb2xseS5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBuZXcgc3BlZWNoIHRvIHBsYXkuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGxheU1ldGhvZCA9ICdwbGF5J10gLSBNZXRob2QgdG8gZXhlY3V0ZSBvbiB0aGUgcmVzdWx0aW5nXHJcbiAgICogU3BlZWNoIG9iamVjdC4gVmFsaWQgb3B0aW9ucyBhcmUgJ3BsYXknIGFuZCAncmVzdW1lJy5cclxuICAgKi9cclxuICBfc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCBwbGF5TWV0aG9kID0gJ3BsYXknKSB7XHJcbiAgICAvLyBJZiBubyB0ZXh0IGlzIHByb3ZpZGVkLCB0cnkgdG8gdXNlIHRoZSBjdXJyZW50IHNwZWVjaFxyXG4gICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCAmJiBwbGF5TWV0aG9kID09PSAncmVzdW1lJyAmJiB0aGlzLl9jdXJyZW50U3BlZWNoKSB7XHJcbiAgICAgIHRleHQgPSB0aGlzLl9jdXJyZW50U3BlZWNoLnRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudFByb21pc2UgPSB0aGlzLl9jdXJyZW50UHJvbWlzZSB8fCB7XHJcbiAgICAgIHBsYXk6IG5ldyBEZWZlcnJlZChcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH1cclxuICAgICAgKSxcclxuICAgICAgc3BlZWNoOiBuZXcgRGVmZXJyZWQoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLl9jdXJyZW50UHJvbWlzZSA9IGN1cnJlbnRQcm9taXNlO1xyXG5cclxuICAgIHRoaXMuX2dldFNwZWVjaCh0ZXh0LCBjb25maWcpXHJcbiAgICAgIC50aGVuKHNwZWVjaCA9PiB7XHJcbiAgICAgICAgLy8gRXhpdCBpZiB0aGUgcHJvbWlzZSBpcyBubyBsb25nZXIgcGVuZGluZyBiZWNhdXNlIG9mIHVzZXIgaW50ZXJhY3Rpb25cclxuICAgICAgICBpZiAoIWN1cnJlbnRQcm9taXNlLnBsYXkucGVuZGluZykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY3VycmVudFByb21pc2UgIT09IGN1cnJlbnRQcm9taXNlKSB7XHJcbiAgICAgICAgICAvLyBDYW5jZWwgaWYgYW5vdGhlciBjYWxsIHRvIHBsYXkgaGFzIGFscmVhZHkgYmVlbiBtYWRlXHJcbiAgICAgICAgICBjdXJyZW50UHJvbWlzZS5wbGF5LmNhbmNlbCgpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVzZXQgY3VycmVudCBzcGVlY2ggd2hlbiB0aGUgc3BlZWNoIGVuZHNcclxuICAgICAgICBjb25zdCBvbkZpbmlzaCA9ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2ggPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5fY3VycmVudFByb21pc2UgPSBudWxsO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIENhbmNlbCB0aGUgY3VycmVudGx5IHBsYXlpbmcgc3BlZWNoXHJcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgICAgICBpZiAocGxheU1ldGhvZCA9PT0gJ3BsYXknKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2guY2FuY2VsKCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHBsYXlNZXRob2QgPT09ICdyZXN1bWUnXHJcbiAgICAgICAgICAgICYmIHRoaXMuX2N1cnJlbnRTcGVlY2guYXVkaW8gIT09IHNwZWVjaC5hdWRpbykge1xyXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50U3BlZWNoLmNhbmNlbCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2V0Q3VycmVudFNwZWVjaChzcGVlY2gpO1xyXG5cclxuICAgICAgICAvLyBQbGF5IHRoZSBzcGVlY2hcclxuICAgICAgICBjdXJyZW50UHJvbWlzZS5zcGVlY2ggPSBzcGVlY2hbcGxheU1ldGhvZF0odGhpcy5faG9zdC5ub3csIG9uRmluaXNoLCBvbkZpbmlzaCwgb25GaW5pc2gpO1xyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnNwZWVjaC50aGVuKCgpID0+IHtcclxuICAgICAgICAgIGlmIChjdXJyZW50UHJvbWlzZS5zcGVlY2gucmVzb2x2ZWQpIHtcclxuICAgICAgICAgICAgY3VycmVudFByb21pc2UucGxheS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50UHJvbWlzZS5wbGF5LmNhbmNlbCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkucmVqZWN0KGVycm9yKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGUgPT4ge1xyXG4gICAgICAgIGUgPSBgQ2Fubm90ICR7cGxheU1ldGhvZH0gc3BlZWNoICR7dGV4dH0gb24gaG9zdCAke3RoaXMuaG9zdC5pZH0uICR7ZX1gO1xyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkucmVqZWN0KGUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY3VycmVudFByb21pc2UucGxheTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgYW55IHNwZWVjaGVzIGN1cnJlbnRseSBwbGF5aW5nIGFuZCBwbGF5IGEgbmV3IHNwZWVjaCBmcm9tIHRoZSBiZWdpbm5pbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IG9mIHRoZSBuZXcgc3BlZWNoIHRvIHBsYXkuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHBsYXkodGV4dCwgY29uZmlnKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRTcGVlY2godGV4dCwgY29uZmlnLCAncGxheScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgYSBzcGVlY2ggaXMgY3VycmVudGx5IHBsYXlpbmcsIHBhdXNlIGl0IGF0IHRoZSBjdXJyZW50IHRpbWUuXHJcbiAgICovXHJcbiAgcGF1c2UoKSB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCAmJiB0aGlzLl9jdXJyZW50U3BlZWNoLnBsYXlpbmcpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5wYXVzZSh0aGlzLl9ob3N0Lm5vdyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYENhbm5vdCBwYXVzZSBzcGVlY2ggb24gaG9zdCAke3RoaXMuaG9zdC5pZH0uIE5vIHNwZWVjaCBpcyBjdXJyZW50bHkgcGxheWluZ2BcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3AgYW55IHNwZWVjaGVzIGN1cnJlbnRseSBwbGF5aW5nIGFuZCByZXN1bWUgYSBuZXcgc3BlZWNoIGZyb20gdGhlIGN1cnJlbnRcclxuICAgKiB0aW1lLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmc9fSB0ZXh0IC0gVGhlIHRleHQgb2YgdGhlIG5ldyBzcGVlY2ggdG8gcGxheS4gSWYgdW5kZWZpbmVkIGFuZFxyXG4gICAqIHRoZXJlIGlzIGEgY3VycmVudCBzcGVlY2ggdGhhdCBpcyBwYXVzZWQsIHRoZSBjdXJyZW50IHNwZWVjaCB3aWxsIGJlIHJlc3VtZWQuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgLSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfVxyXG4gICAqL1xyXG4gIHJlc3VtZSh0ZXh0LCBjb25maWcpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsICdyZXN1bWUnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGEgc3BlZWNoIGlzIGN1cnJlbnRseSBwbGF5aW5nLCBzdG9wIHBsYXliYWNrIGFuZCByZXNldCB0aW1lLlxyXG4gICAqL1xyXG4gIHN0b3AoKSB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNwZWVjaCAmJiB0aGlzLl9jdXJyZW50U3BlZWNoLnBsYXlpbmcpIHtcclxuICAgICAgdGhpcy5fY3VycmVudFNwZWVjaC5zdG9wKCk7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2ggPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBDYW5ub3Qgc3RvcCBzcGVlY2ggb24gaG9zdCAke3RoaXMuaG9zdC5pZH0uIE5vIHNwZWVjaCBpcyBjdXJyZW50bHkgcGxheWluZy5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNjYXJkKCkge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTcGVlY2ggJiYgdGhpcy5fY3VycmVudFNwZWVjaC5wbGF5aW5nKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRTcGVlY2guc3RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZSB0aGlzLl9zcGVlY2hDYWNoZTtcclxuXHJcbiAgICBzdXBlci5kaXNjYXJkKCk7XHJcbiAgfVxyXG59XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUsIHtcclxuICBBV1NfVkVSU0lPTjoge1xyXG4gICAgZ2V0OiAoKSA9PiBhd3NWZXJzaW9uLFxyXG4gIH0sXHJcbiAgUE9MTFlfTUlOX05FVVJBTF9WRVJTSU9OOiB7XHJcbiAgICB2YWx1ZTogJzIuNTAzJyxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIFBPTExZX0RFRkFVTFRTOiB7XHJcbiAgICB2YWx1ZToge1xyXG4gICAgICBFbmdpbmU6ICdzdGFuZGFyZCcsXHJcbiAgICAgIExleGljb25OYW1lczogW10sXHJcbiAgICAgIE91dHB1dEZvcm1hdDogJ21wMycsXHJcbiAgICAgIFNhbXBsZVJhdGU6ICcyMjA1MCcsXHJcbiAgICAgIFRleHQ6ICcnLFxyXG4gICAgICBUZXh0VHlwZTogJ3NzbWwnLFxyXG4gICAgICBWb2ljZUlkOiAnQW15JyxcclxuICAgICAgTGFuZ3VhZ2VDb2RlOiAnZW4tR0InLFxyXG4gICAgICBMYW5ndWFnZU5hbWU6ICdCcml0aXNoIEVuZ2xpc2gnLFxyXG4gICAgfSxcclxuICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICB9LFxyXG4gIFBPTExZX1ZPSUNFUzoge1xyXG4gICAgdmFsdWU6IFtdLFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgUE9MTFlfTEFOR1VBR0VTOiB7XHJcbiAgICB2YWx1ZToge30sXHJcbiAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgfSxcclxuICBQT0xMWV9MQU5HVUFHRV9DT0RFUzoge1xyXG4gICAgdmFsdWU6IHt9LFxyXG4gICAgd3JpdGFibGU6IGZhbHNlLFxyXG4gIH0sXHJcbiAgX2lzUmVhZHk6IHtcclxuICAgIHZhbHVlOiBmYWxzZSxcclxuICAgIHdyaXRhYmxlOiB0cnVlLFxyXG4gIH0sXHJcbiAgRVZFTlRTOiB7XHJcbiAgICB2YWx1ZToge1xyXG4gICAgICAuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YoQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlKS5FVkVOVFMsXHJcbiAgICAgIHJlYWR5OiAnb25SZWFkeUV2ZW50JyxcclxuICAgICAgcGxheTogJ29uUGxheUV2ZW50JyxcclxuICAgICAgcGF1c2U6ICdvblBhdXNlRXZlbnQnLFxyXG4gICAgICByZXN1bWU6ICdvblJlc3VtZUV2ZW50JyxcclxuICAgICAgaW50ZXJydXB0OiAnb25JbnRlcnJ1cHRFdmVudCcsXHJcbiAgICAgIHN0b3A6ICdvblN0b3BFdmVudCcsXHJcbiAgICAgIHNlbnRlbmNlOiAnb25TZW50ZW5jZUV2ZW50JyxcclxuICAgICAgd29yZDogJ29uV29yZEV2ZW50JyxcclxuICAgICAgdmlzZW1lOiAnb25WaXNlbWVFdmVudCcsXHJcbiAgICAgIHNzbWw6ICdvblNzbWxFdmVudCcsXHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgU0VSVklDRVM6IHtcclxuICAgIHZhbHVlOiB7XHJcbiAgICAgIC4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUpLlNFUlZJQ0VTLFxyXG4gICAgICBwb2xseTogdW5kZWZpbmVkLFxyXG4gICAgICBwcmVzaWduZXI6IHVuZGVmaW5lZCxcclxuICAgIH0sXHJcbiAgfSxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IFNwZWVjaCBmcm9tICdhcHAvYXdzcGFjay9TcGVlY2gnO1xyXG5pbXBvcnQgRGVmZXJyZWQgZnJvbSAnY29yZS9EZWZlcnJlZCc7XHJcbmltcG9ydCBBYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUgZnJvbSAnLi9BYnN0cmFjdFRleHRUb1NwZWVjaEZlYXR1cmUnO1xyXG5cclxuLyoqXHJcbiAqIEBleHRlbmRzIEFic3RyYWN0VGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gKiBAYWxpYXMgY29yZS9UZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAqL1xyXG5jbGFzcyBUZXh0VG9TcGVlY2hGZWF0dXJlIGV4dGVuZHMgQWJzdHJhY3RUZXh0VG9TcGVlY2hGZWF0dXJlIHtcclxuICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XHJcbiAgICBzdXBlciguLi5hcmdzKTtcclxuXHJcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9zZXRBdWRpb0NvbnRleHQoKTtcclxuICAgIHRoaXMuX29ic2VydmVBdWRpb0NvbnRleHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3JlIHRoZSBhdWRpbyBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGVuc3VyZSBhdWRpbyBjYW4gYmUgcGxheWVkLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBfc2V0QXVkaW9Db250ZXh0KCkge1xyXG4gICAgdGhpcy5fYXVkaW9Db250ZXh0ID0gbmV3IEF1ZGlvQ29udGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIGZvciBzdGF0ZSBjaGFuZ2VzIG9uIHRoZSBhdWRpbyBjb250ZXh0IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBmZWF0dXJlXHJcbiAgICogaXMgZW5hYmxlZC5cclxuICAgKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgX29ic2VydmVBdWRpb0NvbnRleHQoKSB7XHJcbiAgICBpZiAodGhpcy5fYXVkaW9Db250ZXh0KSB7XHJcbiAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dC5vbnN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9hdWRpb0NvbnRleHQuc3RhdGUgPT09ICdydW5uaW5nJykge1xyXG4gICAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgJ1RoZSBhdWRpbyBjb250ZXh0IGlzIG5vdCBydW5uaW5nLiBTcGVlY2ggd2lsbCBub3QgYmUgYWJsZSB0byBiZSBwbGF5ZWQgdW50aWwgaXQgaXMgcmVzdW1lZC4gVXNlIHRoZSBcIlRleHRUb1NwZWVjaEZlYXR1cmUucmVzdW1lQXVkaW9cIiBtZXRob2QgdG8gdHJ5IHRvIHJlc3VtZSBpdCBhZnRlciBhIHVzZXIgZ2VzdHVyZS4nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuX2F1ZGlvQ29udGV4dC5vbnN0YXRlY2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gQXVkaW8gb2JqZWN0IG9mIHNwZWVjaCBhdWRpbyBmb3IgdGhlIGdpdmVuIHNwZWVjaCB0ZXh0LlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdCBjb21wYXRpYmxlIHdpdGggUG9sbHkuc3ludGhlc2l6ZVNwZWVjaC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBhdWRpbyBVUkwgYW5kIEF1ZGlvXHJcbiAgICogb2JqZWN0LlxyXG4gICAqL1xyXG4gIF9zeW50aGVzaXplQXVkaW8ocGFyYW1zKSB7XHJcbiAgICByZXR1cm4gc3VwZXIuX3N5bnRoZXNpemVBdWRpbyhwYXJhbXMpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgY29uc3Qge3VybH0gPSByZXN1bHQ7XHJcblxyXG4gICAgICAvLyBDcmVhdGUgYW4gQXVkaW8gb2JqZWN0IHRoYXQgcG9pbnRzIHRvIHRoZSBwcmVzaWduZWQgdXJsXHJcbiAgICAgIGNvbnN0IGF1ZGlvID0gbmV3IEF1ZGlvKHVybCk7XHJcbiAgICAgIGF1ZGlvLmxvb3AgPSB0aGlzLmxvb3A7XHJcbiAgICAgIGF1ZGlvLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XHJcbiAgICAgIGF1ZGlvLnByZWxvYWQgPSAnYXV0byc7XHJcbiAgICAgIHJlc3VsdC5hdWRpbyA9IGF1ZGlvO1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgIC8vIFJlc29sdmUgb25jZSB0aGUgbWluaW11bSBhbW91bnQgaXMgbG9hZGVkXHJcbiAgICAgICAgYXVkaW8uYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCAoKSA9PiB7XHJcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIGF1ZGlvXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhdWRpbyk7XHJcbiAgICAgICAgYXVkaW8ubG9hZCgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IFNwZWVjaCBvYmplY3QgZm9yIHRoZSBzcGVha2VyLlxyXG4gICAqXHJcbiAgICogQHByaXZhdGVcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7VGV4dFRvU3BlZWNofSBzcGVha2VyIC0gVGhlIFRleHRUb1NwZWVjaCBpbnN0YW5jZSB0aGF0IHdpbGwgb3duIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUZXh0IG9mIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHNwZWVjaG1hcmtzIC0gU3BlZWNobWFya3MgZm9yIHRoZSBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1ZGlvQ29uZmlnIC0gQXVkaW8gZm9yIHRoZSBzcGVlY2guXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7QWJzdHJhY3RTcGVlY2h9XHJcbiAgICovXHJcbiAgX2NyZWF0ZVNwZWVjaCh0ZXh0LCBzcGVlY2htYXJrcywgYXVkaW9Db25maWcpIHtcclxuICAgIHJldHVybiBuZXcgU3BlZWNoKHRoaXMsIHRleHQsIHNwZWVjaG1hcmtzLCBhdWRpb0NvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHdoZXRoZXIgb3Igbm90IHRoZSBhdWRpbyBjb250ZXh0IGlzIHJ1bm5pbmcgYW5kIHNwZWVjaCBjYW4gYmUgcGxheWVkLlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgZ2V0IGVuYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyeSB0byByZXN1bWUgdGhlIGF1ZGlvIGNvbnRleHQuIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGVhY2ggdGltZVxyXG4gICAqIHNwZWVjaCBpcyBwbGF5ZWQgb3IgcmVzdW1lZC4gSWYgdXNpbmcgbWFudWFsbHksIGl0IHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgYVxyXG4gICAqIHVzZXIgaW50ZXJhY3Rpb24gb2NjdXJzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge0RlZmVycmVkfSAtIFJlc29sdmVzIG9uY2UgdGhlIGF1ZGlvIGNvbnRleHQgaGFzIHJlc3VtZWQuXHJcbiAgICovXHJcbiAgcmVzdW1lQXVkaW8oKSB7XHJcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IERlZmVycmVkKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5fYXVkaW9Db250ZXh0XHJcbiAgICAgICAgLnJlc3VtZSgpXHJcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgcGxheU1ldGhvZCA9ICdwbGF5Jykge1xyXG4gICAgY29uc3QgY3VycmVudFByb21pc2UgPSB7XHJcbiAgICAgIHBsYXk6IG5ldyBEZWZlcnJlZChcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH0sXHJcbiAgICAgICAgKCkgPT4geyBjdXJyZW50UHJvbWlzZS5zcGVlY2guY2FuY2VsKCk7IH1cclxuICAgICAgKSxcclxuICAgICAgc3BlZWNoOiBuZXcgRGVmZXJyZWQoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLl9jdXJyZW50UHJvbWlzZSA9IGN1cnJlbnRQcm9taXNlO1xyXG5cclxuICAgIC8vIFRyeSB0byBzdGFydCB0aGUgYXVkaW8gY29udGV4dFxyXG4gICAgdGhpcy5yZXN1bWVBdWRpbygpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAvLyBFeGl0IGlmIHRoZSBwcm9taXNlIGlzIG5vIGxvbmdlciBwZW5kaW5nIGJlY2F1c2Ugb2YgdXNlciBpbnRlcmFjdGlvblxyXG4gICAgICBpZiAoIWN1cnJlbnRQcm9taXNlLnBsYXkucGVuZGluZykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvLyBDYW5jZWwgaWYgYW5vdGhlciBjYWxsIHRvIHBsYXkgaGFzIGFscmVhZHkgYmVlbiBtYWRlXHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX2N1cnJlbnRQcm9taXNlICE9PSBjdXJyZW50UHJvbWlzZSkge1xyXG4gICAgICAgIGN1cnJlbnRQcm9taXNlLnBsYXkuY2FuY2VsKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBUaGUgYXVkaW8gY29udGV4dCBpcyBydW5uaW5nIHNvIHRoZSBzcGVlY2ggY2FuIGJlIHBsYXllZFxyXG4gICAgICBpZiAodGhpcy5fZW5hYmxlZCkge1xyXG4gICAgICAgIHN1cGVyLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsIHBsYXlNZXRob2QpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFJlamVjdCBpZiB0aGUgYXVkaW8gY29udGV4dCBpcyBub3QgcnVubmluZ1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjdXJyZW50UHJvbWlzZS5yZWplY3QoXHJcbiAgICAgICAgICBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGBDYW5ub3QgJHtwbGF5TWV0aG9kfSBzcGVlY2ggb24gaG9zdCAke3RoaXMuX2hvc3QuaWR9LiBUaGUgYXVkaW8gY29udGV4dCBpcyBub3QgcnVubmluZy4gVXNlIHRoZSBcIlRleHRUb1NwZWVjaEZlYXR1cmUucmVzdW1lQXVkaW9cIiBtZXRob2QgdG8gdHJ5IHRvIHJlc3VtZSBpdCBhZnRlciBhIHVzZXIgZ2VzdHVyZS5gXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRQcm9taXNlLnBsYXk7XHJcbiAgfVxyXG5cclxuICBwbGF5KHRleHQsIGNvbmZpZykge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0U3BlZWNoKHRleHQsIGNvbmZpZywgJ3BsYXknKTtcclxuICB9XHJcblxyXG4gIHJlc3VtZSh0ZXh0LCBjb25maWcpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGFydFNwZWVjaCh0ZXh0LCBjb25maWcsICdyZXN1bWUnKTtcclxuICB9XHJcblxyXG4gIGluc3RhbGxBcGkoKSB7XHJcbiAgICBjb25zdCBhcGkgPSBzdXBlci5pbnN0YWxsQXBpKCk7XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYXBpLCB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBAbWVtYmVyb2YgVGV4dFRvU3BlZWNoRmVhdHVyZVxyXG4gICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICogQHNlZSBjb3JlL1RleHRUb1NwZWVjaEZlYXR1cmUjZW5hYmxlZFxyXG4gICAgICAgKi9cclxuICAgICAgZW5hYmxlZDoge1xyXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5fZW5hYmxlZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhcGk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0VG9TcGVlY2hGZWF0dXJlO1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcbmltcG9ydCBDb3JlVGV4dFRvU3BlZWNoRmVhdHVyZSBmcm9tICdjb3JlL2F3c3BhY2svVGV4dFRvU3BlZWNoRmVhdHVyZSc7XHJcblxyXG4vKipcclxuICogVGhyZWVqcyBQb3NpdGlvbmFsQXVkaW8gb2JqZWN0XHJcbiAqIEBleHRlcm5hbCBcIlRIUkVFLkF1ZGlvTGlzdGVuZXJcIlxyXG4gKiBAc2VlIGh0dHBzOi8vdGhyZWVqcy5vcmcvZG9jcy8jYXBpL2VuL2F1ZGlvL0F1ZGlvTGlzdGVuZXJcclxuICovXHJcblxyXG4vKipcclxuICogVGhyZWVqcyBBdWRpbyBvYmplY3RcclxuICogQGV4dGVybmFsIFwiVEhSRUUuT2JqZWN0M0RcIlxyXG4gKiBAc2VlIGh0dHBzOi8vdGhyZWVqcy5vcmcvZG9jcy8jYXBpL2VuL2NvcmUvT2JqZWN0M0RcclxuICovXHJcblxyXG4vKipcclxuICogQGV4dGVuZHMgY29yZS9UZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAqIEBhbGlhcyB0aHJlZS5qcy9UZXh0VG9TcGVlY2hGZWF0dXJlXHJcbiAqL1xyXG5jbGFzcyBUZXh0VG9TcGVlY2hGZWF0dXJlIGV4dGVuZHMgQ29yZVRleHRUb1NwZWVjaEZlYXR1cmUge1xyXG4gIC8qKlxyXG4gICAqIEBjb25zdHJ1Y3RvclxyXG4gICAqXHJcbiAgICogQHBhcmFtIHt0aHJlZS9Ib3N0T2JqZWN0fSBob3N0IC0gSG9zdCBvYmplY3QgbWFuYWdpbmcgdGhlIGZlYXR1cmUuXHJcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyB0aGF0IHdpbGwgYmUgc2VudCB0byBQb2xseSBmb3IgZWFjaCBzcGVlY2guXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpcIlRIUkVFLkF1ZGlvTGlzdGVuZXJcIn0gb3B0aW9ucy5saXN0ZW5lciAtIFRocmVlIGF1ZGlvIGxpc3RlbmVyIHRvIHVzZSB3aXRoXHJcbiAgICogYXVkaW8uXHJcbiAgICogQHBhcmFtIHtleHRlcm5hbDpcIlRIUkVFLk9iamVjdDNEXCI9fSBvcHRpb25zLmF0dGFjaFRvIC0gT3B0aW9uYWwgb2JqZWN0IHRvIGF0dGFjaCB0aGUgc3BlZWNoXHJcbiAgICogYXVkaW8gdG8uXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBob3N0LFxyXG4gICAgb3B0aW9ucyA9IHtcclxuICAgICAgdm9pY2U6IHVuZGVmaW5lZCxcclxuICAgICAgZW5naW5lOiB1bmRlZmluZWQsXHJcbiAgICAgIGxhbmd1YWdlOiB1bmRlZmluZWQsXHJcbiAgICAgIGF1ZGlvRm9ybWF0OiAnbXAzJyxcclxuICAgICAgc2FtcGxlUmF0ZTogdW5kZWZpbmVkLFxyXG4gICAgICBsaXN0ZW5lcjogdW5kZWZpbmVkLFxyXG4gICAgICBhdHRhY2hUbzogdW5kZWZpbmVkLFxyXG4gICAgfVxyXG4gICkge1xyXG4gICAgc3VwZXIoaG9zdCwgb3B0aW9ucyk7XHJcbiAgICB0aGlzLl9saXN0ZW5lciA9IG9wdGlvbnMubGlzdGVuZXI7XHJcbiAgICB0aGlzLl9hdHRhY2hUbyA9IG9wdGlvbnMuYXR0YWNoVG8gfHwgaG9zdC5vd25lcjtcclxuICAgIHRoaXMuX3NldEF1ZGlvQ29udGV4dCgpO1xyXG4gICAgdGhpcy5fb2JzZXJ2ZUF1ZGlvQ29udGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgX3NldEF1ZGlvQ29udGV4dCgpIHtcclxuICAgIGlmICh0aGlzLl9saXN0ZW5lcikge1xyXG4gICAgICB0aGlzLl9hdWRpb0NvbnRleHQgPSB0aGlzLl9saXN0ZW5lci5jb250ZXh0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuIEF1ZGlvIG9iamVjdCBhbmQgVGhyZWUuanMgYXVkaW8gb2JqZWN0IG9mIHNwZWVjaCBhdWRpbyBmb3IgdGhlXHJcbiAgICogZ2l2ZW4gc3BlZWNoIHRleHQuXHJcbiAgICpcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFBhcmFtZXRlcnMgb2JqZWN0IGNvbXBhdGlibGUgd2l0aCBQb2xseS5zeW50aGVzaXplU3BlZWNoLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2V9IFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGF1ZGlvIFVSTCBhbmQgQXVkaW9cclxuICAgKiBvYmplY3RzLlxyXG4gICAqL1xyXG4gIF9zeW50aGVzaXplQXVkaW8ocGFyYW1zKSB7XHJcbiAgICByZXR1cm4gc3VwZXIuX3N5bnRoZXNpemVBdWRpbyhwYXJhbXMpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHRoaXMuX2F0dGFjaFRvICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAvLyBDcmVhdGUgcG9zaXRpb25hbCBhdWRpbyBpZiB0aGVyZSdzIGFuIGF0dGFjaCBwb2ludFxyXG4gICAgICAgIHJlc3VsdC50aHJlZUF1ZGlvID0gbmV3IFRIUkVFLlBvc2l0aW9uYWxBdWRpbyh0aGlzLl9saXN0ZW5lcik7XHJcbiAgICAgICAgdGhpcy5fYXR0YWNoVG8uYWRkKHJlc3VsdC50aHJlZUF1ZGlvKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBDcmVhdGUgbm9uLXBvc2l0aW9uYWwgYXVkaW9cclxuICAgICAgICByZXN1bHQudGhyZWVBdWRpbyA9IG5ldyBUSFJFRS5BdWRpbyh0aGlzLl9saXN0ZW5lcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFNldCBBdWRpbyBvYmplY3QgYXMgdGhlIHNvdXJjZVxyXG4gICAgICByZXN1bHQudGhyZWVBdWRpby5zZXRNZWRpYUVsZW1lbnRTb3VyY2UocmVzdWx0LmF1ZGlvKTtcclxuXHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRleHRUb1NwZWVjaEZlYXR1cmU7XHJcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IFRleHRUb1NwZWVjaFV0aWxzIGZyb20gJ2NvcmUvYXdzcGFjay9UZXh0VG9TcGVlY2hVdGlscyc7XHJcbmltcG9ydCBUZXh0VG9TcGVlY2hGZWF0dXJlIGZyb20gJy4vVGV4dFRvU3BlZWNoRmVhdHVyZSc7XHJcbmltcG9ydCBTcGVlY2ggZnJvbSAnLi9TcGVlY2gnO1xyXG5cclxuLyoqXHJcbiAqIEBtb2R1bGUgdGhyZWUvYXdzcGFja1xyXG4gKi9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAvKipcclxuICAgKiBAc2VlIHRocmVlLmpzL1RleHRUb1NwZWVjaEZlYXR1cmVcclxuICAgKi9cclxuICBUZXh0VG9TcGVlY2hGZWF0dXJlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgY29yZS9UZXh0VG9TcGVlY2hVdGlsc1xyXG4gICAqL1xyXG4gIFRleHRUb1NwZWVjaFV0aWxzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgdGhyZWUuanMvU3BlZWNoXHJcbiAgICovXHJcbiAgU3BlZWNoLFxyXG59O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxuaW1wb3J0IENvcmVTaW5nbGVTdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL1NpbmdsZVN0YXRlJztcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnY29yZS9NYXRoVXRpbHMnO1xuXG4vKipcbiAqIFRocmVlanMgQW5pbWF0aW9uQWN0aW9uIG9iamVjdFxuICogQGV4dGVybmFsIFwiVEhSRUUuQW5pbWF0aW9uQWN0aW9uXCJcbiAqIEBzZWUgaHR0cHM6Ly90aHJlZWpzLm9yZy9kb2NzLyNhcGkvZW4vYW5pbWF0aW9uL0FuaW1hdGlvbkFjdGlvblxuICovXG5cbmNvbnN0IHRocmVlQmxlbmRNb2RlcyA9IHtcbiAgT3ZlcnJpZGU6IFRIUkVFLk5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZSxcbiAgQWRkaXRpdmU6IFRIUkVFLkFkZGl0aXZlQW5pbWF0aW9uQmxlbmRNb2RlLFxufTtcblxuLyoqXG4gKiBAZXh0ZW5kcyBjb3JlL1NpbmdsZVN0YXRlXG4gKiBAYWxpYXMgdGhyZWUuanMvU2luZ2xlU3RhdGVcbiAqL1xuY2xhc3MgU2luZ2xlU3RhdGUgZXh0ZW5kcyBDb3JlU2luZ2xlU3RhdGUge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBhbmltYXRpb24gc3RhdGUuXG4gICAqIEBwYXJhbSB7ZXh0ZXJuYWw6XCJUSFJFRS5BbmltYXRpb25BY3Rpb25cIn0gdGhyZWVBY3Rpb24gLSBBbmltYXRpb24gYWN0aW9uIHRoYXQgY29udHJvbHNcbiAgICogcGxheWJhY2sgb2YgdGhlIGNsaXAuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30sIHRocmVlQWN0aW9uKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICAvLyBDYWxsYmFjayB0byBjYXRjaCBUSFJFRSBhbmltYXRpb24gYWN0aW9uIGNvbXBsZXRpb25cbiAgICB0aGlzLl9vbkZpbmlzaGVkRXZlbnQgPSAoe3R5cGUsIGFjdGlvbn0pID0+IHtcbiAgICAgIC8vIEV4aXQgaWYgdGhpcyBpc24ndCB0aGUgZmluaXNoIGV2ZW50IGZvciB0aGlzIGFuaW1hdGlvblxuICAgICAgaWYgKHR5cGUgIT09ICdmaW5pc2hlZCcgfHwgYWN0aW9uICE9PSB0aGlzLnRocmVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcHJvbWlzZXMucGxheS5yZXNvbHZlKCk7XG5cbiAgICAgIC8vIFN0b3AgZXZhbHVhdGluZyBpbnRlcnBvbGF0b3JzIGlmIHRoZXkgaGF2ZSBhbHJlYWR5IGNvbXBsZXRlZFxuICAgICAgaWYgKCF0aGlzLndlaWdodFBlbmRpbmcgJiYgIXRoaXMudGltZVNjYWxlUGVuZGluZykge1xuICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLl90aHJlZUFjdGlvbiA9IHRocmVlQWN0aW9uO1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLmNsYW1wV2hlbkZpbmlzaGVkID0gdHJ1ZTsgLy8gSG9sZCB0aGUgbGFzdCBmcmFtZSBvbiBjb21wbGV0aW9uXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24uZW5hYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLmxvb3AgPVxuICAgICAgdGhpcy5fbG9vcENvdW50ID09PSAxID8gVEhSRUUuTG9vcE9uY2UgOiBUSFJFRS5Mb29wUmVwZWF0O1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLnBhdXNlZCA9IHRoaXMuX3BhdXNlZDtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5yZXBldGl0aW9ucyA9IHRoaXMuX2xvb3BDb3VudDtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi50aW1lU2NhbGUgPSB0aGlzLl90aW1lU2NhbGU7XG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ud2VpZ2h0ID0gdGhpcy5faW50ZXJuYWxXZWlnaHQ7XG4gICAgdGhpcy5fdGhyZWVBY3Rpb24uYmxlbmRNb2RlID0gdGhyZWVCbGVuZE1vZGVzW3RoaXMuX2JsZW5kTW9kZV07XG5cbiAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIGFuaW1hdGlvbiBmaW5pc2hlZCBldmVudHNcbiAgICB0aGlzLl90aHJlZUFjdGlvblxuICAgICAgLmdldE1peGVyKClcbiAgICAgIC5hZGRFdmVudExpc3RlbmVyKCdmaW5pc2hlZCcsIHRoaXMuX29uRmluaXNoZWRFdmVudCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgVEhSRUUuQW5pbWF0aW9uQWN0aW9uIG9iamVjdC5cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEB0eXBlIHtleHRlcm5hbDpcIlRIUkVFLkFuaW1hdGlvbkFjdGlvblwifVxuICAgKi9cbiAgZ2V0IHRocmVlQWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl90aHJlZUFjdGlvbjtcbiAgfVxuXG4gIGdldCBub3JtYWxpemVkVGltZSgpIHtcbiAgICBpZiAodGhpcy5fdGhyZWVBY3Rpb24udGltZSAmJiB0aGlzLl90aHJlZUFjdGlvbi5nZXRDbGlwKCkgJiYgdGhpcy5fdGhyZWVBY3Rpb24uZ2V0Q2xpcCgpLmR1cmF0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdGhyZWVBY3Rpb24udGltZS90aGlzLl90aHJlZUFjdGlvbi5nZXRDbGlwKCkuZHVyYXRpb247XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgc2V0IG5vcm1hbGl6ZWRUaW1lKHRpbWUpIHtcbiAgICB0aW1lID0gTWF0aFV0aWxzLmNsYW1wKHRpbWUpO1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLnRpbWUgPSB0aGlzLl90aHJlZUFjdGlvbi5nZXRDbGlwKCkuZHVyYXRpb24gKiB0aW1lO1xuICB9XG5cbiAgZ2V0IHdlaWdodCgpIHtcbiAgICByZXR1cm4gc3VwZXIud2VpZ2h0O1xuICB9XG5cbiAgc2V0IHdlaWdodCh3ZWlnaHQpIHtcbiAgICBzdXBlci53ZWlnaHQgPSB3ZWlnaHQ7XG5cbiAgICB0aGlzLl90aHJlZUFjdGlvbi5lbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcikge1xuICAgIHN1cGVyLnVwZGF0ZUludGVybmFsV2VpZ2h0KGZhY3Rvcik7XG5cbiAgICB0aGlzLl90aHJlZUFjdGlvbi5zZXRFZmZlY3RpdmVXZWlnaHQodGhpcy5faW50ZXJuYWxXZWlnaHQpO1xuICB9XG5cbiAgZ2V0IHRpbWVTY2FsZSgpIHtcbiAgICByZXR1cm4gc3VwZXIudGltZVNjYWxlO1xuICB9XG5cbiAgc2V0IHRpbWVTY2FsZSh0aW1lU2NhbGUpIHtcbiAgICBzdXBlci50aW1lU2NhbGUgPSB0aW1lU2NhbGU7XG5cbiAgICB0aGlzLl90aHJlZUFjdGlvbi50aW1lU2NhbGUgPSB0aW1lU2NhbGU7XG4gIH1cblxuICBnZXQgbG9vcENvdW50KCkge1xuICAgIHJldHVybiBzdXBlci5sb29wQ291bnQ7XG4gIH1cblxuICBzZXQgbG9vcENvdW50KGxvb3BDb3VudCkge1xuICAgIHN1cGVyLmxvb3BDb3VudCA9IGxvb3BDb3VudDtcblxuICAgIHRoaXMuX3RocmVlQWN0aW9uLmxvb3AgPVxuICAgICAgbG9vcENvdW50ID09PSAxID8gVEhSRUUuTG9vcE9uY2UgOiBUSFJFRS5Mb29wUmVwZWF0O1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLnJlcGV0aXRpb25zID0gbG9vcENvdW50O1xuICB9XG5cbiAgcGxheShvbkZpbmlzaCwgb25FcnJvciwgb25DYW5jZWwpIHtcbiAgICAvLyBSZXN0YXJ0IGFuaW1hdGlvblxuICAgIHRoaXMuX3RocmVlQWN0aW9uLnJlc2V0KCk7XG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ucGxheSgpO1xuXG4gICAgcmV0dXJuIHN1cGVyLnBsYXkob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKTtcbiAgfVxuXG4gIHBhdXNlKCkge1xuICAgIC8vIE1ha2Ugc3VyZSBhbmltYXRpb24gaGFzIGluZmx1ZW5jZVxuICAgIHRoaXMuX3RocmVlQWN0aW9uLnBhdXNlZCA9IHRydWU7XG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ucGxheSgpO1xuXG4gICAgcmV0dXJuIHN1cGVyLnBhdXNlKCk7XG4gIH1cblxuICByZXN1bWUob25GaW5pc2gsIG9uRXJyb3IsIG9uQ2FuY2VsKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhbmltYXRpb24gY2FuIHBsYXkgYW5kIGhhcyBpbmZsdWVuY2VcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5lbmFibGVkID0gdHJ1ZTtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5wbGF5KCk7XG5cbiAgICByZXR1cm4gc3VwZXIucmVzdW1lKG9uRmluaXNoLCBvbkVycm9yLCBvbkNhbmNlbCk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgLy8gU3RvcCBhbmltYXRpb24gcGxheWJhY2tcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5wYXVzZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHN1cGVyLmNhbmNlbCgpO1xuICB9XG5cbiAgc3RvcCgpIHtcbiAgICAvLyBSZXN0YXJ0IGFuZCBwYXVzZSB0aGUgYW5pbWF0aW9uXG4gICAgdGhpcy5fdGhyZWVBY3Rpb24ucmVzZXQoKTtcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5wYXVzZWQgPSB0cnVlO1xuICAgIHRoaXMuX3RocmVlQWN0aW9uLnBsYXkoKTtcblxuICAgIHJldHVybiBzdXBlci5zdG9wKCk7XG4gIH1cblxuICBkaXNjYXJkKCkge1xuICAgIC8vIFN0b3AgdGhlIGFuaW1hdGlvbiBmcm9tIGhhdmluZyBpbmZsdWVuY2VcbiAgICB0aGlzLl90aHJlZUFjdGlvbi5lbmFibGVkID0gZmFsc2U7XG5cbiAgICAvLyBTdG9wIGxpc3RlbmluZyBmb3IgZmluaXNoIGV2ZW50c1xuICAgIHRoaXMuX3RocmVlQWN0aW9uXG4gICAgICAuZ2V0TWl4ZXIoKVxuICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZpbmlzaGVkJywgdGhpcy5fb25GaW5pc2hlZEV2ZW50KTtcblxuICAgIHN1cGVyLmRpc2NhcmQoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaW5nbGVTdGF0ZTtcbiIsIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlULTBcclxuaW1wb3J0IENvcmVBbmltYXRpb25GZWF0dXJlLCB7XHJcbiAgQW5pbWF0aW9uVHlwZXMsXHJcbn0gZnJvbSAnY29yZS9hbmltcGFjay9BbmltYXRpb25GZWF0dXJlJztcclxuaW1wb3J0IFNpbmdsZVN0YXRlIGZyb20gJy4vc3RhdGUvU2luZ2xlU3RhdGUnO1xyXG5cclxuLyoqXHJcbiAqIFRocmVlanMgQW5pbWF0aW9uTWl4ZXIgb2JqZWN0XHJcbiAqIEBleHRlcm5hbCBcIlRIUkVFLkFuaW1hdGlvbk1peGVyXCJcclxuICogQHNlZSBodHRwczovL3RocmVlanMub3JnL2RvY3MvI2FwaS9lbi9hbmltYXRpb24vQW5pbWF0aW9uTWl4ZXJcclxuICovXHJcbkFuaW1hdGlvblR5cGVzLnNpbmdsZSA9IFNpbmdsZVN0YXRlO1xyXG5leHBvcnQge0FuaW1hdGlvblR5cGVzfTtcclxuXHJcbi8qKlxyXG4gKiBAZXh0ZW5kcyBjb3JlL0FuaW1hdGlvbkZlYXR1cmVcclxuICogQGFsaWFzIHRocmVlLmpzL0FuaW1hdGlvbkZlYXR1cmVcclxuICovXHJcbmNsYXNzIEFuaW1hdGlvbkZlYXR1cmUgZXh0ZW5kcyBDb3JlQW5pbWF0aW9uRmVhdHVyZSB7XHJcbiAgLyoqXHJcbiAgICogQGNvbnN0cnVjdG9yXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3RocmVlLmpzL0hvc3RPYmplY3R9IGhvc3QgLSBIb3N0IG9iamVjdCB0aGF0IG93bnMgdGhlIGZlYXR1cmUuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoaG9zdCkge1xyXG4gICAgc3VwZXIoaG9zdCk7XHJcblxyXG4gICAgdGhpcy5fbWl4ZXIgPSBuZXcgVEhSRUUuQW5pbWF0aW9uTWl4ZXIoaG9zdC5vd25lcik7XHJcbiAgfVxyXG5cclxuICBfY3JlYXRlU2luZ2xlU3RhdGUob3B0aW9ucykge1xyXG4gICAgLy8gRHVwbGljYXRlIHRoZSBjbGlwIGlmIGl0IGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgdGhyZWUgYWN0aW9uXHJcbiAgICBsZXQge2NsaXB9ID0gb3B0aW9ucztcclxuICAgIGlmICh0aGlzLl9taXhlci5leGlzdGluZ0FjdGlvbihjbGlwKSkge1xyXG4gICAgICBjbGlwID0gY2xpcC5jbG9uZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRocmVlQWN0aW9uID0gdGhpcy5fbWl4ZXIuY2xpcEFjdGlvbihjbGlwKTtcclxuICAgIHJldHVybiBuZXcgU2luZ2xlU3RhdGUob3B0aW9ucywgdGhyZWVBY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgVEhSRUUuQW5pbWF0aW9uTWl4ZXIgZm9yIHRoZSBob3N0LlxyXG4gICAqXHJcbiAgICogQHJlYWRvbmx5XHJcbiAgICogQHR5cGUge2V4dGVybmFsOlwiVEhSRUUuQW5pbWF0aW9uTWl4ZXJcIn1cclxuICAgKi9cclxuICBnZXQgbWl4ZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWl4ZXI7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoZGVsdGFUaW1lKSB7XHJcbiAgICBzdXBlci51cGRhdGUoZGVsdGFUaW1lKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX3BhdXNlZCkge1xyXG4gICAgICB0aGlzLl9taXhlci51cGRhdGUoZGVsdGFUaW1lIC8gMTAwMCk7IC8vIFRIUkVFLkFuaW1hdGlvbk1peGVyIHJlcXVpcmVzIGRlbHRhIHRpbWUgaW4gc2Vjb25kc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzY2FyZCgpIHtcclxuICAgIC8vIFJlbGVhc2UgVEhSRUUgYW5pbWF0aW9uIHJlc291cmNlc1xyXG4gICAgdGhpcy5fbWl4ZXIudW5jYWNoZVJvb3QodGhpcy5faG9zdC5vd25lcik7XHJcblxyXG4gICAgc3VwZXIuZGlzY2FyZCgpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0aW9uRmVhdHVyZTtcclxuIiwiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQtMFxyXG5cclxuLyoqXHJcbiAqIEBtb2R1bGUgdGhyZWUvYW5pbXBhY2tcclxuICovXHJcblxyXG5pbXBvcnQge1xyXG4gIExpbmVhcixcclxuICBRdWFkcmF0aWMsXHJcbiAgQ3ViaWMsXHJcbiAgUXVhcnRpYyxcclxuICBRdWludGljLFxyXG4gIFNpbnVzb2lkYWwsXHJcbiAgRXhwb25lbnRpYWwsXHJcbiAgQ2lyY3VsYXIsXHJcbiAgRWxhc3RpYyxcclxuICBCYWNrLFxyXG4gIEJvdW5jZSxcclxufSBmcm9tICdjb3JlL2FuaW1wYWNrL0Vhc2luZyc7XHJcbmltcG9ydCBBbmltYXRpb25VdGlscyBmcm9tICdjb3JlL2FuaW1wYWNrL0FuaW1hdGlvblV0aWxzJztcclxuaW1wb3J0IFRyYW5zaXRpb25TdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL1RyYW5zaXRpb25TdGF0ZSc7XHJcbmltcG9ydCBSYW5kb21BbmltYXRpb25TdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL1JhbmRvbUFuaW1hdGlvblN0YXRlJztcclxuaW1wb3J0IEFuaW1hdGlvbkxheWVyLCB7XHJcbiAgTGF5ZXJCbGVuZE1vZGVzLFxyXG4gIERlZmF1bHRMYXllckJsZW5kTW9kZSxcclxufSBmcm9tICdjb3JlL2FuaW1wYWNrL0FuaW1hdGlvbkxheWVyJztcclxuaW1wb3J0IEZyZWVCbGVuZFN0YXRlIGZyb20gJ2NvcmUvYW5pbXBhY2svc3RhdGUvRnJlZUJsZW5kU3RhdGUnO1xyXG5pbXBvcnQgUXVldWVTdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL1F1ZXVlU3RhdGUnO1xyXG5pbXBvcnQgQmxlbmQxZFN0YXRlIGZyb20gJ2NvcmUvYW5pbXBhY2svc3RhdGUvQmxlbmQxZFN0YXRlJztcclxuaW1wb3J0IEJsZW5kMmRTdGF0ZSBmcm9tICdjb3JlL2FuaW1wYWNrL3N0YXRlL0JsZW5kMmRTdGF0ZSc7XHJcbmltcG9ydCBBbmltYXRpb25GZWF0dXJlLCB7QW5pbWF0aW9uVHlwZXN9IGZyb20gJy4vQW5pbWF0aW9uRmVhdHVyZSc7XHJcbmltcG9ydCBTaW5nbGVTdGF0ZSBmcm9tICcuL3N0YXRlL1NpbmdsZVN0YXRlJztcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlXHJcbiAqL1xyXG5jb25zdCBFYXNpbmcgPSB7XHJcbiAgLyoqXHJcbiAgICogQHNlZSBMaW5lYXJcclxuICAgKi9cclxuICBMaW5lYXIsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWFkcmF0aWNcclxuICAgKi9cclxuICBRdWFkcmF0aWMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBDdWJpY1xyXG4gICAqL1xyXG4gIEN1YmljLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgUXVhcnRpY1xyXG4gICAqL1xyXG4gIFF1YXJ0aWMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBRdWludGljXHJcbiAgICovXHJcbiAgUXVpbnRpYyxcclxuICAvKipcclxuICAgKiBAc2VlIFNpbnVzb2lkYWxcclxuICAgKi9cclxuICBTaW51c29pZGFsLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRXhwb25lbnRpYWxcclxuICAgKi9cclxuICBFeHBvbmVudGlhbCxcclxuICAvKipcclxuICAgKiBAc2VlIENpcmN1bGFyXHJcbiAgICovXHJcbiAgQ2lyY3VsYXIsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBFbGFzdGljXHJcbiAgICovXHJcbiAgRWxhc3RpYyxcclxuICAvKipcclxuICAgKiBAc2VlIEJhY2tcclxuICAgKi9cclxuICBCYWNrLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgQm91bmNlXHJcbiAgICovXHJcbiAgQm91bmNlLFxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgLyoqXHJcbiAgICogQHNlZSB0aHJlZS5qcy9BbmltYXRpb25GZWF0dXJlXHJcbiAgICovXHJcbiAgQW5pbWF0aW9uRmVhdHVyZSxcclxuICAvKipcclxuICAgKiBAc2VlIEFuaW1hdGlvbkxheWVyXHJcbiAgICovXHJcbiAgQW5pbWF0aW9uTGF5ZXIsXHJcbiAgLyoqXHJcbiAgICogQHNlZSB0aHJlZS5qcy9TaW5nbGVTdGF0ZVxyXG4gICAqL1xyXG4gIFNpbmdsZVN0YXRlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgVHJhbnNpdGlvblN0YXRlXHJcbiAgICovXHJcbiAgVHJhbnNpdGlvblN0YXRlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRnJlZUJsZW5kU3RhdGVcclxuICAgKi9cclxuICBGcmVlQmxlbmRTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIFF1ZXVlU3RhdGVcclxuICAgKi9cclxuICBRdWV1ZVN0YXRlLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgUmFuZG9tQW5pbWF0aW9uU3RhdGVcclxuICAgKi9cclxuICBSYW5kb21BbmltYXRpb25TdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIEJsZW5kMWRTdGF0ZVxyXG4gICAqL1xyXG4gIEJsZW5kMWRTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIEJsZW5kMmRTdGF0ZVxyXG4gICAqL1xyXG4gIEJsZW5kMmRTdGF0ZSxcclxuICAvKipcclxuICAgKiBAc2VlIEFuaW1hdGlvblV0aWxzXHJcbiAgICovXHJcbiAgQW5pbWF0aW9uVXRpbHMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBFYXNpbmdcclxuICAgKi9cclxuICBFYXNpbmcsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBMYXllckJsZW5kTW9kZXNcclxuICAgKi9cclxuICBMYXllckJsZW5kTW9kZXMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBEZWZhdWx0TGF5ZXJCbGVuZE1vZGVcclxuICAgKi9cclxuICBEZWZhdWx0TGF5ZXJCbGVuZE1vZGUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBbmltYXRpb25UeXBlc1xyXG4gICAqL1xyXG4gIEFuaW1hdGlvblR5cGVzLFxyXG59O1xyXG4iLCIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVC0wXHJcblxyXG4vKipcclxuICogQG1vZHVsZSB0aHJlZS9IT1NUXHJcbiAqL1xyXG5cclxuaW1wb3J0IFV0aWxzIGZyb20gJ2NvcmUvVXRpbHMnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ2NvcmUvTWF0aFV0aWxzJztcclxuaW1wb3J0IERlZmVycmVkIGZyb20gJ2NvcmUvRGVmZXJyZWQnO1xyXG5pbXBvcnQgTGlwc3luY0ZlYXR1cmUsIHtEZWZhdWx0VmlzZW1lTWFwfSBmcm9tICdjb3JlL0xpcHN5bmNGZWF0dXJlJztcclxuaW1wb3J0IEdlc3R1cmVGZWF0dXJlLCB7RGVmYXVsdEdlc3R1cmVXb3Jkc30gZnJvbSAnY29yZS9HZXN0dXJlRmVhdHVyZSc7XHJcbmltcG9ydCBQb2ludE9mSW50ZXJlc3RGZWF0dXJlLCB7QXhpc01hcH0gZnJvbSAnLi9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlJztcclxuaW1wb3J0IHtlbnZ9IGZyb20gJy4vSG9zdEVudmlyb25tZW50JztcclxuaW1wb3J0IE1lc3NlbmdlciBmcm9tICcuL01lc3Nlbmdlcic7XHJcbmltcG9ydCBIb3N0T2JqZWN0IGZyb20gJy4vSG9zdE9iamVjdCc7XHJcblxyXG5pbXBvcnQgYXdzIGZyb20gJy4vYXdzcGFjayc7XHJcbmltcG9ydCBhbmltIGZyb20gJy4vYW5pbXBhY2snO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIC8qKlxyXG4gICAqIEBzZWUgZW52XHJcbiAgICovXHJcbiAgZW52LFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgVXRpbHNcclxuICAgKi9cclxuICBVdGlscyxcclxuICAvKipcclxuICAgKiBAc2VlIE1hdGhVdGlsc1xyXG4gICAqL1xyXG4gIE1hdGhVdGlscyxcclxuICAvKipcclxuICAgKiBAc2VlIERlZmVycmVkXHJcbiAgICovXHJcbiAgRGVmZXJyZWQsXHJcbiAgLyoqXHJcbiAgICogQHNlZSB0aHJlZS5qcy9NZXNzZW5nZXJcclxuICAgKi9cclxuICBNZXNzZW5nZXIsXHJcbiAgLyoqXHJcbiAgICogQHNlZSB0aHJlZS5qcy9Ib3N0T2JqZWN0XHJcbiAgICovXHJcbiAgSG9zdE9iamVjdCxcclxuICAvKipcclxuICAgKiBAc2VlIGNvcmUvTGlwc3luY0ZlYXR1cmVcclxuICAgKi9cclxuICBMaXBzeW5jRmVhdHVyZSxcclxuICAvKipcclxuICAgKiBAc2VlIEdlc3R1cmVGZWF0dXJlXHJcbiAgICovXHJcbiAgR2VzdHVyZUZlYXR1cmUsXHJcbiAgLyoqXHJcbiAgICogQHNlZSB0aHJlZS5qcy9Qb2ludE9mSW50ZXJlc3RGZWF0dXJlXHJcbiAgICovXHJcbiAgUG9pbnRPZkludGVyZXN0RmVhdHVyZSxcclxuICAvKipcclxuICAgKiBAc2VlIERlZmF1bHRWaXNlbWVNYXBcclxuICAgKi9cclxuICBEZWZhdWx0VmlzZW1lTWFwLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgRGVmYXVsdEdlc3R1cmVXb3Jkc1xyXG4gICAqL1xyXG4gIERlZmF1bHRHZXN0dXJlV29yZHMsXHJcbiAgLyoqXHJcbiAgICogQHNlZSBBeGlzTWFwXHJcbiAgICovXHJcbiAgQXhpc01hcCxcclxuICAvKipcclxuICAgKiBAc2VlIG1vZHVsZTp0aHJlZS9hd3NwYWNrXHJcbiAgICovXHJcbiAgYXdzLFxyXG4gIC8qKlxyXG4gICAqIEBzZWUgbW9kdWxlOnRocmVlL2FuaW1wYWNrXHJcbiAgICovXHJcbiAgYW5pbSxcclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///333\n')}]).default})); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index cc6d952..3d7fd11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "amazon-sumerian-hosts", - "version": "1.3.4", + "version": "1.3.5", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index b914bf9..5a20e1c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "amazon-sumerian-hosts", - "version": "1.3.4", + "version": "1.3.5", "description": "", "scripts": { "test": "OS_NAME=\"$(uname)\" node ./node_modules/karma/bin/karma start",