!function(I){var n={};function g(e){if(n[e])return n[e].exports;var c=n[e]={i:e,l:!1,exports:{}};return I[e].call(c.exports,c,c.exports,g),c.l=!0,c.exports}g.m=I,g.c=n,g.d=function(I,n,e){g.o(I,n)||Object.defineProperty(I,n,{enumerable:!0,get:e})},g.r=function(I){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(I,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(I,"__esModule",{value:!0})},g.t=function(I,n){if(1&n&&(I=g(I)),8&n)return I;if(4&n&&"object"==typeof I&&I&&I.__esModule)return I;var e=Object.create(null);if(g.r(e),Object.defineProperty(e,"default",{enumerable:!0,value:I}),2&n&&"string"!=typeof I)for(var c in I)g.d(e,c,function(n){return I[n]}.bind(null,c));return e},g.n=function(I){var n=I&&I.__esModule?function(){return I.default}:function(){return I};return g.d(n,"a",n),n},g.o=function(I,n){return Object.prototype.hasOwnProperty.call(I,n)},g.p="",g(g.s=23)}([function(module,exports){eval("module.exports = jQuery;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9leHRlcm5hbCBcImpRdWVyeVwiP2NkMGMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBqUXVlcnk7Il0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///0\n")},function(module,exports){eval("function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzPzk1MjMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n")},function(module,exports){eval('function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n}\n\nmodule.exports = _classCallCheck;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzPzk3MGIiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2\n')},function(module,exports,__webpack_require__){eval("module.exports = __webpack_require__(17);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcz9hMzRhIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iXSwibWFwcGluZ3MiOiJBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3\n")},function(module,exports){eval('function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ("value" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzPzViYzMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4\n')},function(module,exports){eval('function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanM/Yzk3MyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvcjsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5\n')},function(module,exports){eval('function _typeof(obj) {\n "@babel/helpers - typeof";\n\n if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcz83MDM3Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6\n')},function(module,exports,__webpack_require__){eval("var arrayWithoutHoles = __webpack_require__(13);\n\nvar iterableToArray = __webpack_require__(14);\n\nvar unsupportedIterableToArray = __webpack_require__(15);\n\nvar nonIterableSpread = __webpack_require__(16);\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzPzQ0OGEiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXNcIik7XG5cbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiKTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7\n")},function(module,exports,__webpack_require__){eval('var setPrototypeOf = __webpack_require__(18);\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== "function" && superClass !== null) {\n throw new TypeError("Super expression must either be null or a function");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzP2VkNmQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2ZcIik7XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8\n')},function(module,exports){eval("function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcz8zYzk2Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZDsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n")},function(module,exports){eval("function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZi5qcz8zNmM2Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZjsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///10\n")},function(module,exports){eval("function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTEuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheUxpa2VUb0FycmF5LmpzPzVhNDMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///11\n")},function(module,exports,__webpack_require__){eval('var _typeof = __webpack_require__(6);\n\nvar assertThisInitialized = __webpack_require__(9);\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === "object" || typeof call === "function")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTIuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzPzZiNTgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi4vaGVscGVycy90eXBlb2ZcIik7XG5cbnZhciBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgPSByZXF1aXJlKFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIik7XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm47Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///12\n')},function(module,exports,__webpack_require__){eval("var arrayLikeToArray = __webpack_require__(11);\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhvdXRIb2xlcy5qcz8yMjM2Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheVwiKTtcblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlczsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///13\n")},function(module,exports){eval('function _iterableToArray(iter) {\n if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanM/MTFiMCJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///14\n')},function(module,exports,__webpack_require__){eval('var arrayLikeToArray = __webpack_require__(11);\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === "string") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === "Object" && o.constructor) n = o.constructor.name;\n if (n === "Map" || n === "Set") return Array.from(o);\n if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcz82NjEzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheVwiKTtcblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXk7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///15\n')},function(module,exports){eval('function _nonIterableSpread() {\n 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}\n\nmodule.exports = _nonIterableSpread;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcz8wNjc2Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///16\n')},function(module,exports,__webpack_require__){eval('/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\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 function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, "");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\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 exports.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 GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n "GeneratorFunction"\n );\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 define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.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 exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, "GeneratorFunction");\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 exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\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 PromiseImpl.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 PromiseImpl.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.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke("throw", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(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 exports.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 exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.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 // Note: ["return"] must be used for ES3 parsing compatibility.\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 define(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 exports.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 exports.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 // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n true ? module.exports : undefined\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you\'ve misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you\'re not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function("r", "regeneratorRuntime = r")(runtime);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzPzk2Y2YiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgcnVudGltZSA9IChmdW5jdGlvbiAoZXhwb3J0cykge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIGZ1bmN0aW9uIGRlZmluZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBvYmpba2V5XTtcbiAgfVxuICB0cnkge1xuICAgIC8vIElFIDggaGFzIGEgYnJva2VuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0aGF0IG9ubHkgd29ya3Mgb24gRE9NIG9iamVjdHMuXG4gICAgZGVmaW5lKHt9LCBcIlwiKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZGVmaW5lID0gZnVuY3Rpb24ob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoXG4gICAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgdG9TdHJpbmdUYWdTeW1ib2wsXG4gICAgXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICk7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgZGVmaW5lKHByb3RvdHlwZSwgbWV0aG9kLCBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIGV4cG9ydHMubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgZGVmaW5lKGdlbkZ1biwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIik7XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvciwgUHJvbWlzZUltcGwpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgLy8gSWYgYSByZWplY3RlZCBQcm9taXNlIHdhcyB5aWVsZGVkLCB0aHJvdyB0aGUgcmVqZWN0aW9uIGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gc28gaXQgY2FuIGJlIGhhbmRsZWQgdGhlcmUuXG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0LCBQcm9taXNlSW1wbCkge1xuICAgIGlmIChQcm9taXNlSW1wbCA9PT0gdm9pZCAwKSBQcm9taXNlSW1wbCA9IFByb21pc2U7XG5cbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksXG4gICAgICBQcm9taXNlSW1wbFxuICAgICk7XG5cbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgLy8gTm90ZTogW1wicmV0dXJuXCJdIG11c3QgYmUgdXNlZCBmb3IgRVMzIHBhcnNpbmcgY29tcGF0aWJpbGl0eS5cbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yW1wicmV0dXJuXCJdKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgZGVmaW5lKEdwLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JcIik7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgZXhwb3J0cy5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIGV4cG9ydHMudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmXG4gICAgICAgICAgICAgIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblxuICAgICAgICBpZiAoY2F1Z2h0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISEgY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uKHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmXG4gICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkgJiZcbiAgICAgICAgICAodHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgIHR5cGUgPT09IFwiY29udGludWVcIikgJiZcbiAgICAgICAgICBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJlxuICAgICAgICAgIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG4gICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cbiAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG4gICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG4gICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZVxuICAvLyBvciBub3QsIHJldHVybiB0aGUgcnVudGltZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gZGVjbGFyZSB0aGUgdmFyaWFibGVcbiAgLy8gcmVnZW5lcmF0b3JSdW50aW1lIGluIHRoZSBvdXRlciBzY29wZSwgd2hpY2ggYWxsb3dzIHRoaXMgbW9kdWxlIHRvIGJlXG4gIC8vIGluamVjdGVkIGVhc2lseSBieSBgYmluL3JlZ2VuZXJhdG9yIC0taW5jbHVkZS1ydW50aW1lIHNjcmlwdC5qc2AuXG4gIHJldHVybiBleHBvcnRzO1xuXG59KFxuICAvLyBJZiB0aGlzIHNjcmlwdCBpcyBleGVjdXRpbmcgYXMgYSBDb21tb25KUyBtb2R1bGUsIHVzZSBtb2R1bGUuZXhwb3J0c1xuICAvLyBhcyB0aGUgcmVnZW5lcmF0b3JSdW50aW1lIG5hbWVzcGFjZS4gT3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBlbXB0eVxuICAvLyBvYmplY3QuIEVpdGhlciB3YXksIHRoZSByZXN1bHRpbmcgb2JqZWN0IHdpbGwgYmUgdXNlZCB0byBpbml0aWFsaXplXG4gIC8vIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgdmFyaWFibGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuXG4gIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgPyBtb2R1bGUuZXhwb3J0cyA6IHt9XG4pKTtcblxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIC8vIFRoaXMgbW9kdWxlIHNob3VsZCBub3QgYmUgcnVubmluZyBpbiBzdHJpY3QgbW9kZSwgc28gdGhlIGFib3ZlXG4gIC8vIGFzc2lnbm1lbnQgc2hvdWxkIGFsd2F5cyB3b3JrIHVubGVzcyBzb21ldGhpbmcgaXMgbWlzY29uZmlndXJlZC4gSnVzdFxuICAvLyBpbiBjYXNlIHJ1bnRpbWUuanMgYWNjaWRlbnRhbGx5IHJ1bnMgaW4gc3RyaWN0IG1vZGUsIHdlIGNhbiBlc2NhcGVcbiAgLy8gc3RyaWN0IG1vZGUgdXNpbmcgYSBnbG9iYWwgRnVuY3Rpb24gY2FsbC4gVGhpcyBjb3VsZCBjb25jZWl2YWJseSBmYWlsXG4gIC8vIGlmIGEgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgZm9yYmlkcyB1c2luZyBGdW5jdGlvbiwgYnV0IGluIHRoYXQgY2FzZVxuICAvLyB0aGUgcHJvcGVyIHNvbHV0aW9uIGlzIHRvIGZpeCB0aGUgYWNjaWRlbnRhbCBzdHJpY3QgbW9kZSBwcm9ibGVtLiBJZlxuICAvLyB5b3UndmUgbWlzY29uZmlndXJlZCB5b3VyIGJ1bmRsZXIgdG8gZm9yY2Ugc3RyaWN0IG1vZGUgYW5kIGFwcGxpZWQgYVxuICAvLyBDU1AgdG8gZm9yYmlkIEZ1bmN0aW9uLCBhbmQgeW91J3JlIG5vdCB3aWxsaW5nIHRvIGZpeCBlaXRoZXIgb2YgdGhvc2VcbiAgLy8gcHJvYmxlbXMsIHBsZWFzZSBkZXRhaWwgeW91ciB1bmlxdWUgcHJlZGljYW1lbnQgaW4gYSBHaXRIdWIgaXNzdWUuXG4gIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///17\n')},function(module,exports){eval("function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTguanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcz80YTRiIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///18\n")},function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* WEBPACK VAR INJECTION */(function(module) {/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6);\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(0);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_1__);\n\n\n/**\r\n * pagination.js 1.5.1\r\n * A jQuery plugin to provide simple yet fully customisable pagination.\r\n * @version 1.5.1\r\n * @author mss\r\n * @url https://github.com/Maxiaoxiang/jQuery-plugins\r\n *\r\n * @调用方法\r\n * $(selector).pagination(option, callback);\r\n * -此处callback是初始化调用,option里的callback是点击页码后调用\r\n *\r\n * -- example --\r\n * $(selector).pagination({\r\n * ... // 配置参数\r\n * callback: function(api) {\r\n * console.log('点击页码调用该回调'); //切换页码时执行一次回调\r\n * }\r\n * }, function(){\r\n * console.log('初始化'); //插件初始化时调用该方法,比如请求第一次接口来初始化分页配置\r\n * });\r\n */\n\n\n(function (factory) {\n if (typeof define === 'function' && (__webpack_require__(21) || false) && !jquery__WEBPACK_IMPORTED_MODULE_1___default.a) {\n // AMD或CMD\n define(['jquery'], factory);\n } else if (( false ? undefined : _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(module)) === 'object' && module.exports) {\n // Node/CommonJS\n module.exports = function (root, jQuery) {\n if (jQuery === undefined) {\n if (typeof window !== 'undefined') {\n jQuery = __webpack_require__(0);\n } else {\n jQuery = __webpack_require__(0)(root);\n }\n }\n\n factory(jQuery);\n return jQuery;\n };\n } else {\n //Browser globals\n factory(jquery__WEBPACK_IMPORTED_MODULE_1___default.a);\n }\n})(function ($) {\n //配置参数\n var defaults = {\n totalData: 0,\n //数据总条数\n showData: 0,\n //每页显示的条数\n pageCount: 9,\n //总页数,默认为9\n current: 1,\n //当前第几页\n prevCls: 'prev',\n //上一页class\n nextCls: 'next',\n //下一页class\n prevContent: '<',\n //上一页内容\n nextContent: '>',\n //下一页内容\n activeCls: 'active',\n //当前页选中状态\n coping: false,\n //首页和尾页\n isHide: false,\n //当前页数为0页或者1页时不显示分页\n homePage: '',\n //首页节点内容\n endPage: '',\n //尾页节点内容\n keepShowPN: false,\n //是否一直显示上一页下一页\n mode: 'unfixed',\n //分页模式,unfixed:不固定页码数量,fixed:固定页码数量\n count: 4,\n //mode为unfixed时显示当前选中页前后页数,mode为fixed显示页码总数\n jump: false,\n //跳转到指定页数\n jumpIptCls: 'jump-ipt',\n //文本框内容\n jumpBtnCls: 'jump-btn',\n //跳转按钮\n jumpBtn: '跳转',\n //跳转按钮文本\n callback: function callback() {} //回调\n\n };\n\n var Pagination = function Pagination(element, options) {\n //全局变量\n var opts = options,\n //配置\n current,\n //当前页\n $document = $(document),\n $obj = $(element); //容器\n\n /**\r\n * 设置总页数\r\n * @param {int} page 页码\r\n * @return opts.pageCount 总页数配置\r\n */\n\n this.setPageCount = function (page) {\n return opts.pageCount = page;\n };\n /**\r\n * 获取总页数\r\n * 如果配置了总条数和每页显示条数,将会自动计算总页数并略过总页数配置,反之\r\n * @return {int} 总页数\r\n */\n\n\n this.getPageCount = function () {\n return opts.totalData && opts.showData ? Math.ceil(parseInt(opts.totalData) / opts.showData) : opts.pageCount;\n };\n /**\r\n * 获取当前页\r\n * @return {int} 当前页码\r\n */\n\n\n this.getCurrent = function () {\n return current;\n };\n /**\r\n * 填充数据\r\n * @param {int} 页码\r\n */\n\n\n this.filling = function (index) {\n var html = '';\n current = parseInt(index) || parseInt(opts.current); //当前页码\n\n var pageCount = this.getPageCount(); //获取的总页数\n\n switch (opts.mode //配置模式\n ) {\n case 'fixed':\n //固定按钮模式\n html += '' + opts.prevContent + '';\n\n if (opts.coping) {\n var home = opts.coping && opts.homePage ? opts.homePage : '1';\n html += '' + home + '';\n }\n\n var start = current > opts.count - 1 ? current + opts.count - 1 > pageCount ? current - (opts.count - (pageCount - current)) : current - 2 : 1;\n var end = current + opts.count - 1 > pageCount ? pageCount : start + opts.count;\n\n for (; start <= end; start++) {\n if (start != current) {\n html += '' + start + '';\n } else {\n html += '' + start + '';\n }\n }\n\n if (opts.coping) {\n var _end = opts.coping && opts.endPage ? opts.endPage : pageCount;\n\n html += '' + _end + '';\n }\n\n html += '' + opts.nextContent + '';\n break;\n\n case 'unfixed':\n //不固定按钮模式\n if (opts.keepShowPN || current > 1) {\n //上一页\n html += '' + opts.prevContent + '';\n } else {\n if (opts.keepShowPN == false) {\n $obj.find('.' + opts.prevCls) && $obj.find('.' + opts.prevCls).remove();\n }\n }\n\n if (current >= opts.count + 2 && current != 1 && pageCount != opts.count) {\n var home = opts.coping && opts.homePage ? opts.homePage : '1';\n html += opts.coping ? '' + home + '...' : '';\n }\n\n var start = current - opts.count <= 1 ? 1 : current - opts.count;\n var end = current + opts.count >= pageCount ? pageCount : current + opts.count;\n\n for (; start <= end; start++) {\n if (start <= pageCount && start >= 1) {\n if (start != current) {\n html += '' + start + '';\n } else {\n html += '' + start + '';\n }\n }\n }\n\n if (current + opts.count < pageCount && current >= 1 && pageCount > opts.count) {\n var end = opts.coping && opts.endPage ? opts.endPage : pageCount;\n html += opts.coping ? '...' + end + '' : '';\n }\n\n if (opts.keepShowPN || current < pageCount) {\n //下一页\n html += '' + opts.nextContent + '';\n } else {\n if (opts.keepShowPN == false) {\n $obj.find('.' + opts.nextCls) && $obj.find('.' + opts.nextCls).remove();\n }\n }\n\n break;\n\n case 'easy':\n //简单模式\n break;\n\n default:\n }\n\n html += opts.jump ? '' + opts.jumpBtn + '' : '';\n $obj.empty().html(html);\n }; //绑定事件\n\n\n this.eventBind = function () {\n var that = this;\n var pageCount = that.getPageCount(); //总页数\n\n var index = 1;\n $obj.off().on('click', 'a', function () {\n if ($(this).hasClass(opts.nextCls)) {\n if ($obj.find('.' + opts.activeCls).text() >= pageCount) {\n $(this).addClass('disabled');\n return false;\n } else {\n index = parseInt($obj.find('.' + opts.activeCls).text()) + 1;\n }\n } else if ($(this).hasClass(opts.prevCls)) {\n if ($obj.find('.' + opts.activeCls).text() <= 1) {\n $(this).addClass('disabled');\n return false;\n } else {\n index = parseInt($obj.find('.' + opts.activeCls).text()) - 1;\n }\n } else if ($(this).hasClass(opts.jumpBtnCls)) {\n if ($obj.find('.' + opts.jumpIptCls).val() !== '') {\n index = parseInt($obj.find('.' + opts.jumpIptCls).val());\n } else {\n return;\n }\n } else {\n index = parseInt($(this).data('page'));\n }\n\n that.filling(index);\n typeof opts.callback === 'function' && opts.callback(that);\n }); //输入跳转的页码\n\n $obj.on('input propertychange', '.' + opts.jumpIptCls, function () {\n var $this = $(this);\n var val = $this.val();\n var reg = /[^\\d]/g;\n if (reg.test(val)) $this.val(val.replace(reg, ''));\n parseInt(val) > pageCount && $this.val(pageCount);\n if (parseInt(val) === 0) $this.val(1); //最小值为1\n }); //回车跳转指定页码\n\n $document.keydown(function (e) {\n if (e.keyCode == 13 && $obj.find('.' + opts.jumpIptCls).val()) {\n var index = parseInt($obj.find('.' + opts.jumpIptCls).val());\n that.filling(index);\n typeof opts.callback === 'function' && opts.callback(that);\n }\n });\n }; //初始化\n\n\n this.init = function () {\n this.filling(opts.current);\n this.eventBind();\n\n if (opts.isHide && this.getPageCount() == '1' || this.getPageCount() == '0') {\n $obj.hide();\n } else {\n $obj.show();\n }\n };\n\n this.init();\n };\n\n $.fn.pagination = function (parameter, callback) {\n if (typeof parameter == 'function') {\n //重载\n callback = parameter;\n parameter = {};\n } else {\n parameter = parameter || {};\n\n callback = callback || function () {};\n }\n\n var options = $.extend({}, defaults, parameter);\n return this.each(function () {\n var pagination = new Pagination(this, options);\n callback(pagination);\n });\n };\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(20)(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvcGFnaW5hdGlvbi5qcz9kMTM5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBwYWdpbmF0aW9uLmpzIDEuNS4xXHJcbiAqIEEgalF1ZXJ5IHBsdWdpbiB0byBwcm92aWRlIHNpbXBsZSB5ZXQgZnVsbHkgY3VzdG9taXNhYmxlIHBhZ2luYXRpb24uXHJcbiAqIEB2ZXJzaW9uIDEuNS4xXHJcbiAqIEBhdXRob3IgbXNzXHJcbiAqIEB1cmwgaHR0cHM6Ly9naXRodWIuY29tL01heGlhb3hpYW5nL2pRdWVyeS1wbHVnaW5zXHJcbiAqXHJcbiAqIEDosIPnlKjmlrnms5VcclxuICogJChzZWxlY3RvcikucGFnaW5hdGlvbihvcHRpb24sIGNhbGxiYWNrKTtcclxuICogLeatpOWkhGNhbGxiYWNr5piv5Yid5aeL5YyW6LCD55So77yMb3B0aW9u6YeM55qEY2FsbGJhY2vmmK/ngrnlh7vpobXnoIHlkI7osIPnlKhcclxuICpcclxuICogLS0gZXhhbXBsZSAtLVxyXG4gKiAkKHNlbGVjdG9yKS5wYWdpbmF0aW9uKHtcclxuICogICAgIC4uLiAvLyDphY3nva7lj4LmlbBcclxuICogICAgIGNhbGxiYWNrOiBmdW5jdGlvbihhcGkpIHtcclxuICogICAgICAgICBjb25zb2xlLmxvZygn54K55Ye76aG156CB6LCD55So6K+l5Zue6LCDJyk7IC8v5YiH5o2i6aG156CB5pe25omn6KGM5LiA5qyh5Zue6LCDXHJcbiAqICAgICB9XHJcbiAqIH0sIGZ1bmN0aW9uKCl7XHJcbiAqICAgICBjb25zb2xlLmxvZygn5Yid5aeL5YyWJyk7IC8v5o+S5Lu25Yid5aeL5YyW5pe26LCD55So6K+l5pa55rOV77yM5q+U5aaC6K+35rGC56ys5LiA5qyh5o6l5Y+j5p2l5Yid5aeL5YyW5YiG6aG16YWN572uXHJcbiAqIH0pO1xyXG4gKi9cclxuaW1wb3J0IGpRdWVyeSBmcm9tICdqcXVlcnknXHJcbjsoZnVuY3Rpb24oZmFjdG9yeSkge1xyXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIChkZWZpbmUuYW1kIHx8IGRlZmluZS5jbWQpICYmICFqUXVlcnkpIHtcclxuICAgIC8vIEFNROaIlkNNRFxyXG4gICAgZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpXHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xyXG4gICAgLy8gTm9kZS9Db21tb25KU1xyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihyb290LCBqUXVlcnkpIHtcclxuICAgICAgaWYgKGpRdWVyeSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICBqUXVlcnkgPSByZXF1aXJlKCdqcXVlcnknKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBqUXVlcnkgPSByZXF1aXJlKCdqcXVlcnknKShyb290KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBmYWN0b3J5KGpRdWVyeSlcclxuICAgICAgcmV0dXJuIGpRdWVyeVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICAvL0Jyb3dzZXIgZ2xvYmFsc1xyXG4gICAgZmFjdG9yeShqUXVlcnkpXHJcbiAgfVxyXG59KShmdW5jdGlvbigkKSB7XHJcbiAgLy/phY3nva7lj4LmlbBcclxuICB2YXIgZGVmYXVsdHMgPSB7XHJcbiAgICB0b3RhbERhdGE6IDAsIC8v5pWw5o2u5oC75p2h5pWwXHJcbiAgICBzaG93RGF0YTogMCwgLy/mr4/pobXmmL7npLrnmoTmnaHmlbBcclxuICAgIHBhZ2VDb3VudDogOSwgLy/mgLvpobXmlbAs6buY6K6k5Li6OVxyXG4gICAgY3VycmVudDogMSwgLy/lvZPliY3nrKzlh6DpobVcclxuICAgIHByZXZDbHM6ICdwcmV2JywgLy/kuIrkuIDpobVjbGFzc1xyXG4gICAgbmV4dENsczogJ25leHQnLCAvL+S4i+S4gOmhtWNsYXNzXHJcbiAgICBwcmV2Q29udGVudDogJzwnLCAvL+S4iuS4gOmhteWGheWuuVxyXG4gICAgbmV4dENvbnRlbnQ6ICc+JywgLy/kuIvkuIDpobXlhoXlrrlcclxuICAgIGFjdGl2ZUNsczogJ2FjdGl2ZScsIC8v5b2T5YmN6aG16YCJ5Lit54q25oCBXHJcbiAgICBjb3Bpbmc6IGZhbHNlLCAvL+mmlumhteWSjOWwvumhtVxyXG4gICAgaXNIaWRlOiBmYWxzZSwgLy/lvZPliY3pobXmlbDkuLow6aG15oiW6ICFMemhteaXtuS4jeaYvuekuuWIhumhtVxyXG4gICAgaG9tZVBhZ2U6ICcnLCAvL+mmlumhteiKgueCueWGheWuuVxyXG4gICAgZW5kUGFnZTogJycsIC8v5bC+6aG16IqC54K55YaF5a65XHJcbiAgICBrZWVwU2hvd1BOOiBmYWxzZSwgLy/mmK/lkKbkuIDnm7TmmL7npLrkuIrkuIDpobXkuIvkuIDpobVcclxuICAgIG1vZGU6ICd1bmZpeGVkJywgLy/liIbpobXmqKHlvI/vvIx1bmZpeGVk77ya5LiN5Zu65a6a6aG156CB5pWw6YeP77yMZml4ZWTvvJrlm7rlrprpobXnoIHmlbDph49cclxuICAgIGNvdW50OiA0LCAvL21vZGXkuLp1bmZpeGVk5pe25pi+56S65b2T5YmN6YCJ5Lit6aG15YmN5ZCO6aG15pWw77yMbW9kZeS4umZpeGVk5pi+56S66aG156CB5oC75pWwXHJcbiAgICBqdW1wOiBmYWxzZSwgLy/ot7PovazliLDmjIflrprpobXmlbBcclxuICAgIGp1bXBJcHRDbHM6ICdqdW1wLWlwdCcsIC8v5paH5pys5qGG5YaF5a65XHJcbiAgICBqdW1wQnRuQ2xzOiAnanVtcC1idG4nLCAvL+i3s+i9rOaMiemSrlxyXG4gICAganVtcEJ0bjogJ+i3s+i9rCcsIC8v6Lez6L2s5oyJ6ZKu5paH5pysXHJcbiAgICBjYWxsYmFjazogZnVuY3Rpb24oKSB7fSAvL+Wbnuiwg1xyXG4gIH1cclxuXHJcbiAgdmFyIFBhZ2luYXRpb24gPSBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKSB7XHJcbiAgICAvL+WFqOWxgOWPmOmHj1xyXG4gICAgdmFyIG9wdHMgPSBvcHRpb25zLCAvL+mFjee9rlxyXG4gICAgICBjdXJyZW50LCAvL+W9k+WJjemhtVxyXG4gICAgICAkZG9jdW1lbnQgPSAkKGRvY3VtZW50KSxcclxuICAgICAgJG9iaiA9ICQoZWxlbWVudCkgLy/lrrnlmahcclxuXHJcbiAgICAvKipcclxuICAgICAqIOiuvue9ruaAu+mhteaVsFxyXG4gICAgICogQHBhcmFtIHtpbnR9IHBhZ2Ug6aG156CBXHJcbiAgICAgKiBAcmV0dXJuIG9wdHMucGFnZUNvdW50IOaAu+mhteaVsOmFjee9rlxyXG4gICAgICovXHJcbiAgICB0aGlzLnNldFBhZ2VDb3VudCA9IGZ1bmN0aW9uKHBhZ2UpIHtcclxuICAgICAgcmV0dXJuIChvcHRzLnBhZ2VDb3VudCA9IHBhZ2UpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDojrflj5bmgLvpobXmlbBcclxuICAgICAqIOWmguaenOmFjee9ruS6huaAu+adoeaVsOWSjOavj+mhteaYvuekuuadoeaVsO+8jOWwhuS8muiHquWKqOiuoeeul+aAu+mhteaVsOW5tueVpei/h+aAu+mhteaVsOmFjee9ru+8jOWPjeS5i1xyXG4gICAgICogQHJldHVybiB7aW50fSDmgLvpobXmlbBcclxuICAgICAqL1xyXG4gICAgdGhpcy5nZXRQYWdlQ291bnQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIG9wdHMudG90YWxEYXRhICYmIG9wdHMuc2hvd0RhdGFcclxuICAgICAgICA/IE1hdGguY2VpbChwYXJzZUludChvcHRzLnRvdGFsRGF0YSkgLyBvcHRzLnNob3dEYXRhKVxyXG4gICAgICAgIDogb3B0cy5wYWdlQ291bnRcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPluW9k+WJjemhtVxyXG4gICAgICogQHJldHVybiB7aW50fSDlvZPliY3pobXnoIFcclxuICAgICAqL1xyXG4gICAgdGhpcy5nZXRDdXJyZW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBjdXJyZW50XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDloavlhYXmlbDmja5cclxuICAgICAqIEBwYXJhbSB7aW50fSDpobXnoIFcclxuICAgICAqL1xyXG4gICAgdGhpcy5maWxsaW5nID0gZnVuY3Rpb24oaW5kZXgpIHtcclxuICAgICAgdmFyIGh0bWwgPSAnJ1xyXG4gICAgICBjdXJyZW50ID0gcGFyc2VJbnQoaW5kZXgpIHx8IHBhcnNlSW50KG9wdHMuY3VycmVudCkgLy/lvZPliY3pobXnoIFcclxuICAgICAgdmFyIHBhZ2VDb3VudCA9IHRoaXMuZ2V0UGFnZUNvdW50KCkgLy/ojrflj5bnmoTmgLvpobXmlbBcclxuICAgICAgc3dpdGNoIChcclxuICAgICAgICBvcHRzLm1vZGUgLy/phY3nva7mqKHlvI9cclxuICAgICAgKSB7XHJcbiAgICAgICAgY2FzZSAnZml4ZWQnOiAvL+WbuuWumuaMiemSruaooeW8j1xyXG4gICAgICAgICAgaHRtbCArPVxyXG4gICAgICAgICAgICAnPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiJyArXHJcbiAgICAgICAgICAgIG9wdHMucHJldkNscyArXHJcbiAgICAgICAgICAgICdcIj4nICtcclxuICAgICAgICAgICAgb3B0cy5wcmV2Q29udGVudCArXHJcbiAgICAgICAgICAgICc8L2E+J1xyXG4gICAgICAgICAgaWYgKG9wdHMuY29waW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBob21lID0gb3B0cy5jb3BpbmcgJiYgb3B0cy5ob21lUGFnZSA/IG9wdHMuaG9tZVBhZ2UgOiAnMSdcclxuICAgICAgICAgICAgaHRtbCArPSAnPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGRhdGEtcGFnZT1cIjFcIj4nICsgaG9tZSArICc8L2E+J1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFyIHN0YXJ0ID1cclxuICAgICAgICAgICAgY3VycmVudCA+IG9wdHMuY291bnQgLSAxXHJcbiAgICAgICAgICAgICAgPyBjdXJyZW50ICsgb3B0cy5jb3VudCAtIDEgPiBwYWdlQ291bnRcclxuICAgICAgICAgICAgICAgID8gY3VycmVudCAtIChvcHRzLmNvdW50IC0gKHBhZ2VDb3VudCAtIGN1cnJlbnQpKVxyXG4gICAgICAgICAgICAgICAgOiBjdXJyZW50IC0gMlxyXG4gICAgICAgICAgICAgIDogMVxyXG4gICAgICAgICAgdmFyIGVuZCA9XHJcbiAgICAgICAgICAgIGN1cnJlbnQgKyBvcHRzLmNvdW50IC0gMSA+IHBhZ2VDb3VudFxyXG4gICAgICAgICAgICAgID8gcGFnZUNvdW50XHJcbiAgICAgICAgICAgICAgOiBzdGFydCArIG9wdHMuY291bnRcclxuICAgICAgICAgIGZvciAoOyBzdGFydCA8PSBlbmQ7IHN0YXJ0KyspIHtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICBodG1sICs9XHJcbiAgICAgICAgICAgICAgICAnPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGRhdGEtcGFnZT1cIicgK1xyXG4gICAgICAgICAgICAgICAgc3RhcnQgK1xyXG4gICAgICAgICAgICAgICAgJ1wiPicgK1xyXG4gICAgICAgICAgICAgICAgc3RhcnQgK1xyXG4gICAgICAgICAgICAgICAgJzwvYT4nXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaHRtbCArPVxyXG4gICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiJyArIG9wdHMuYWN0aXZlQ2xzICsgJ1wiPicgKyBzdGFydCArICc8L3NwYW4+J1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob3B0cy5jb3BpbmcpIHtcclxuICAgICAgICAgICAgdmFyIF9lbmQgPSBvcHRzLmNvcGluZyAmJiBvcHRzLmVuZFBhZ2UgPyBvcHRzLmVuZFBhZ2UgOiBwYWdlQ291bnRcclxuICAgICAgICAgICAgaHRtbCArPVxyXG4gICAgICAgICAgICAgICc8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgZGF0YS1wYWdlPVwiJyArXHJcbiAgICAgICAgICAgICAgcGFnZUNvdW50ICtcclxuICAgICAgICAgICAgICAnXCI+JyArXHJcbiAgICAgICAgICAgICAgX2VuZCArXHJcbiAgICAgICAgICAgICAgJzwvYT4nXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBodG1sICs9XHJcbiAgICAgICAgICAgICc8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCInICtcclxuICAgICAgICAgICAgb3B0cy5uZXh0Q2xzICtcclxuICAgICAgICAgICAgJ1wiPicgK1xyXG4gICAgICAgICAgICBvcHRzLm5leHRDb250ZW50ICtcclxuICAgICAgICAgICAgJzwvYT4nXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgJ3VuZml4ZWQnOiAvL+S4jeWbuuWumuaMiemSruaooeW8j1xyXG4gICAgICAgICAgaWYgKG9wdHMua2VlcFNob3dQTiB8fCBjdXJyZW50ID4gMSkge1xyXG4gICAgICAgICAgICAvL+S4iuS4gOmhtVxyXG4gICAgICAgICAgICBodG1sICs9XHJcbiAgICAgICAgICAgICAgJzxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cIicgK1xyXG4gICAgICAgICAgICAgIG9wdHMucHJldkNscyArXHJcbiAgICAgICAgICAgICAgJ1wiPicgK1xyXG4gICAgICAgICAgICAgIG9wdHMucHJldkNvbnRlbnQgK1xyXG4gICAgICAgICAgICAgICc8L2E+J1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG9wdHMua2VlcFNob3dQTiA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICRvYmouZmluZCgnLicgKyBvcHRzLnByZXZDbHMpICYmXHJcbiAgICAgICAgICAgICAgICAkb2JqLmZpbmQoJy4nICsgb3B0cy5wcmV2Q2xzKS5yZW1vdmUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGN1cnJlbnQgPj0gb3B0cy5jb3VudCArIDIgJiZcclxuICAgICAgICAgICAgY3VycmVudCAhPSAxICYmXHJcbiAgICAgICAgICAgIHBhZ2VDb3VudCAhPSBvcHRzLmNvdW50XHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFyIGhvbWUgPSBvcHRzLmNvcGluZyAmJiBvcHRzLmhvbWVQYWdlID8gb3B0cy5ob21lUGFnZSA6ICcxJ1xyXG4gICAgICAgICAgICBodG1sICs9IG9wdHMuY29waW5nXHJcbiAgICAgICAgICAgICAgPyAnPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGRhdGEtcGFnZT1cIjFcIj4nICtcclxuICAgICAgICAgICAgICAgIGhvbWUgK1xyXG4gICAgICAgICAgICAgICAgJzwvYT48c3Bhbj4uLi48L3NwYW4+J1xyXG4gICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHZhciBzdGFydCA9IGN1cnJlbnQgLSBvcHRzLmNvdW50IDw9IDEgPyAxIDogY3VycmVudCAtIG9wdHMuY291bnRcclxuICAgICAgICAgIHZhciBlbmQgPVxyXG4gICAgICAgICAgICBjdXJyZW50ICsgb3B0cy5jb3VudCA+PSBwYWdlQ291bnQgPyBwYWdlQ291bnQgOiBjdXJyZW50ICsgb3B0cy5jb3VudFxyXG4gICAgICAgICAgZm9yICg7IHN0YXJ0IDw9IGVuZDsgc3RhcnQrKykge1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPD0gcGFnZUNvdW50ICYmIHN0YXJ0ID49IDEpIHtcclxuICAgICAgICAgICAgICBpZiAoc3RhcnQgIT0gY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgaHRtbCArPVxyXG4gICAgICAgICAgICAgICAgICAnPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGRhdGEtcGFnZT1cIicgK1xyXG4gICAgICAgICAgICAgICAgICBzdGFydCArXHJcbiAgICAgICAgICAgICAgICAgICdcIj4nICtcclxuICAgICAgICAgICAgICAgICAgc3RhcnQgK1xyXG4gICAgICAgICAgICAgICAgICAnPC9hPidcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaHRtbCArPVxyXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCInICsgb3B0cy5hY3RpdmVDbHMgKyAnXCI+JyArIHN0YXJ0ICsgJzwvc3Bhbj4nXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGN1cnJlbnQgKyBvcHRzLmNvdW50IDwgcGFnZUNvdW50ICYmXHJcbiAgICAgICAgICAgIGN1cnJlbnQgPj0gMSAmJlxyXG4gICAgICAgICAgICBwYWdlQ291bnQgPiBvcHRzLmNvdW50XHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFyIGVuZCA9IG9wdHMuY29waW5nICYmIG9wdHMuZW5kUGFnZSA/IG9wdHMuZW5kUGFnZSA6IHBhZ2VDb3VudFxyXG4gICAgICAgICAgICBodG1sICs9IG9wdHMuY29waW5nXHJcbiAgICAgICAgICAgICAgPyAnPHNwYW4+Li4uPC9zcGFuPjxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBkYXRhLXBhZ2U9XCInICtcclxuICAgICAgICAgICAgICAgIHBhZ2VDb3VudCArXHJcbiAgICAgICAgICAgICAgICAnXCI+JyArXHJcbiAgICAgICAgICAgICAgICBlbmQgK1xyXG4gICAgICAgICAgICAgICAgJzwvYT4nXHJcbiAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG9wdHMua2VlcFNob3dQTiB8fCBjdXJyZW50IDwgcGFnZUNvdW50KSB7XHJcbiAgICAgICAgICAgIC8v5LiL5LiA6aG1XHJcbiAgICAgICAgICAgIGh0bWwgKz1cclxuICAgICAgICAgICAgICAnPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiJyArXHJcbiAgICAgICAgICAgICAgb3B0cy5uZXh0Q2xzICtcclxuICAgICAgICAgICAgICAnXCI+JyArXHJcbiAgICAgICAgICAgICAgb3B0cy5uZXh0Q29udGVudCArXHJcbiAgICAgICAgICAgICAgJzwvYT4nXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAob3B0cy5rZWVwU2hvd1BOID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgJG9iai5maW5kKCcuJyArIG9wdHMubmV4dENscykgJiZcclxuICAgICAgICAgICAgICAgICRvYmouZmluZCgnLicgKyBvcHRzLm5leHRDbHMpLnJlbW92ZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnZWFzeSc6IC8v566A5Y2V5qih5byPXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgIH1cclxuICAgICAgaHRtbCArPSBvcHRzLmp1bXBcclxuICAgICAgICA/ICc8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIicgK1xyXG4gICAgICAgICAgb3B0cy5qdW1wSXB0Q2xzICtcclxuICAgICAgICAgICdcIj48YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCInICtcclxuICAgICAgICAgIG9wdHMuanVtcEJ0bkNscyArXHJcbiAgICAgICAgICAnXCI+JyArXHJcbiAgICAgICAgICBvcHRzLmp1bXBCdG4gK1xyXG4gICAgICAgICAgJzwvYT4nXHJcbiAgICAgICAgOiAnJ1xyXG4gICAgICAkb2JqLmVtcHR5KCkuaHRtbChodG1sKVxyXG4gICAgfVxyXG5cclxuICAgIC8v57uR5a6a5LqL5Lu2XHJcbiAgICB0aGlzLmV2ZW50QmluZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgdGhhdCA9IHRoaXNcclxuICAgICAgdmFyIHBhZ2VDb3VudCA9IHRoYXQuZ2V0UGFnZUNvdW50KCkgLy/mgLvpobXmlbBcclxuICAgICAgdmFyIGluZGV4ID0gMVxyXG4gICAgICAkb2JqLm9mZigpLm9uKCdjbGljaycsICdhJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3Mob3B0cy5uZXh0Q2xzKSkge1xyXG4gICAgICAgICAgaWYgKCRvYmouZmluZCgnLicgKyBvcHRzLmFjdGl2ZUNscykudGV4dCgpID49IHBhZ2VDb3VudCkge1xyXG4gICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdkaXNhYmxlZCcpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW5kZXggPSBwYXJzZUludCgkb2JqLmZpbmQoJy4nICsgb3B0cy5hY3RpdmVDbHMpLnRleHQoKSkgKyAxXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICgkKHRoaXMpLmhhc0NsYXNzKG9wdHMucHJldkNscykpIHtcclxuICAgICAgICAgIGlmICgkb2JqLmZpbmQoJy4nICsgb3B0cy5hY3RpdmVDbHMpLnRleHQoKSA8PSAxKSB7XHJcbiAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2Rpc2FibGVkJylcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbmRleCA9IHBhcnNlSW50KCRvYmouZmluZCgnLicgKyBvcHRzLmFjdGl2ZUNscykudGV4dCgpKSAtIDFcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKCQodGhpcykuaGFzQ2xhc3Mob3B0cy5qdW1wQnRuQ2xzKSkge1xyXG4gICAgICAgICAgaWYgKCRvYmouZmluZCgnLicgKyBvcHRzLmp1bXBJcHRDbHMpLnZhbCgpICE9PSAnJykge1xyXG4gICAgICAgICAgICBpbmRleCA9IHBhcnNlSW50KCRvYmouZmluZCgnLicgKyBvcHRzLmp1bXBJcHRDbHMpLnZhbCgpKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGluZGV4ID0gcGFyc2VJbnQoJCh0aGlzKS5kYXRhKCdwYWdlJykpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoYXQuZmlsbGluZyhpbmRleClcclxuICAgICAgICB0eXBlb2Ygb3B0cy5jYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyAmJiBvcHRzLmNhbGxiYWNrKHRoYXQpXHJcbiAgICAgIH0pXHJcbiAgICAgIC8v6L6T5YWl6Lez6L2s55qE6aG156CBXHJcbiAgICAgICRvYmoub24oJ2lucHV0IHByb3BlcnR5Y2hhbmdlJywgJy4nICsgb3B0cy5qdW1wSXB0Q2xzLCBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpXHJcbiAgICAgICAgdmFyIHZhbCA9ICR0aGlzLnZhbCgpXHJcbiAgICAgICAgdmFyIHJlZyA9IC9bXlxcZF0vZ1xyXG4gICAgICAgIGlmIChyZWcudGVzdCh2YWwpKSAkdGhpcy52YWwodmFsLnJlcGxhY2UocmVnLCAnJykpXHJcbiAgICAgICAgcGFyc2VJbnQodmFsKSA+IHBhZ2VDb3VudCAmJiAkdGhpcy52YWwocGFnZUNvdW50KVxyXG4gICAgICAgIGlmIChwYXJzZUludCh2YWwpID09PSAwKSAkdGhpcy52YWwoMSkgLy/mnIDlsI/lgLzkuLoxXHJcbiAgICAgIH0pXHJcbiAgICAgIC8v5Zue6L2m6Lez6L2s5oyH5a6a6aG156CBXHJcbiAgICAgICRkb2N1bWVudC5rZXlkb3duKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzICYmICRvYmouZmluZCgnLicgKyBvcHRzLmp1bXBJcHRDbHMpLnZhbCgpKSB7XHJcbiAgICAgICAgICB2YXIgaW5kZXggPSBwYXJzZUludCgkb2JqLmZpbmQoJy4nICsgb3B0cy5qdW1wSXB0Q2xzKS52YWwoKSlcclxuICAgICAgICAgIHRoYXQuZmlsbGluZyhpbmRleClcclxuICAgICAgICAgIHR5cGVvZiBvcHRzLmNhbGxiYWNrID09PSAnZnVuY3Rpb24nICYmIG9wdHMuY2FsbGJhY2sodGhhdClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLy/liJ3lp4vljJZcclxuICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICB0aGlzLmZpbGxpbmcob3B0cy5jdXJyZW50KVxyXG4gICAgICB0aGlzLmV2ZW50QmluZCgpXHJcbiAgICAgIGlmIChcclxuICAgICAgICAob3B0cy5pc0hpZGUgJiYgdGhpcy5nZXRQYWdlQ291bnQoKSA9PSAnMScpIHx8XHJcbiAgICAgICAgdGhpcy5nZXRQYWdlQ291bnQoKSA9PSAnMCdcclxuICAgICAgKSB7XHJcbiAgICAgICAgJG9iai5oaWRlKClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkb2JqLnNob3coKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXQoKVxyXG4gIH1cclxuXHJcbiAgJC5mbi5wYWdpbmF0aW9uID0gZnVuY3Rpb24ocGFyYW1ldGVyLCBjYWxsYmFjaykge1xyXG4gICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXIgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAvL+mHjei9vVxyXG4gICAgICBjYWxsYmFjayA9IHBhcmFtZXRlclxyXG4gICAgICBwYXJhbWV0ZXIgPSB7fVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFyYW1ldGVyID0gcGFyYW1ldGVyIHx8IHt9XHJcbiAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fVxyXG4gICAgfVxyXG4gICAgdmFyIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgZGVmYXVsdHMsIHBhcmFtZXRlcilcclxuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciBwYWdpbmF0aW9uID0gbmV3IFBhZ2luYXRpb24odGhpcywgb3B0aW9ucylcclxuICAgICAgY2FsbGJhY2socGFnaW5hdGlvbilcclxuICAgIH0pXHJcbiAgfVxyXG59KVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBdEJBO0FBQ0E7QUF1QkE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBRUE7QUFGQTtBQUNBO0FBSUE7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7O0FBS0E7QUFDQTtBQUdBO0FBRUE7Ozs7OztBQUlBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFNQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBTUE7QUFDQTtBQUFBO0FBTUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUtBO0FBQ0E7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUtBO0FBQ0E7QUFPQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFqSUE7QUFDQTtBQWtJQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///19\n")},function(module,exports){eval('module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, "loaded", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, "id", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, "exports", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjAuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vaGFybW9ueS1tb2R1bGUuanM/ODJiMCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9yaWdpbmFsTW9kdWxlKSB7XG5cdGlmICghb3JpZ2luYWxNb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0dmFyIG1vZHVsZSA9IE9iamVjdC5jcmVhdGUob3JpZ2luYWxNb2R1bGUpO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImV4cG9ydHNcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///20\n')},function(module,exports){eval("/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n\n/* WEBPACK VAR INJECTION */}.call(this, {}))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjEuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanM/MDA4NiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICovXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///21\n")},function(module,exports,__webpack_require__){eval("// extracted by mini-css-extract-plugin//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvcmVwb3J0LnNjc3M/ZWY3NCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///22\n")},function(module,__webpack_exports__,__webpack_require__){"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/toConsumableArray.js\nvar toConsumableArray = __webpack_require__(7);\nvar toConsumableArray_default = /*#__PURE__*/__webpack_require__.n(toConsumableArray);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/assertThisInitialized.js\nvar assertThisInitialized = __webpack_require__(9);\nvar assertThisInitialized_default = /*#__PURE__*/__webpack_require__.n(assertThisInitialized);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/regenerator/index.js\nvar regenerator = __webpack_require__(3);\nvar regenerator_default = /*#__PURE__*/__webpack_require__.n(regenerator);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/asyncToGenerator.js\nvar asyncToGenerator = __webpack_require__(5);\nvar asyncToGenerator_default = /*#__PURE__*/__webpack_require__.n(asyncToGenerator);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/defineProperty.js\nvar defineProperty = __webpack_require__(1);\nvar defineProperty_default = /*#__PURE__*/__webpack_require__.n(defineProperty);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/createClass.js\nvar createClass = __webpack_require__(4);\nvar createClass_default = /*#__PURE__*/__webpack_require__.n(createClass);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/inherits.js\nvar inherits = __webpack_require__(8);\nvar inherits_default = /*#__PURE__*/__webpack_require__.n(inherits);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\nvar possibleConstructorReturn = __webpack_require__(12);\nvar possibleConstructorReturn_default = /*#__PURE__*/__webpack_require__.n(possibleConstructorReturn);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/getPrototypeOf.js\nvar getPrototypeOf = __webpack_require__(10);\nvar getPrototypeOf_default = /*#__PURE__*/__webpack_require__.n(getPrototypeOf);\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/classCallCheck.js\nvar classCallCheck = __webpack_require__(2);\nvar classCallCheck_default = /*#__PURE__*/__webpack_require__.n(classCallCheck);\n\n// EXTERNAL MODULE: external \"jQuery\"\nvar external_jQuery_ = __webpack_require__(0);\nvar external_jQuery_default = /*#__PURE__*/__webpack_require__.n(external_jQuery_);\n\n// CONCATENATED MODULE: ./src/request.js\n\n\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_default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n\n\nvar request_request = function request(data) {\n return new Promise(function (resolve) {\n external_jQuery_default.a.ajax(_objectSpread(_objectSpread({}, data), {}, {\n success: function success(res) {\n resolve(res);\n }\n }));\n });\n};\n\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/typeof.js\nvar helpers_typeof = __webpack_require__(6);\nvar typeof_default = /*#__PURE__*/__webpack_require__.n(helpers_typeof);\n\n// CONCATENATED MODULE: ./src/utils.js\n\n\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\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 _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\nvar IS_BATCHDOWNLOAD = ~location.href.indexOf('export/batch'); //是否是第三方的单个下载\n\nvar IS_THIDRD = ~location.href.indexOf('duo');\n\nString.prototype.substitute = function (data) {\n if (data && typeof_default()(data) == 'object') {\n return this.replace(/\\{([^{}]+)\\}/g, function (match, key) {\n var value = data[key];\n return value !== undefined ? '' + value : '';\n });\n } else {\n return this.toString();\n }\n};\n\nfunction mix() {\n for (var _len = arguments.length, mixins = new Array(_len), _key = 0; _key < _len; _key++) {\n mixins[_key] = arguments[_key];\n }\n\n var Mix = function Mix() {\n classCallCheck_default()(this, Mix);\n\n var _iterator = _createForOfIteratorHelper(mixins),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var mixin = _step.value;\n copyProperties(this, new mixin()); // 拷贝实例属性\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n };\n\n for (var _i = 0, _mixins = mixins; _i < _mixins.length; _i++) {\n var mixin = _mixins[_i];\n copyProperties(Mix, mixin); // 拷贝静态属性\n\n copyProperties(Mix.prototype, mixin.prototype); // 拷贝原型属性\n }\n\n return Mix;\n}\n\nfunction copyProperties(target, source) {\n var _iterator2 = _createForOfIteratorHelper(Reflect.ownKeys(source)),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var key = _step2.value;\n\n if (key !== 'constructor' && key !== 'prototype' && key !== 'name') {\n var desc = Object.getOwnPropertyDescriptor(source, key);\n Object.defineProperty(target, key, desc);\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n}\n\nfunction simpleCopy(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\n\n\n// CONCATENATED MODULE: ./src/api.js\n\n\nvar domain = '';\nvar token = '';\n\nif (false) {} else {\n window.hgc_layer = layer;\n}\n\n\n\n\nvar api_Api = /*#__PURE__*/function () {\n function Api() {\n classCallCheck_default()(this, Api);\n\n this.getScorePartApi = domain + '/index.php/export/GetSection' + token;\n this.getExamClassApi = domain + '/index.php/export/getExamClass' + token;\n this.getDownloadProgressApi = domain + '/index.php/export/downloadProgress' + token;\n this.delTaskApi = domain + '/index.php/export/deleteTask' + token;\n this.downLoadTeacherUrl = domain + '/export/down_load?examId=';\n this.downLoadErrorTenUrl = domain + '/export/download?exam_id=';\n this.batchDownLoadApi = domain + '/index.php/export/pushTask' + token;\n this.singleDownLoadApi = domain + '/index.php/export/ajax_down' + token;\n this.judgeTeacherForSubject8 = domain + '/teaching/index' + token;\n this.judgeTeacherForSubjectOther = domain + '/export/academicr' + token;\n }\n\n createClass_default()(Api, [{\n key: \"getScorePart\",\n value: function getScorePart(examId) {\n return request_request({\n url: this.getScorePartApi,\n data: {\n exam_id: examId\n },\n method: 'POST'\n });\n }\n }, {\n key: \"getExamClass\",\n value: function getExamClass(examId) {\n return request_request({\n url: this.getExamClassApi,\n data: {\n isThird: 0,\n examGroupId: examId\n },\n method: 'POST'\n });\n }\n }, {\n key: \"getDownloadProgress\",\n value: function getDownloadProgress(params) {\n params = params || {};\n params.pageLimit = 10;\n console.log(params);\n return request_request({\n url: this.getDownloadProgressApi,\n data: params,\n method: 'POST'\n });\n }\n }, {\n key: \"delTask\",\n value: function delTask(params) {\n return request_request({\n url: this.delTaskApi,\n data: params,\n method: 'POST'\n });\n }\n }, {\n key: \"downLoadTeacher\",\n value: function downLoadTeacher(examId) {\n location.href = this.downLoadTeacherUrl + examId;\n }\n }, {\n key: \"downLoadErrorTen\",\n value: function downLoadErrorTen(examId) {\n location.href = this.downLoadErrorTenUrl + examId;\n }\n }, {\n key: \"batchDownLoad\",\n value: function batchDownLoad(params) {\n return request_request({\n url: this.batchDownLoadApi,\n data: params,\n method: 'POST'\n });\n }\n }, {\n key: \"singleDownLoad\",\n value: function singleDownLoad(params) {\n return request_request({\n url: this.singleDownLoadApi,\n data: params,\n method: 'POST'\n });\n } // 教学宝是否可以下载\n\n }, {\n key: \"judgeTeacherDownLoad\",\n value: function judgeTeacherDownLoad(params) {\n var classId = params.classId,\n examId = params.examId,\n subjectId = params.subjectId;\n var url = this.judgeTeacherForSubjectOther; //批量下载的时候过滤条件不同\n\n var filterConditions = IS_THIDRD ? '8,9,12,13,14,15,16,17,18,19' : '8';\n\n if (~filterConditions.indexOf(subjectId)) {\n url = this.judgeTeacherForSubject8;\n }\n\n return request_request({\n url: url,\n data: {\n classId: classId,\n examId: examId\n },\n method: 'GET'\n });\n }\n }]);\n\n return Api;\n}();\n\n/* harmony default export */ var api = (api_Api);\n// CONCATENATED MODULE: ./src/component.js\n\n\n//复选\n\n\nvar component_CheckBoxItem = /*#__PURE__*/function () {\n function CheckBoxItem($checkBox, allFn, singleFn) {\n classCallCheck_default()(this, CheckBoxItem);\n\n this.allFn = allFn || function () {};\n\n this.singleFn = singleFn || function () {};\n\n this.$checBox = $checkBox; //除了 全选 禁用按钮以外的其他按钮的集合\n\n this.totalCount = this.$checBox.find('.h_checkItem:not(\".checkAll\"):not(\".disabled\")').length;\n this.checkedItemsCount = 0;\n this.bindEvent();\n }\n\n createClass_default()(CheckBoxItem, [{\n key: \"bindEvent\",\n value: function bindEvent() {\n var self = this;\n this.$checBox.on('click', '.h_checkItem', function () {\n var isDisabled = external_jQuery_default()(this).hasClass('disabled');\n var isNotSel = external_jQuery_default()(this).hasClass('notSel');\n var isChecked = external_jQuery_default()(this).hasClass('checked');\n var isCheckAllEl = external_jQuery_default()(this).hasClass('checkAll');\n if (isDisabled || isNotSel) return;\n external_jQuery_default()(this)[isChecked ? 'removeClass' : 'addClass']('checked');\n\n if (isCheckAllEl) {\n var checkItems = external_jQuery_default()(this).siblings('.h_checkItem');\n checkItems[isChecked ? 'removeClass' : 'addClass']('checked');\n self.checkedItemsCount = isChecked ? 0 : checkItems.length;\n self.allFn(external_jQuery_default()(this), !isChecked);\n } else {\n var checkAll = external_jQuery_default()(this).siblings('.checkAll');\n !isChecked ? self.checkedItemsCount++ : self.checkedItemsCount--;\n var isCheckAllStatus = self.checkedItemsCount >= self.totalCount;\n checkAll[isCheckAllStatus ? 'addClass' : 'removeClass']('checked');\n self.singleFn(external_jQuery_default()(this), !isChecked);\n }\n });\n }\n }]);\n\n return CheckBoxItem;\n}(); // 单选\n\n\nvar component_RadioBoxItem = /*#__PURE__*/function () {\n function RadioBoxItem($radioBox, fn) {\n classCallCheck_default()(this, RadioBoxItem);\n\n this.$radioBox = $radioBox;\n this.cb = fn;\n this.bindEvent();\n }\n\n createClass_default()(RadioBoxItem, [{\n key: \"bindEvent\",\n value: function bindEvent() {\n var self = this;\n this.$radioBox.on('click', '.h_radioItem', function () {\n var isNotSel = external_jQuery_default()(this).hasClass('notSel');\n if (isNotSel) return;\n external_jQuery_default()(this).addClass('checked').siblings('.h_radioItem').removeClass('checked');\n self.cb && self.cb(external_jQuery_default()(this));\n });\n }\n }]);\n\n return RadioBoxItem;\n}(); // 切换\n\n\nvar component_Switch = /*#__PURE__*/function () {\n function Switch($switch, fn, defaultstatus) {\n classCallCheck_default()(this, Switch);\n\n this.$switch = $switch;\n this.status = defaultstatus || false;\n\n this.cb = fn || function () {};\n\n this.bindEvent();\n }\n\n createClass_default()(Switch, [{\n key: \"bindEvent\",\n value: function bindEvent() {\n var self = this;\n this.$switch.click(function () {\n external_jQuery_default()(this).toggleClass('open');\n self.status = !self.status;\n self.cb && self.cb(self.status);\n });\n }\n }]);\n\n return Switch;\n}();\n\n\n// EXTERNAL MODULE: ./src/pagination.js\nvar pagination = __webpack_require__(19);\n\n// EXTERNAL MODULE: ./src/report.scss\nvar report = __webpack_require__(22);\n\n// CONCATENATED MODULE: ./src/template.js\nvar downLoadSettingModuleTpl = \"
\\n
\\n
\\u4E0B\\u8F7D\\u62A5\\u8868 X
\\n
\\n
\\n
\\u4E0B\\u8F7D\\u5BF9\\u8C61:\\n
\\n
\\n
\\n
\\n
\\u62A5\\u8868\\u5185\\u5BB9:\\n
\\n
\\n
\\n
\\n
\\u8003\\u8BD5\\u73ED\\u7EA7:\\n
\\n
\\n
\\u53EF\\u4E0B\\u8F7D\\n
\\n
\\n
\\n
\\n
\\u4E0D\\u53EF\\u4E0B\\u8F7D\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\u7248\\u5F0F\\u5207\\u6362\\n
\\u6CE8\\uFF1A\\u9898\\u53F7\\u8D85\\u8FC750\\u9898\\u7684\\u8003\\u8BD5\\u4EC5\\u80FD\\u652F\\u6301\\u9898\\u578B\\u7248\\n
\\n
\\n
\\u73ED\\u7EA7\\u5B66\\u751F\\u6210\\u7EE9\\u5206\\u6790\\u8868
\\n
\\n
\\n
\\n \\u5B8C\\u6574\\u7248\\n
\\n
\\n \\u9898\\u578B\\u7248\\u7B80\\u6613\\u7248\\n
\\n
\\n
\\u7B80\\u6613\\u7248\\u4E0D\\u63D0\\u4F9B\\u9898\\u76EE\\u7EDF\\u8BA1\\u3001\\u7B54\\u9519\\u4EBA\\u6570\\u3001\\u9009\\u9879\\u7EDF\\u8BA1\\u3001\\u7F3A\\u8003\\u4EBA\\u6570
\\n
\\u9898\\u53F7\\u8D85\\u8FC750\\u9898\\u65F6\\u4EC5\\u80FD\\u9009\\u62E9\\u9898\\u578B\\u7248\\uFF0C\\u9898\\u578B\\u7248\\u4E0D\\u63D0\\u4F9B\\u9898\\u76EE\\u7EDF\\u8BA1\\u3001\\u7B54\\u9519\\u4EBA\\u6570\\u3001
\\u9009\\u9879\\u7EDF\\u8BA1
\\n
\\n
\\n
\\n
\\u73ED\\u7EA7\\u5E73\\u5747\\u5206\\u8868
\\n
\\n
\\n
\\n \\u5B8C\\u6574\\u7248\\n
\\n
\\n \\u9898\\u578B\\u7248\\u7B80\\u6613\\u7248\\n
\\n
\\n
\\u7B80\\u6613\\u7248\\u4E0D\\u63D0\\u4F9B\\u9898\\u76EE\\u7EDF\\u8BA1
\\n
\\u9898\\u53F7\\u8D85\\u8FC750\\u9898\\u65F6\\u4EC5\\u80FD\\u9009\\u62E9\\u9898\\u578B\\u7248\\uFF0C\\u9898\\u578B\\u7248\\u4E0D\\u63D0\\u4F9B\\u9898\\u76EE\\u7EDF\\u8BA1
\\n
\\n
\\n
\\n
\\u5E74\\u7EA7\\u5B66\\u751F\\u6210\\u7EE9\\u5206\\u6790\\u8868
\\n
\\n
\\n
\\n \\u5B8C\\u6574\\u7248\\n
\\n
\\n \\u9898\\u578B\\u7248\\u7B80\\u6613\\u7248\\n
\\n
\\n
\\u7B80\\u6613\\u7248\\u4E0D\\u63D0\\u4F9B\\u9898\\u76EE\\u7EDF\\u8BA1\\u3001\\u7B54\\u9519\\u4EBA\\u6570\\u3001\\u9009\\u9879\\u7EDF\\u8BA1\\u3001\\u5206\\u6570\\u6BB5\\u4EBA\\u6570
\\n
\\u9898\\u53F7\\u8D85\\u8FC750\\u9898\\u65F6\\u4EC5\\u80FD\\u9009\\u62E9\\u9898\\u578B\\u7248\\uFF0C\\u9898\\u578B\\u7248\\u4E0D\\u63D0\\u4F9B\\u9898\\u76EE\\u7EDF\\u8BA1\\u3001\\u7B54\\u9519\\u4EBA\\u6570\\u3001
\\u9009\\u9879\\u7EDF\\u8BA1\\u3001\\u5206\\u6570\\u6BB5\\u4EBA\\u6570
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\u6587\\u7EFC\\u7406\\u7EFC\\u5355\\u79D1\\u6210\\u7EE9\\u660E\\u7EC6\\u62A5\\u8868\\n
\\n
\\n
\\uFF08\\u73ED\\u7EA7\\u5B66\\u751F\\u6210\\u7EE9\\u5206\\u6790\\u8868\\u3001\\u73ED\\u7EA7\\u5E73\\u5747\\u5206\\u8868\\u3001\\u5E74\\u7EA7\\u5B66\\u751F\\u6210\\u7EE9\\u5206\\u6790\\u8868\\uFF09
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\u5206\\u6BB5\\u8BBE\\u7F6E:\\n
\\n
\\n
\\n \\u8BE5\\u5206\\u6BB5\\u8BBE\\u7F6E\\u7528\\u4E8E\\u914D\\u7F6E\\u5206\\u6570\\u6BB5\\u4EBA\\u6570\\u7EDF\\u8BA1 \\u6CE8: \\u5206\\u6BB5\\u5305\\u542B\\u53F3\\u8FB9\\u754C\\u503C\\n
\\n
\\n
\\n
\\n +\\n -\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\u663E\\u793A\\u8BBE\\u7F6E:\\n
\\n
\\n
\\n \\u5B66\\u751F\\u7B54\\u6848\\n
\\n
\\n \\u5B66\\u751F\\u5F97\\u5206\\n
\\n
\\uFF08\\u5B66\\u751F\\u6210\\u7EE9\\u5206\\u6790\\u8868\\u6839\\u636E\\u8BBE\\u7F6E\\u663E\\u793A\\uFF09\\n
\\n
\\n
\\n
\\n
\\u603B\\u5206\\u7CFB\\u6570:\\n
\\n
\\n
\\n
\\n
\\u542F\\u7528\\u7CFB\\u6570\\u540E\\uFF0C\\u4F1A\\u53E6\\u5916\\u63D0\\u4F9B\\u6362\\u7B97\\u540E\\u7684\\u603B\\u5206\\u6210\\u7EE9\\uFF08\\u539F\\u59CB\\u603B\\u5206\\xD7\\u7CFB\\u6570\\uFF09\\n
\\n
\\n
\\n \\n \\n \\n \\n
\\n
\\n
\\n
\\u7EB8\\u5F20\\u8BBE\\u7F6E:\\n
\\n
\\n
\\n A4\\u6A2A\\u5411\\n
\\n
\\n A3\\u7EB5\\u5411\\n
\\n
\\n A3\\u6A2A\\u5411\\n
\\n
\\uFF1F\\u9898\\u76EE\\u6570\\u8D85\\u8FC740\\u65F6\\u9ED8\\u8BA4\\u4E3AA3\\u6A2A\\u5411\\n
\\n
\\n
\\n
\\n
\\u6392\\u540D\\u5347\\u964D:\\n
\\n
\\n
\\n
\\u542F\\u7528\\u540E\\uFF0C\\u4F1A\\u5728\\u73ED\\u7EA7\\u6210\\u7EE9\\u5206\\u6790\\u8868\\u4E2D\\u663E\\u793A\\u73ED\\u7EA7\\u6392\\u540D\\u5347\\u964D\\uFF0C\\u5E74\\u7EA7\\u6392\\u540D\\u5347\\u964D\\n
\\n
\\n
\\n\\n
\\u9AD8\\u7EA7\\u8BBE\\u7F6E
\\n
\\n
\\u9519\\u9898\\u524D\\u5341\\u65E0\\u9700\\u914D\\u7F6E\\uFF0C\\u76F4\\u63A5\\u4E0B\\u8F7D\\u5373\\u53EF
\\n
\\n
\\n
\\n
\\u5B66\\u751F\\u4FE1\\u606F
\\n
\\n
\\n
\\n \\u5168\\u9009\\n
\\n
\\n \\u5B66\\u751F\\u59D3\\u540D\\n
\\n
\\n \\u7CFB\\u7EDF\\u51C6\\u8003\\u8BC1\\u53F7\\n
\\n
\\n \\u5B66\\u6821\\u51C6\\u8003\\u8BC1\\u53F7\\n
\\n
\\n \\u8EAB\\u4EFD\\u8BC1\\u53F7\\n
\\n
\\n \\u5B66\\u53F7\\n
\\n
\\n
\\n
\\n
\\n
\\u8FC7\\u6EE4\\u6761\\u4EF6
\\n
\\n
\\n
\\n \\u5168\\u9009\\n
\\n
\\n \\u53EA\\u663E\\u793A\\u5728\\u7C4D\\u751F\\n
\\n
\\n \\u8FC7\\u6EE40\\u5206\\u8003\\u751F\\n
\\n
\\n
\\n
\\n
\\n
\\u6CE8: \\u4E00\\u6B21\\u914D\\u7F6E\\u4FDD\\u5B58\\u540E\\uFF0C\\u540E\\u7EED\\u4E0B\\u8F7D\\u4ECD\\u6CBF\\u7528\\u5F53\\u524D\\u914D\\u7F6E
\\n
\\n
\\n
\\u4FDD\\u5B58\\u5E76\\u8FD4\\u56DE
\\n
\\u53D6\\u6D88\\u5E76\\u8FD4\\u56DE
\\n
\\n
\\n
\\u4E0B\\u8F7D
\\n
\\u751F\\u6210
\\n
\\u53D6\\u6D88
\\n
\\n
\\n
\";\nvar downLoadModuleListTpl = \"\\n
\\n
\\u4E0B\\u8F7D\\u8FDB\\u5EA6 X
\\n
\\n
\\n \\u5B66\\u79D1\\uFF1A\\n \\n
\\n
\\n \\u72B6\\u6001\\uFF1A\\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\";\nvar downLoadSettingModuleCreate = \"\\n
\\n
\\xD7
\\n
\\n \\u5DF2\\u751F\\u6210\\uFF0C\\u8BF7\\u9009\\u62E9\\u4E0B\\u4E00\\u6B65\\u64CD\\u4F5C\\uFF01\\n
\\n
\\n
\\u6253\\u5370
\\n
\\u4E0B\\u8F7D
\\n
\\n
\\n
\";\n\n// CONCATENATED MODULE: ./src/report.js\n\n\n\n\n\n\n\n\n\n\n\nfunction report_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 report_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { report_ownKeys(Object(source), true).forEach(function (key) { defineProperty_default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { report_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction report_createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = report_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction report_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return report_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 report_arrayLikeToArray(o, minLen); }\n\nfunction report_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 _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = getPrototypeOf_default()(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = getPrototypeOf_default()(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return possibleConstructorReturn_default()(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\n\n\n\n\n\n\n\nvar DownLoadModelInstance = null;\nvar DownLoadModelListInstance = null;\nvar DownLoadURL = null;\n/**\r\n * 文档下载弹框分为\r\n * 1 单文件下载\r\n * 2 批量下载\r\n * 和 【单文件下载】相比【批量下载】只是多了【班级选择】的概念\r\n * 里面的高级设置是一样的\r\n */\n\n/**\r\n*访问地址 http://localhost:8081/#/export/batch\r\n**/\n\nvar report_Tpls = function Tpls() {\n classCallCheck_default()(this, Tpls);\n\n this.downLoadType = {\n word: 1,\n excel: 2,\n teacher: 3,\n error: 4\n };\n this.checkAllTpl = \"\\n \\u5168\\u9009\\n
\";\n this.reportContentOptionTpl = \"\\n {name}\\n
\";\n this.scorePartTpl = \"\\n \";\n this.scorePartZeroTpl = \"0\";\n this.canDownLoadClassTpl = \"\\n {className}\\n
\";\n this.noDownLoadClassTpl = \"\\n {className}\\n
\";\n this.downLoadListItemTpl = \"\\n
\\n
\\n
\\n
{examName}
\\n
\\u5B66\\u79D1\\uFF1A{subject}\\n \\u4E0B\\u8F7D\\u5BF9\\u8C61\\uFF1A{downloadName}\\n \\n \\n {completedStatus}\\uFF1A{classLength}\\u4E2A\\u73ED\\u7EA7\\n {classList}\\n \\n \\n {errorMsg}\\n \\n\\n \\n
\\n
\\n
\\n
\\u6253\\u5370
\\n
\\u4E0B\\u8F7D
\\n
\\n
\\n
\\n
\";\n this.batchCheckAllTpl = \"\\n
\\n
\\n \\u5220\\u9664\\u9009\\u4E2D\\u9879\\n
\\n
\";\n this.notaskTpl = '暂无下载任务
';\n};\n\nvar mixinsClass = [report_Tpls, api]; //批量下载\n\nvar report_BatchDownLoad = /*#__PURE__*/function (_mix) {\n inherits_default()(BatchDownLoad, _mix);\n\n var _super = _createSuper(BatchDownLoad);\n\n function BatchDownLoad(examId) {\n var _this2;\n\n classCallCheck_default()(this, BatchDownLoad);\n\n _this2 = _super.call(this);\n _this2.examId = examId; //所有下载对象班级的集合\n\n _this2.allClassList = []; //下载对象对应班级集合的缓存\n\n _this2.cacheExamTypeForClass = {}; //当前下载对象下面 选择的班级\n\n _this2.selExamClassData = []; //当前渲染的班级数据\n //word excel 教学宝 错题前十 对应可下载的班级都不一样\n\n _this2.canDownLoadExamListData = [];\n _this2.noDownLoadExamListData = [];\n return _this2;\n }\n\n createClass_default()(BatchDownLoad, [{\n key: \"batchInit\",\n value: function batchInit() {\n this.initDom();\n this.bindEvent(); //更新错题前十 和讲案的问题\n //IS_THIDRD && this.subjectId != '8'\n\n if (!this.isMathSubject) {\n var _this$downloadTypeTex;\n\n //教学宝和错题前十提示问题\n this.downloadTypeTextNotice = (_this$downloadTypeTex = {}, defineProperty_default()(_this$downloadTypeTex, this.downLoadType.teacher, '该学科暂不支持批量下载教学宝'), defineProperty_default()(_this$downloadTypeTex, this.downLoadType.error, '当前科目暂未上线错题前十'), _this$downloadTypeTex);\n }\n }\n }, {\n key: \"initDom\",\n value: function initDom() {\n external_jQuery_default()('#examClassBox').removeClass('hide');\n this.$canDownLoadExam = external_jQuery_default()('#canDownLoadExam');\n this.$noDownLoadExam = external_jQuery_default()('#noDownLoadExam');\n }\n }, {\n key: \"getExamClassList\",\n value: function () {\n var _getExamClassList = asyncToGenerator_default()( /*#__PURE__*/regenerator_default.a.mark(function _callee(cb) {\n var examClassList, result;\n return regenerator_default.a.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return this.getExamClass(this.examId);\n\n case 2:\n examClassList = _context.sent;\n result = JSON.parse(examClassList);\n this.allClassList = result.success ? result.data.class : [];\n console.log(result);\n this.initStatusForDownlaodType(this.downLoadData.download_type); //this.updateRenderExamListData('word')\n\n if (result.data.scorePart) {\n _context.next = 10;\n break;\n }\n\n external_jQuery_default()('#scorePartEl').hide();\n return _context.abrupt(\"return\");\n\n case 10:\n this.downLoadData.scoreSection = result.data.scorePart.splice(0, result.data.scorePart.length - 1);\n cb && cb(result.data.scorePart);\n\n case 12:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function getExamClassList(_x) {\n return _getExamClassList.apply(this, arguments);\n }\n\n return getExamClassList;\n }()\n }, {\n key: \"updateRenderExamListData\",\n value: function updateRenderExamListData(key) {\n this.selExamClassData = [];\n\n if (this.cacheExamTypeForClass[key]) {\n this.canDownLoadExamListData = this.cacheExamTypeForClass[key].can;\n this.noDownLoadExamListData = this.cacheExamTypeForClass[key].no;\n this.renderExamList();\n return;\n }\n\n var isExcel = key === 'excel'; //缓存可以下载和不可下载的\n\n var cacheExamItem = this.cacheExamTypeForClass[key] = {\n can: [],\n no: []\n }; //如果没有完成阅卷\n\n this.canDownLoadExamListData = cacheExamItem.can = this.allClassList.filter(function (v) {\n return v[key];\n });\n this.noDownLoadExamListData = cacheExamItem.no = this.allClassList.filter(function (v) {\n return !v[key];\n });\n this.renderExamList();\n }\n }, {\n key: \"renderExamList\",\n value: function renderExamList() {\n var _this3 = this;\n\n var examClassHtml = this.canDownLoadExamListData.reduce(function (examHtml, item) {\n examHtml += _this3.canDownLoadClassTpl.substitute(item);\n return examHtml;\n }, ''); ////console.log(this.noDownLoadExamListData)\n\n var examClassHtmlDisabled = this.noDownLoadExamListData.reduce(function (examHtml, item) {\n examHtml += _this3.noDownLoadClassTpl.substitute(item);\n return examHtml;\n }, '');\n this.$canDownLoadExam.html(examClassHtml ? this.checkAllTpl + examClassHtml : '暂无可下载的班级');\n this.$noDownLoadExam.html(examClassHtmlDisabled ? examClassHtmlDisabled : '暂无不可下载的班级'); //重置可以选择的考试班级的个数等信息\n\n this.resetCanDownLoadCheckBox();\n }\n }, {\n key: \"resetCanDownLoadCheckBox\",\n value: function resetCanDownLoadCheckBox() {\n Object.assign(this.canDownLoadExamCheck, {\n totalCount: this.canDownLoadExamListData.length,\n checkedItemsCount: 0\n });\n }\n }, {\n key: \"bindEvent\",\n value: function bindEvent() {\n var self = this;\n self.canDownLoadExamCheck = new component_CheckBoxItem(self.$canDownLoadExam, function ($checkAllItem, status) {\n self.selExamClassData = status ? self.canDownLoadExamListData.map(function (v) {\n return {\n id: v.id,\n className: v.className\n };\n }) : []; ////console.log('选择的班级', self.selExamClassData)\n }, function ($checkItem, status) {\n var curId = $checkItem.attr('data-id');\n\n if (status) {\n var curExamClass = self.canDownLoadExamListData.find(function (v) {\n return v.id == curId;\n });\n self.selExamClassData.push(simpleCopy(curExamClass));\n } else {\n var curIndex = self.selExamClassData.findIndex(function (v) {\n return v.id == curId;\n });\n self.selExamClassData.splice(curIndex, 1);\n } ////console.log('选择的班级', self.selExamClassData)\n\n });\n }\n }]);\n\n return BatchDownLoad;\n}(mix.apply(void 0, mixinsClass)); //判断是否需要批量下载的功能\n\n\nif (IS_BATCHDOWNLOAD) {\n mixinsClass.push(report_BatchDownLoad);\n} //下载设置弹框\n\n\nvar report_DownLoadModel = /*#__PURE__*/function (_mix2) {\n inherits_default()(DownLoadModel, _mix2);\n\n var _super2 = _createSuper(DownLoadModel);\n\n function DownLoadModel(_ref) {\n var _this4$downloadTypeTe;\n\n var _this4;\n\n var examId = _ref.examId,\n subjectId = _ref.subjectId,\n classId = _ref.classId,\n downLoadType = _ref.downLoadType,\n complete = _ref.complete;\n\n classCallCheck_default()(this, DownLoadModel);\n\n _this4 = _super2.call(this, examId);\n _this4.examId = examId;\n _this4.subjectId = subjectId;\n _this4.classId = classId; //判断是否完成阅卷 未完成阅卷只有excel 里面【选择作答明细表】能下载\n //\n\n _this4.isComplete = IS_BATCHDOWNLOAD ? true : complete === '1'; //判断是否文综理综\n\n _this4.isWenLiAll = ['18', '19'].includes(_this4.subjectId); //判断是否数学学科\n\n _this4.isMathSubject = ['3', '6', '51'].includes(_this4.subjectId); //教学宝是否可以下载\n\n _this4.teacherTalkingIsDownLoad = false; //错题前十是否可以下载\n\n _this4.errorTenIsDownLoad = false; //教学宝和错题前十提示问题\n\n _this4.downloadTypeTextNotice = (_this4$downloadTypeTe = {}, defineProperty_default()(_this4$downloadTypeTe, _this4.downLoadType.teacher, '教学宝无需配置,直接下载即可'), defineProperty_default()(_this4$downloadTypeTe, _this4.downLoadType.error, _this4.isMathSubject ? '错题前十无需配置,直接下载即可' : '当前科目暂未上线教学宝'), _this4$downloadTypeTe); //下载选项提交数据\n\n _this4.downLoadData = {\n //1 word 2excel 3 教学宝 4 错题文档\n download_type: downLoadType ? +downLoadType : _this4.isComplete ? _this4.downLoadType.word : 2,\n //报表类型\n reportType: [],\n //班级学生成绩分析表 简单版/完整版\n isSimpleClazzAchievement: 0,\n //班级平均分数表 简单版/完整版\n isSimpleClazzAvgScore: 0,\n //年级成绩分析表简单版/完整版\n isSimpleGradeAchievement: 0,\n //显示设置\n scoreOfEachQuestion: 0,\n //分数段\n scoreSection: [],\n //总分系数\n totalScoreCoefficient: -1,\n //纸张类型 A4:1 A3:2\n paperSizeType: 1\n }; //高级设置\n\n _this4.firstEnterHighSetting = true;\n _this4.highSettingData = localStorage.getItem('highSetting') ? JSON.parse(localStorage.getItem('highSetting')) : {\n //系统准考证号\n hasStudentSystemCard: 0,\n //学校准考证号\n hasStudentSchoolCard: 0,\n //身份证号\n hasIdNumber: 0,\n //考号\n hasStudentNo: 0,\n //过滤外籍生\n removeOuterStudent: 0,\n // 过滤0分\n removeZeroStudent: 0,\n //优秀率\n excellentRatio: 0.9,\n //良好率\n goodRatio: 0.8,\n //中等率\n mediumRatio: 0.6\n }; //针对word 和 excel 的下载内容\n\n /**\r\n * CLAZZ_ACHIEVEMENT(0,\"班级学生成绩分析表\"),\r\n * CLAZZ_AVG_SCORE(1,\"班级平均分表\"),\r\n * STUDENT_ACHIEVEMENT_RANK(2,\"学生成绩排名跟踪表\"),\r\n GRADE_ACHIEVEMENT(3,\"年级学生成绩分析表\"),\r\n SCORE_SECTION(4,\"班级分数段表\"),\r\n SUBJECT_ACHIEVEMENT(5,\"各学科成绩分析表\"),\r\n WEN_LI_ZONG_ACHIEVEMENT_DETAILS(6,\"文综理综单科成绩明细报表\");\r\n */\n\n _this4.wordDownLoadContentOptions = [{\n name: '班级学生成绩分析表',\n id: 0\n }, {\n name: '班级平均分表',\n id: 1\n }, {\n name: '班级分数段表',\n id: 4\n }];\n _this4.excelDownLoadContentOptions = [].concat(toConsumableArray_default()(_this4.wordDownLoadContentOptions), [{\n name: '年级学生成绩分析表',\n id: 3\n }, {\n name: '学生成绩排名跟踪表',\n id: 2\n }, {\n name: '学生作答明细表',\n id: 7\n }]); // 文综理综独有选项\n\n if (_this4.isWenLiAll) {\n _this4.excelDownLoadContentOptions.splice(1, 0, {\n name: '各学科成绩分析表',\n id: 5\n });\n }\n\n _this4.renderReportContentOptions = _this4.wordDownLoadContentOptions;\n\n _this4.initsDom();\n\n if (IS_BATCHDOWNLOAD) {\n _this4.batchInit();\n\n _this4.getExamClassList(_this4.renderScorePart.bind(assertThisInitialized_default()(_this4)));\n } else {\n _this4.getScoreData();\n }\n\n _this4.bindEvents();\n\n _this4.render();\n\n return _this4;\n }\n\n createClass_default()(DownLoadModel, [{\n key: \"getScoreData\",\n value: function () {\n var _getScoreData = asyncToGenerator_default()( /*#__PURE__*/regenerator_default.a.mark(function _callee2() {\n var scorePartData, res;\n return regenerator_default.a.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return this.getScorePart(this.examId);\n\n case 2:\n scorePartData = _context2.sent;\n res = JSON.parse(scorePartData);\n this.initStatusForDownlaodType(this.downLoadData.download_type);\n\n if (res.success) {\n this.initDownloadTypeTextNotice(res.download_rule);\n this.downLoadData.scoreSection = res.data.splice(0, res.data.length - 1);\n this.renderScorePart();\n }\n\n case 6:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function getScoreData() {\n return _getScoreData.apply(this, arguments);\n }\n\n return getScoreData;\n }()\n }, {\n key: \"initDownloadTypeTextNotice\",\n value: function initDownloadTypeTextNotice(download_rule) {\n var isTeacherDownLoad = download_rule.is_lecture_download,\n isErrorTenDownLoad = download_rule.is_topwb_download,\n teacherDownLoadMsg = download_rule.is_lecture_download_msg,\n errorDownLoadMsg = download_rule.is_topwb_download_msg; // //题号超过50题时仅能选择题型版\n // if(this.downLoadData.download_type){\n // console.log(download_rule,88)\n // $('#achievement').children('.h_radioItem').eq(0).addClass('notSel')\n // $('#avgScore').children('.h_radioItem').eq(0).addClass('notSel')\n // $('#gradeAvgScore').children('.h_radioItem').eq(0).addClass('notSel')\n // }\n\n this.teacherTalkingIsDownLoad = isTeacherDownLoad ? true : false;\n\n if (!isTeacherDownLoad) {\n this.downloadTypeTextNotice[this.downLoadType.teacher] = teacherDownLoadMsg ? teacherDownLoadMsg : '教学宝无需配置,直接下载即可';\n }\n\n this.errorTenIsDownLoad = isErrorTenDownLoad ? true : false;\n\n if (!isErrorTenDownLoad) {\n this.downloadTypeTextNotice[this.downLoadType.error] = errorDownLoadMsg ? IS_THIDRD ? '当前科目未上线错题前十' : errorDownLoadMsg : '错题前十无需配置,直接下载即可';\n }\n }\n }, {\n key: \"initsDom\",\n value: function initsDom() {\n external_jQuery_default()('body').append( //IS_BATCHDOWNLOAD 是否批量\n downLoadSettingModuleTpl.substitute({\n isSingle: IS_BATCHDOWNLOAD ? '' : 'hide'\n })); // 如果是word显示题型版\n\n external_jQuery_default()('#h_submitBtn .ensure').show();\n\n if (this.downLoadData.download_type == 1) {\n external_jQuery_default()('#h_submitBtn .ensure').hide();\n external_jQuery_default()('#h_submitBtn .create').show();\n external_jQuery_default()('.options-excel').hide();\n } else {\n external_jQuery_default()('.options-word').hide();\n } // 如果不是word方式打开,不显示纸张设置\n\n\n if (this.downLoadData.download_type != 1) {\n external_jQuery_default()('#paperSizeSetting').remove();\n } //如果没有完成阅卷,除了excel报表其他报表都不能选择\n\n\n if (!this.isComplete) {\n external_jQuery_default()('.downLoadObject li').addClass('disabled').removeClass('current').eq(1).removeClass('disabled').addClass('current');\n } //先隐藏excel 选项模块\n\n\n external_jQuery_default()('.excelOption').hide(); //判断文综理综选项是否显示\n\n if (!this.isWenLiAll) {\n //console.log($('.excelOption'))\n external_jQuery_default()('.excelOption').eq(1).remove();\n }\n\n this.$reportContentOptions = external_jQuery_default()('#reportContentOption .h_checkBox'); //分段系数\n\n this.$totalScoreCoefficient = external_jQuery_default()('.totalScore input');\n }\n }, {\n key: \"render\",\n value: function render() {\n this.renderReportContentOption(); //初始化下载类型选项\n //this.initStatusForDownlaodType(this.downLoadData.download_type)\n } //报表内容选项\n\n }, {\n key: \"renderReportContentOption\",\n value: function renderReportContentOption() {\n //console.log('当前选择的报表类型', this.downLoadData.download_type)\n var options = this.renderReportContentOptions = function (_this) {\n var downLoadData = _this.downLoadData;\n\n if (~'1|2'.indexOf(downLoadData.download_type)) {\n return downLoadData.download_type === _this.downLoadType.word ? _this.wordDownLoadContentOptions : _this.excelDownLoadContentOptions;\n } else {\n return [];\n }\n }(this);\n\n var reportContentOptionHtml = this.checkAllTpl.substitute({\n name: 'reportContentOption'\n });\n\n var _iterator = report_createForOfIteratorHelper(options),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var item = _step.value;\n reportContentOptionHtml += this.reportContentOptionTpl.substitute(item);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n external_jQuery_default()('#reportContentOption')[options.length ? 'show' : 'hide']();\n this.$reportContentOptions.html(reportContentOptionHtml);\n Object.assign(this.reportContentCheck, {\n totalCount: options.length,\n checkedItemsCount: 0\n });\n\n if (this.isComplete) {\n this.$reportContentOptions.children('.checkAll').trigger('click');\n } else {\n this.$reportContentOptions.children().each(function () {\n var id = external_jQuery_default()(this).attr('data-id');\n\n if (id !== '7') {\n external_jQuery_default()(this).addClass('notSel');\n } else {\n external_jQuery_default()(this).trigger('click');\n }\n });\n }\n } //分段设置\n\n }, {\n key: \"renderScorePart\",\n value: function renderScorePart() {\n var _this5 = this;\n\n var scoreHtml = this.downLoadData.scoreSection.reduce(function (scorePartHtml, score, index) {\n scorePartHtml += _this5.scorePartTpl.substitute({\n score: score,\n index: index\n });\n return scorePartHtml;\n }, '');\n external_jQuery_default()('#scoreList').html(scoreHtml + this.scorePartZeroTpl);\n }\n }, {\n key: \"reduceScorePart\",\n value: function reduceScorePart() {\n var scoreSection = this.downLoadData.scoreSection;\n var scorePartLength = scoreSection.length;\n if (scorePartLength <= 2) return;\n this.downLoadData.scoreSection = scoreSection.splice(0, scoreSection.length - 1);\n this.renderScorePart();\n }\n }, {\n key: \"addScorePart\",\n value: function addScorePart() {\n var scoreSection = this.downLoadData.scoreSection;\n var scorePartLength = scoreSection.length;\n if (scorePartLength >= 10) return;\n scoreSection.push('');\n this.renderScorePart();\n }\n }, {\n key: \"clearScroePart\",\n value: function clearScroePart() {\n var scoreSection = this.downLoadData.scoreSection;\n this.downLoadData.scoreSection = scoreSection.map(function () {\n return '';\n });\n this.renderScorePart();\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n var _this6 = this;\n\n var self = this;\n var downLoadData = self.downLoadData;\n var downLoadType = downLoadData.download_type; //是否只选择了选择作答明细表\n\n var hasReportType7 = false; //报表内容选项\n\n self.reportContentCheck = new component_CheckBoxItem(self.$reportContentOptions, function ($checkAllItem, status) {\n downLoadData.reportType = status ? self.renderReportContentOptions.map(function (v) {\n return v.id;\n }) : [];\n\n if (IS_BATCHDOWNLOAD && hasReportType7) {\n var _reportNameMap;\n\n hasReportType7 = false;\n var _self$downLoadType = self.downLoadType,\n word = _self$downLoadType.word,\n excel = _self$downLoadType.excel,\n teacher = _self$downLoadType.teacher,\n error = _self$downLoadType.error;\n var reportNameMap = (_reportNameMap = {}, defineProperty_default()(_reportNameMap, word, 'word'), defineProperty_default()(_reportNameMap, excel, 'excel'), defineProperty_default()(_reportNameMap, teacher, 'teacher'), defineProperty_default()(_reportNameMap, error, 'error'), _reportNameMap);\n self.updateRenderExamListData(reportNameMap[downLoadType]);\n } //console.log('报表内容选项', downLoadData.reportType)\n\n }, function ($checkItem, status) {\n var curId = $checkItem.attr('data-id');\n\n if (status) {\n downLoadData.reportType.push(curId);\n } else {\n var curIndex = downLoadData.reportType.findIndex(function (id) {\n return id == curId;\n });\n downLoadData.reportType.splice(curIndex, 1);\n }\n\n console.log(self.allClassList);\n\n if (IS_BATCHDOWNLOAD && downLoadData.reportType.toString() === '7') {\n hasReportType7 = true;\n self.canDownLoadExamListData = self.allClassList;\n self.noDownLoadExamListData = [];\n self.renderExamList();\n } else {\n var _reportNameMap2;\n\n var _self$downLoadType2 = self.downLoadType,\n word = _self$downLoadType2.word,\n excel = _self$downLoadType2.excel,\n teacher = _self$downLoadType2.teacher,\n error = _self$downLoadType2.error;\n var reportNameMap = (_reportNameMap2 = {}, defineProperty_default()(_reportNameMap2, word, 'word'), defineProperty_default()(_reportNameMap2, excel, 'excel'), defineProperty_default()(_reportNameMap2, teacher, 'teacher'), defineProperty_default()(_reportNameMap2, error, 'error'), _reportNameMap2);\n self.updateRenderExamListData(reportNameMap[downLoadType]);\n } //console.log('报表内容选项', downLoadData.reportType)\n\n }); //文综理综单科成绩明细表\n\n new component_CheckBoxItem(external_jQuery_default()('#subjectReport'), function () {}, function ($checkItem, status) {\n if (status) {\n downLoadData.reportType.push(6);\n } else {\n var curIndex = downLoadData.reportType.findIndex(function (id) {\n return id === 5;\n });\n downLoadData.reportType.splice(curIndex, 1);\n } //self.hasWenLiZongDetail = status ? 1 : 0\n //console.log('报表内容选项', downLoadData.reportType)\n\n }); //样式切换\n\n external_jQuery_default()('.hgc_report .styleChange .tip').click(function () {\n var isClose = external_jQuery_default()(this).hasClass('down');\n external_jQuery_default()(this).siblings('.styleBox')[isClose ? 'show' : 'hide']();\n external_jQuery_default()(this)[isClose ? 'removeClass' : 'addClass']('down')[isClose ? 'addClass' : 'removeClass']('up');\n }); //班级学生成绩分析表\n\n new component_RadioBoxItem(external_jQuery_default()('#achievement'), function ($radioItem, status) {\n var stat = $radioItem.attr('data-status');\n var name = $radioItem.attr('data-name');\n downLoadData[name] = stat; ////console.log(downLoadData)\n }); //纸张设置\n\n new component_RadioBoxItem(external_jQuery_default()('#paperSizeSetting'), function ($radioItem, status) {\n var stat = $radioItem.attr('data-status');\n var name = $radioItem.attr('data-name');\n downLoadData[name] = stat; ////console.log(downLoadData)\n }); //班级平均分表\n\n new component_RadioBoxItem(external_jQuery_default()('#avgScore'), function ($radioItem, status) {\n var stat = $radioItem.attr('data-status');\n var name = $radioItem.attr('data-name');\n downLoadData[name] = stat; ////console.log(downLoadData)\n }); //年级平均分表\n\n new component_RadioBoxItem(external_jQuery_default()('#gradeAvgScore'), function ($radioItem, status) {\n var stat = $radioItem.attr('data-status');\n var name = $radioItem.attr('data-name');\n downLoadData[name] = stat; ////console.log(downLoadData)\n }); //显示设置\n\n new component_RadioBoxItem(external_jQuery_default()('#studentAchievement'), function ($radioItem, status) {\n var stat = $radioItem.attr('data-status');\n var name = $radioItem.attr('data-name');\n downLoadData[name] = stat; ////console.log(downLoadData)\n }); //分段设置\n\n external_jQuery_default()('#scoreOperator .hbtn').unbind().click(function () {\n if (external_jQuery_default()(this).hasClass('reduce')) {\n self.reduceScorePart();\n } else if (external_jQuery_default()(this).hasClass('add')) {\n self.addScorePart();\n } else {\n self.clearScroePart();\n }\n }); //分段文本框操作\n\n external_jQuery_default()('#scoreList').off('blur').on('blur', 'input', function () {\n var scoreSection = self.downLoadData.scoreSection;\n\n var _index = +external_jQuery_default()(this).attr('data-index');\n\n var val = +external_jQuery_default()(this).val();\n\n if (val <= 0 || scoreSection[_index + 1] && val <= scoreSection[_index + 1] || scoreSection[_index - 1] && val >= scoreSection[_index - 1] || val >= self.maxScore) {\n hgc_layer.alert('分段数值设置不正确,请重新输入');\n external_jQuery_default()(this).val(scoreSection[_index]);\n } else {\n scoreSection[_index] = val;\n }\n });\n new component_Switch(external_jQuery_default()('#switch-total-score'), function (status) {\n if (status) {\n external_jQuery_default()('#contactChoice1,#contactChoice2').prop('disabled', false);\n self.downLoadData.totalScoreCoefficientIsRounding = 1;\n } else {\n external_jQuery_default()('#contactChoice1,#contactChoice2').prop('disabled', true);\n external_jQuery_default()('#contactChoice1').prop('checked', true);\n external_jQuery_default()('#contactChoice2').prop('checked', false);\n delete self.downLoadData.totalScoreCoefficientIsRounding;\n }\n\n _this6.$totalScoreCoefficient[status ? 'removeClass' : 'addClass']('disabled').prop('disabled', !status);\n\n self.downLoadData.totalScoreCoefficient = status ? _this6.$totalScoreCoefficient.val() : -1;\n });\n external_jQuery_default()('.number-type input').click(function () {\n self.downLoadData.totalScoreCoefficientIsRounding = external_jQuery_default()(this).val();\n });\n new component_Switch(external_jQuery_default()('#switch-ranking'), function (status) {\n self.downLoadData.showRankingChanges = status ? 1 : 0;\n });\n this.$totalScoreCoefficient.blur(function () {\n var val = +external_jQuery_default()(this).val();\n\n if (!Number.isFinite(val)) {\n hgc_layer.alert('总分系数为0~10以内的数字');\n val = 1.25;\n } else {\n if (val <= 0) {\n val = 1.25;\n } else if (val > 10) {\n val = 10;\n }\n }\n\n external_jQuery_default()(this).val(val.toFixed(2));\n self.downLoadData.totalScoreCoefficient = val.toFixed(2);\n });\n external_jQuery_default()('#h_submitBtn .hbtn').click(function () {\n if (external_jQuery_default()(this).hasClass('ensure')) {\n //下载\n onSubmitBtn(self);\n } else if (external_jQuery_default()(this).hasClass('create')) {\n // 生成\n onSubmitBtn(self, '生成'); // $('body').append(downLoadSettingModuleCreate)\n // scFn.call(this)\n } else {\n external_jQuery_default()('#hgc_reportBox').remove();\n DownLoadModelInstance = null;\n }\n });\n external_jQuery_default()('.hgc_report h2.title .hclose').click(function () {\n external_jQuery_default()('#hgc_reportBox').remove();\n DownLoadModelInstance = null;\n });\n\n function onSubmitBtn(self, type) {\n var downLoadType = self.downLoadData.download_type;\n\n var submitParams = report_objectSpread(report_objectSpread(report_objectSpread({}, self.downLoadData), self.highSettingData), {}, {\n scoreSection: self.downLoadData.scoreSection.length ? [].concat(toConsumableArray_default()(self.downLoadData.scoreSection), ['0']) : []\n });\n\n if (~'1|2'.indexOf(downLoadType) && !self.downLoadData.reportType.length) {\n hgc_layer.alert('请选择要下载的报表内容');\n return;\n }\n\n if (IS_BATCHDOWNLOAD) {\n // 批量\n submitParams.examGroupId = self.examId;\n self.batchDownLoadFn(downLoadType, submitParams, type);\n } else {\n // 单个 下载\n submitParams.exam_id = self.examId;\n self.singleDownLoadFn(downLoadType, submitParams, type);\n }\n }\n\n this.highSettingEvent();\n }\n }, {\n key: \"scFn\",\n value: function scFn() {\n external_jQuery_default()('.sc_submitBtns .hbtn').click(function () {\n if (external_jQuery_default()(this).hasClass('create')) {\n //打印\n evaluationClient.BulkPrintPDF(JSON.stringify(DownLoadURL.print));\n external_jQuery_default()('#hgc_reportBox').remove();\n external_jQuery_default()('#sc_createBox').remove();\n } else {\n //下载\n if (DownLoadURL.status) {\n external_jQuery_default()('#hgc_reportBox').remove();\n external_jQuery_default()('#sc_createBox').remove();\n location.href = DownLoadURL.result;\n }\n }\n });\n external_jQuery_default()('.sc_close').click(function () {\n external_jQuery_default()('#sc_createBox').remove();\n });\n }\n }, {\n key: \"highSettingEvent\",\n value: function highSettingEvent() {\n var _this7 = this;\n\n var self = this;\n var downLoadData = self.downLoadData; //高级设置\n\n external_jQuery_default()('#highSetting span').click(function () {\n self.submitBtnStatusChange(true);\n self.initHighSettingStatus();\n }); //高级设置---学生选择\n\n var studentsInfo = ['hasStudentSystemCard', 'hasStudentSchoolCard', 'hasIdNumber', 'hasStudentNo'];\n new component_CheckBoxItem(external_jQuery_default()('#studentsSetting'), function ($checkAll, status) {\n studentsInfo.forEach(function (v) {\n _this7.highSettingData[v] = status ? 1 : 0;\n });\n }, function ($checkItem, status) {\n var name = $checkItem.attr('data-name');\n _this7.highSettingData[name] = status ? 1 : 0;\n }); //过滤条件\n\n var filterInfo = ['removeOuterStudent', 'removeZeroStudent'];\n new component_CheckBoxItem(external_jQuery_default()('#filterSetting'), function ($checkAll, status) {\n filterInfo.forEach(function (v) {\n _this7.highSettingData[v] = status ? 1 : 0;\n });\n }, function ($checkItem, status) {\n var name = $checkItem.attr('data-name');\n _this7.highSettingData[name] = status ? 1 : 0;\n }); //达线设置\n\n var complianceFields = [100, 'excellentRatio', 'goodRatio', 'mediumRatio', 0];\n external_jQuery_default()('#complianceRate input').blur(function () {\n var name = external_jQuery_default()(this).attr('data-name');\n var currentVal = +external_jQuery_default()(this).val();\n var fieldIndex = complianceFields.indexOf(name);\n var preVal = complianceFields[fieldIndex - 1];\n preVal = Number.isFinite(preVal) ? preVal : self.highSettingData[preVal] * 100;\n var nextVal = complianceFields[fieldIndex + 1];\n nextVal = Number.isFinite(nextVal) ? nextVal : self.highSettingData[nextVal] * 100;\n\n if (currentVal < preVal && currentVal > nextVal) {\n self.highSettingData[name] = +(currentVal / 100).toFixed(2);\n } else {\n external_jQuery_default()(this).val(self.highSettingData[name] * 100);\n }\n });\n external_jQuery_default()('.hgc_report').on('click', '.downLoadObject li', function () {\n if (external_jQuery_default()(this).hasClass('disabled')) return;\n external_jQuery_default()(this).addClass('current').siblings().removeClass('current');\n var downLoadType = external_jQuery_default()(this).attr('data-id');\n\n if (downLoadType == 2) {\n external_jQuery_default()('#scoreDisplaySettings').show();\n } else {\n external_jQuery_default()('#scoreDisplaySettings').hide();\n self.downLoadData.scoreOfEachQuestion = 0;\n } // 如果不是word方式打开,不显示纸张设置\n\n\n if (downLoadType != 1) {\n external_jQuery_default()('#paperSizeSetting').hide();\n } else {\n external_jQuery_default()('#paperSizeSetting').show();\n } // 如果是word显示题型版\n\n\n if (downLoadType == 1) {\n external_jQuery_default()('.options-excel').hide();\n external_jQuery_default()('.options-word').show();\n } else {\n external_jQuery_default()('.options-word').hide();\n external_jQuery_default()('.options-excel').show();\n }\n\n self.initStatusForDownlaodType(downLoadType);\n });\n external_jQuery_default()('#h_saveSettingBtn .hbtn').click(function () {\n self.submitBtnStatusChange(false);\n\n if (external_jQuery_default()(this).hasClass('ensure')) {\n window.localStorage.setItem('highSetting', JSON.stringify(self.highSettingData));\n }\n });\n }\n }, {\n key: \"initHighSettingStatus\",\n value: function initHighSettingStatus() {\n var _this8 = this;\n\n var self = this;\n if (!self.firstEnterHighSetting) return;\n var highSettingOptions = [].concat(toConsumableArray_default()(external_jQuery_default()('#studentsSetting .h_checkItem')), toConsumableArray_default()(external_jQuery_default()('#filterSetting .h_checkItem')));\n highSettingOptions.forEach(function (el) {\n var name = external_jQuery_default()(el).attr('data-name');\n\n if (_this8.highSettingData[name]) {\n external_jQuery_default()(el).click();\n }\n });\n external_jQuery_default()('#complianceRate input').each(function () {\n var name = external_jQuery_default()(this).attr('data-name');\n external_jQuery_default()(this).val(self.highSettingData[name] * 100);\n });\n self.firstEnterHighSetting = false;\n }\n }, {\n key: \"submitBtnStatusChange\",\n value: function submitBtnStatusChange(flag) {\n external_jQuery_default()('#setting')[flag ? 'hide' : 'show']();\n external_jQuery_default()('#filterOptions')[!flag ? 'hide' : 'show']();\n external_jQuery_default()('#h_saveSettingBtn')[flag ? 'addClass' : 'removeClass']('flex');\n external_jQuery_default()('#h_submitBtn')[!flag ? 'addClass' : 'removeClass']('flex');\n }\n }, {\n key: \"batchDownLoadFn\",\n value: function batchDownLoadFn(downLoadType, submitParams) {\n var self = this;\n console.log(submitParams);\n\n if (!self.selExamClassData.length) {\n hgc_layer.alert('请选择要下载的班级');\n return;\n }\n\n submitParams = report_objectSpread(report_objectSpread({}, submitParams), {}, {\n class_ids: self.selExamClassData\n });\n hgc_layer.msg('生成中,请稍后...', {\n time: 0,\n shade: 0.4\n });\n self.batchDownLoad(submitParams).then(function (res) {\n hgc_layer.closeAll();\n var result = JSON.parse(res);\n\n if (result.status) {\n hgc_layer.open({\n title: '下载提示:',\n content: '已成功转入后台生成报表,请等待',\n btn: ['查看生成进度', '确定'],\n yes: function yes(index, layero) {\n //按钮【按钮一】的回调\n hgc_layer.closeAll();\n external_jQuery_default()('#hgc_reportBox').remove();\n var subjectId = external_jQuery_default()('.progress_btn').attr('subjectId');\n DownLoadModelListInstance = new report_DownLoadListModel(subjectId);\n },\n btn2: function btn2(index, layero) {\n //按钮【按钮二】的回调\n //return false 开启该代码可禁止点击该按钮关闭\n //按钮【按钮一】的回调\n hgc_layer.closeAll();\n external_jQuery_default()('#hgc_reportBox').remove();\n },\n cancel: function cancel() {\n //右上角关闭回调\n //return false 开启该代码可禁止点击该按钮关闭\n //按钮【按钮一】的回调\n hgc_layer.closeAll();\n external_jQuery_default()('#hgc_reportBox').remove();\n }\n });\n } else {\n hgc_layer.alert(result.msg);\n }\n });\n }\n }, {\n key: \"singleDownLoadFn\",\n value: function () {\n var _singleDownLoadFn = asyncToGenerator_default()( /*#__PURE__*/regenerator_default.a.mark(function _callee3(downLoadType, submitParams, type) {\n var _this9 = this;\n\n var self, result, res, errorInfo, reportMap;\n return regenerator_default.a.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n self = this;\n\n if (!~'3|4'.indexOf(downLoadType)) {\n _context3.next = 17;\n break;\n }\n\n if (!(downLoadType == self.downLoadType.teacher && self.teacherTalkingIsDownLoad)) {\n _context3.next = 15;\n break;\n }\n\n hgc_layer.msg('生成中,请稍后...', {\n time: 0,\n shade: 0.4\n });\n _context3.next = 6;\n return self.judgeTeacherDownLoad({\n subjectId: self.subjectId,\n classId: self.classId,\n examId: self.examId\n });\n\n case 6:\n result = _context3.sent;\n res = JSON.parse(result);\n errorInfo = res.error;\n hgc_layer.closeAll();\n\n if (!res.status) {\n self.downLoadTeacher(self.examId);\n } else {\n hgc_layer.alert(res.error); //教学宝是否可以下载的状态判断c\n\n external_jQuery_default()('#nosetting').children('strong').html(errorInfo);\n } //教学宝是否能下载\n\n\n self.teacherTalkingIsDownLoad = res.status ? false : true;\n self.downloadTypeTextNotice[downLoadType] = errorInfo ? errorInfo : self.downloadTypeTextNotice[downLoadType];\n _context3.next = 16;\n break;\n\n case 15:\n if (downLoadType == self.downLoadType.error && self.errorTenIsDownLoad) {\n self.downLoadErrorTen(self.examId);\n }\n\n case 16:\n return _context3.abrupt(\"return\");\n\n case 17:\n //报表内容替换字段\n\n /**\r\n * CLAZZ_ACHIEVEMENT(0,\"班级学生成绩分析表\"),CLAZZ_AVG_SCORE(1,\"班级平均分表\"),STUDENT_ACHIEVEMENT_RANK(2,\"学生成绩排名跟踪表\"),\r\n GRADE_ACHIEVEMENT(3,\"年级学生成绩分析表\"),SCORE_SECTION(4,\"班级分数段表\"),SUBJECT_ACHIEVEMENT(5,\"各学科成绩分析表\"),\r\n WEN_LI_ZONG_ACHIEVEMENT_DETAILS(6,\"文综理综单科成绩明细报表\");\r\n */\n reportMap = {\n 0: 'hasClazzAchievement',\n 1: 'hasClazzAvgScore',\n 2: 'hasStudentAchievementRank',\n 3: 'hasGradeAchievement',\n 4: 'hasScoreSection',\n 5: 'hasSubjectAchievement',\n 6: 'hasWenLiZongDetail',\n 7: 'hasClazzChoiceTopicStatistics'\n };\n submitParams.reportType.forEach(function (key) {\n submitParams[reportMap[key]] = 1;\n });\n hgc_layer.msg('生成中,请稍后...', {\n time: 0,\n shade: 0.4\n });\n self.singleDownLoad(submitParams).then(function (res) {\n hgc_layer.closeAll();\n var result = JSON.parse(res);\n\n if (result.status) {\n if (type == '生成') {\n DownLoadURL = result;\n external_jQuery_default()('body').append(downLoadSettingModuleCreate);\n\n _this9.scFn.call(_this9);\n } else {\n external_jQuery_default()('#hgc_reportBox').remove();\n location.href = result.result;\n }\n } else {\n hgc_layer.alert(result.result);\n }\n });\n\n case 21:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n function singleDownLoadFn(_x2, _x3, _x4) {\n return _singleDownLoadFn.apply(this, arguments);\n }\n\n return singleDownLoadFn;\n }()\n }, {\n key: \"initStatusForDownlaodType\",\n value: function () {\n var _initStatusForDownlaodType = asyncToGenerator_default()( /*#__PURE__*/regenerator_default.a.mark(function _callee4(downLoadType) {\n var hasOption, isTeacher, _reportNameMap3, _this$downLoadType, word, excel, teacher, error, reportNameMap;\n\n return regenerator_default.a.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n hasOption = ~'1|2'.indexOf(downLoadType);\n isTeacher = downLoadType == 3;\n this.downLoadData.download_type = +downLoadType; //重置报表内容选项\n\n this.downLoadData.reportType = []; //是否有报表内容选项\n\n if (hasOption) {\n this.renderReportContentOption();\n } // word 模块并且是批量 下\n\n\n if (IS_BATCHDOWNLOAD) {\n external_jQuery_default()('#h_submitBtn .ensure').show();\n external_jQuery_default()('#h_submitBtn .create').hide();\n\n if (downLoadType == 1) {\n external_jQuery_default()('#h_submitBtn .ensure').hide();\n external_jQuery_default()('#h_submitBtn .create').show();\n }\n }\n /**\r\n * 教学宝 错题前十 没有选项 init\r\n */\n\n\n external_jQuery_default()('#setting .canselOptions')[hasOption ? 'show' : 'hide']();\n /**\r\n * excel 有年级平均分选项 init\r\n */\n\n external_jQuery_default()('.excelOption')[downLoadType == this.downLoadType.excel ? 'show' : 'hide'](); //默认不选中文综理综单科成绩明细报表 非文综理综没有这个选项\n\n if (this.isWenLiAll) {\n //文理综单科成绩明细表\n external_jQuery_default()('#subjectReport .h_checkItem').removeClass('checked');\n }\n\n if (!IS_BATCHDOWNLOAD) {\n //教学宝是否可以下载的状态判断c\n //单个下载除了数学 其他科目都没有错题前十\n //let isDownLoadError = !this.isMathSubject && downLoadType == 4\n external_jQuery_default()('#nosetting')[hasOption ? 'removeClass' : 'addClass']('flex').children('strong').html(this.downloadTypeTextNotice[downLoadType]);\n } else {\n _this$downLoadType = this.downLoadType, word = _this$downLoadType.word, excel = _this$downLoadType.excel, teacher = _this$downLoadType.teacher, error = _this$downLoadType.error;\n reportNameMap = (_reportNameMap3 = {}, defineProperty_default()(_reportNameMap3, word, 'word'), defineProperty_default()(_reportNameMap3, excel, 'excel'), defineProperty_default()(_reportNameMap3, teacher, 'teacher'), defineProperty_default()(_reportNameMap3, error, 'error'), _reportNameMap3);\n this.updateRenderExamListData(reportNameMap[downLoadType]); //IS_THIDRD && this.subjectId != '8'\n //批量下载 除了数学其他科目 教学宝==>>不支持下载 错题前十==>>暂未上线该功能\n\n if (!this.isMathSubject) {\n //教学宝是否可以下载的状态判断c\n external_jQuery_default()('#nosetting')[hasOption || isTeacher ? 'removeClass' : 'addClass']('flex').children('strong').html(this.downloadTypeTextNotice[downLoadType]);\n external_jQuery_default()('#examClassBox')[hasOption || isTeacher ? 'show' : 'hide']();\n }\n }\n\n case 10:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n function initStatusForDownlaodType(_x5) {\n return _initStatusForDownlaodType.apply(this, arguments);\n }\n\n return initStatusForDownlaodType;\n }()\n }]);\n\n return DownLoadModel;\n}(mix.apply(void 0, mixinsClass)); // 批量下载列表弹框\n\n\nvar report_DownLoadListModel = /*#__PURE__*/function (_mix3) {\n inherits_default()(DownLoadListModel, _mix3);\n\n var _super3 = _createSuper(DownLoadListModel);\n\n function DownLoadListModel(subjectId) {\n var _this10;\n\n classCallCheck_default()(this, DownLoadListModel);\n\n _this10 = _super3.call(this);\n _this10.searchParams = {\n page: 1,\n pageLimit: 10,\n subjectId: subjectId,\n status: ''\n };\n _this10.listData = [];\n _this10.selListData = [];\n _this10.searchSubjects = {};\n\n _this10.eventBind();\n\n _this10.getList();\n\n return _this10;\n }\n\n createClass_default()(DownLoadListModel, [{\n key: \"getList\",\n value: function () {\n var _getList = asyncToGenerator_default()( /*#__PURE__*/regenerator_default.a.mark(function _callee5() {\n var page,\n self,\n result,\n res,\n _args5 = arguments;\n return regenerator_default.a.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n page = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : 1;\n self = this;\n self.searchParams.page = page;\n _context5.next = 5;\n return self.getDownloadProgress(self.searchParams);\n\n case 5:\n result = _context5.sent;\n res = JSON.parse(result);\n self.initListProgress(res); //调用分页\n\n if (!(res.pages.totalPage <= 1)) {\n _context5.next = 11;\n break;\n }\n\n external_jQuery_default()('#h_pagination').hide();\n return _context5.abrupt(\"return\");\n\n case 11:\n external_jQuery_default()('#h_pagination').show();\n external_jQuery_default()('#h_pagination').pagination({\n pageCount: res.pages.totalPage,\n jump: true,\n callback: function callback(api) {\n //console.log(api.getCurrent())\n self.searchParams.page = api.getCurrent();\n self.getDownloadProgress(self.searchParams).then(function (result) {\n var res = JSON.parse(result);\n self.initListProgress(res);\n }); //获取当前页面\n //api.getCurrent()\n }\n });\n\n case 13:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n function getList() {\n return _getList.apply(this, arguments);\n }\n\n return getList;\n }()\n }, {\n key: \"initListProgress\",\n value: function initListProgress(res) {\n this.selListData = [];\n this.listData = this.formatData(res.data.listData);\n\n if (!Object.keys(this.searchSubjects).length) {\n this.renderFilterSubject(res.subjects, res.sessionSubjectId);\n }\n\n this.renderList();\n }\n }, {\n key: \"formatData\",\n value: function formatData(data) {\n var _downloadMap;\n\n //2 word 1excel 3 教学宝 4 错题文档\n var _this$downLoadType2 = this.downLoadType,\n word = _this$downLoadType2.word,\n excel = _this$downLoadType2.excel,\n teacher = _this$downLoadType2.teacher,\n error = _this$downLoadType2.error;\n var downloadMap = (_downloadMap = {}, defineProperty_default()(_downloadMap, word, 'word'), defineProperty_default()(_downloadMap, excel, 'excel'), defineProperty_default()(_downloadMap, teacher, '教学宝'), defineProperty_default()(_downloadMap, error, '错题文档'), _downloadMap);\n var createStatusMap = {\n 1: '未生成',\n 2: '已生成',\n 3: '生成失败',\n 4: '生成中'\n };\n var resultData = [];\n\n for (var i = 0, ilen = data.length; i < ilen; i++) {\n var examName = data[i].examName;\n var task = data[i].task;\n\n for (var j = 0, jlen = task.length; j < jlen; j++) {\n task[j] = report_objectSpread(report_objectSpread({}, task[j]), {}, {\n examName: examName,\n classLength: task[j].class.length,\n classList: task[j].class.toString(),\n isHide: task[j].errorMsg ? '' : 'hide',\n downloadName: downloadMap[task[j].downloadType],\n isDisabeld: task[j].status == '2' ? '' : 'disabled',\n completedStatus: createStatusMap[task[j].status],\n isShow: task[j].downloadType == 2 ? 'isShow' : ''\n });\n resultData.push(task[j]);\n }\n }\n\n return resultData;\n } //渲染学科筛选条件\n\n }, {\n key: \"renderFilterSubject\",\n value: function renderFilterSubject(subjects, defaultSubjectId) {\n this.searchSubjects = subjects;\n var subjectOptions = '';\n\n for (var subjectId in subjects) {\n var isDefaultOption = subjectId === defaultSubjectId;\n subjectOptions += \"\");\n }\n\n this.searchParams.subjectId = defaultSubjectId;\n external_jQuery_default()('#subjectFilter').html(subjectOptions);\n }\n }, {\n key: \"renderList\",\n value: function renderList() {\n var data = this.listData;\n var downListHtml = '';\n\n for (var i = 0, ilen = data.length; i < ilen; i++) {\n downListHtml += this.downLoadListItemTpl.substitute(data[i]);\n }\n\n if (!downListHtml) {\n downListHtml = this.notaskTpl;\n } else {\n downListHtml += this.batchCheckAllTpl;\n }\n\n external_jQuery_default()('#downLoadList').html(downListHtml);\n this.updateListCheckCount();\n }\n }, {\n key: \"updateListCheckCount\",\n value: function updateListCheckCount() {\n var totalCount = this.listData.filter(function (v) {\n return v.status === '2';\n }).length;\n Object.assign(this.downLoadListCheck, {\n totalCount: totalCount,\n checkedItemsCount: 0\n });\n }\n }, {\n key: \"delDownload\",\n value: function delDownload(ids, cb) {\n this.delTask({\n ids: ids\n }).then(function (res) {\n return JSON.parse(res);\n }).then(function (result) {\n if (result.success) {\n cb(result);\n }\n }).catch(function (err) {//console.error(err)\n });\n }\n }, {\n key: \"eventBind\",\n value: function eventBind() {\n var _this11 = this;\n\n var self = this;\n external_jQuery_default()('body').append(downLoadModuleListTpl);\n this.downLoadListCheck = new component_CheckBoxItem(external_jQuery_default()('#downLoadList'), function ($checkAllItem, status) {\n _this11.selListData = status ? simpleCopy(_this11.listData) : []; ////console.log('报表内容选项', downLoadData.reportType)\n }, function ($checkItem, status) {\n var curId = $checkItem.attr('data-id');\n\n if (status) {\n var checkItem = _this11.listData.find(function (v) {\n return v.id === curId;\n });\n\n _this11.selListData.push(checkItem);\n } else {\n var checkIndex = _this11.selListData.findIndex(function (v) {\n return v.id === curId;\n });\n\n _this11.selListData.splice(checkIndex, 1);\n } ////console.log('报表内容选项', downLoadData.reportType)\n\n }); //修改筛选条件\n\n external_jQuery_default()('#subjectFilter').change(function () {\n self.searchParams.subjectId = external_jQuery_default()(this).val();\n self.getList();\n });\n external_jQuery_default()('#statusFilter').change(function () {\n self.searchParams.status = external_jQuery_default()(this).val();\n self.getList();\n });\n var that = this;\n external_jQuery_default()('#downLoadList').on('click', '.downLoadInfo .hbtns .singleBtn', function (event) {\n event.stopPropagation();\n var curId = external_jQuery_default()(this).attr('data-id'); //删除\n\n if (external_jQuery_default()(this).hasClass('del')) {\n self.delDownload([curId], function (result) {\n var delIndex = self.listData.findIndex(function (v) {\n return v.id === curId;\n });\n self.listData.splice(delIndex, 1);\n\n if (!self.listData.length) {\n self.getList();\n } else {\n self.renderList();\n }\n });\n } else if (external_jQuery_default()(this).hasClass('create')) {\n //打印\n if (external_jQuery_default()(this).hasClass('disabled')) return;\n var ids = that.listData.filter(function (s) {\n return s.id == curId;\n });\n var data = '';\n\n if (ids.length) {\n data = ids[0].print;\n }\n\n evaluationClient.BulkPrintPDF(JSON.stringify(data));\n } else {\n // 下载\n if (external_jQuery_default()(this).hasClass('disabled')) return;\n var zipUrl = external_jQuery_default()(this).attr('data-zipUrl');\n location.href = zipUrl;\n }\n });\n external_jQuery_default()('#downLoadList').on('click', '.batchBtns .opratorBtn', function (event) {\n event.stopPropagation();\n\n if (!self.selListData.length) {\n hgc_layer.alert('请选择需要操作的项');\n return;\n } //批量删除\n\n\n if (external_jQuery_default()(this).hasClass('notice')) {\n self.delDownload(self.selListData.map(function (v) {\n return v.id;\n }), function (result) {\n self.selListData.forEach(function (v) {\n var curIndex = self.listData.findIndex(function (_ref2) {\n var id = _ref2.id;\n return id == v.id;\n });\n self.listData.splice(curIndex, 1);\n });\n self.renderList();\n });\n }\n });\n external_jQuery_default()('.hgc_report h2.title .hclose').click(function () {\n external_jQuery_default()('#hgc_reportBox').remove();\n DownLoadModelListInstance = null;\n });\n }\n }]);\n\n return DownLoadListModel;\n}(mix(report_Tpls, api));\n\nexternal_jQuery_default()(function () {\n external_jQuery_default()('#dynamic-table .downloadFileBtn').click(function () {\n if (external_jQuery_default()(this).attr('topic_count') >= 40) {\n // hasXa4 hasYa3 hasXa3\n setTimeout(function () {\n external_jQuery_default()('#hasXa4').show();\n external_jQuery_default()('#hasYa3').hide();\n external_jQuery_default()('#hasXa3').show();\n }, 20);\n } else {\n setTimeout(function () {\n external_jQuery_default()('#hasXa4').show();\n external_jQuery_default()('#hasYa3').show();\n external_jQuery_default()('#hasXa3').show();\n }, 20);\n }\n\n if (!IS_BATCHDOWNLOAD) {\n var downLoadType = external_jQuery_default()(this).attr('data-downloadType');\n var examId = external_jQuery_default()(this).attr('rel');\n var subjectId = external_jQuery_default()(this).attr('subject');\n var classId = external_jQuery_default()(this).attr('class_id');\n var complete = external_jQuery_default()(this).attr('complete');\n DownLoadModelInstance = new report_DownLoadModel({\n examId: examId,\n subjectId: subjectId,\n classId: classId,\n downLoadType: downLoadType,\n complete: complete\n });\n } else {\n var _subjectId = external_jQuery_default()(this).attr('subject');\n\n var _examId = external_jQuery_default()(this).attr('rel');\n\n var _complete = external_jQuery_default()(this).attr('complete');\n\n DownLoadModelInstance = new report_DownLoadModel({\n examId: _examId,\n subjectId: _subjectId,\n complete: _complete\n });\n }\n\n if (external_jQuery_default()(this).attr('data-downloadType') != 2) {\n external_jQuery_default()('#scoreDisplaySettings').hide();\n }\n\n if (external_jQuery_default()(this).attr('school_grade') === 'junior_high_school') {\n external_jQuery_default()('.reportItem .downLoadObject li').eq(2).hide();\n external_jQuery_default()('.reportItem .downLoadObject li').eq(3).hide();\n external_jQuery_default()('.reportItem .downLoadObject').css({\n 'justify-content': 'flex-start'\n });\n external_jQuery_default()('.reportItem .downLoadObject li').eq(0).css('marginRight', '30px');\n }\n });\n external_jQuery_default()('.progress_btn').click(function (e) {\n e.preventDefault();\n var subjectId = external_jQuery_default()(this).attr('subjectId');\n DownLoadModelListInstance = new report_DownLoadListModel(subjectId);\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvcmVxdWVzdC5qcz8yYWRlIiwid2VicGFjazovLy8uL3NyYy91dGlscy5qcz8wMjVlIiwid2VicGFjazovLy8uL3NyYy9hcGkuanM/ZDcyMiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50LmpzP2EyOTAiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RlbXBsYXRlLmpzP2U3NjEiLCJ3ZWJwYWNrOi8vLy4vc3JjL3JlcG9ydC5qcz80MjI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAkIGZyb20gJ2pxdWVyeSdcclxuXHJcbmNvbnN0IHJlcXVlc3QgPSBmdW5jdGlvbihkYXRhKSB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcclxuICAgICQuYWpheCh7XHJcbiAgICAgIC4uLmRhdGEsXHJcbiAgICAgIHN1Y2Nlc3MocmVzKSB7XHJcbiAgICAgICAgcmVzb2x2ZShyZXMpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IHsgcmVxdWVzdCB9XHJcbiIsImV4cG9ydCBjb25zdCBJU19CQVRDSERPV05MT0FEID0gfmxvY2F0aW9uLmhyZWYuaW5kZXhPZignZXhwb3J0L2JhdGNoJylcclxuLy/mmK/lkKbmmK/nrKzkuInmlrnnmoTljZXkuKrkuIvovb1cclxuZXhwb3J0IGNvbnN0IElTX1RISURSRCA9IH5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2R1bycpXHJcblN0cmluZy5wcm90b3R5cGUuc3Vic3RpdHV0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcclxuICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PSAnb2JqZWN0Jykge1xyXG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvXFx7KFtee31dKylcXH0vZywgZnVuY3Rpb24obWF0Y2gsIGtleSkge1xyXG4gICAgICB2YXIgdmFsdWUgPSBkYXRhW2tleV1cclxuICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyAnJyArIHZhbHVlIDogJydcclxuICAgIH0pXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKClcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1peCguLi5taXhpbnMpIHtcclxuICBjbGFzcyBNaXgge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgIGZvciAobGV0IG1peGluIG9mIG1peGlucykge1xyXG4gICAgICAgIGNvcHlQcm9wZXJ0aWVzKHRoaXMsIG5ldyBtaXhpbigpKSAvLyDmi7fotJ3lrp7kvovlsZ7mgKdcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yIChsZXQgbWl4aW4gb2YgbWl4aW5zKSB7XHJcbiAgICBjb3B5UHJvcGVydGllcyhNaXgsIG1peGluKSAvLyDmi7fotJ3pnZnmgIHlsZ7mgKdcclxuICAgIGNvcHlQcm9wZXJ0aWVzKE1peC5wcm90b3R5cGUsIG1peGluLnByb3RvdHlwZSkgLy8g5ou36LSd5Y6f5Z6L5bGe5oCnXHJcbiAgfVxyXG5cclxuICByZXR1cm4gTWl4XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvcHlQcm9wZXJ0aWVzKHRhcmdldCwgc291cmNlKSB7XHJcbiAgZm9yIChsZXQga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhzb3VyY2UpKSB7XHJcbiAgICBpZiAoa2V5ICE9PSAnY29uc3RydWN0b3InICYmIGtleSAhPT0gJ3Byb3RvdHlwZScgJiYga2V5ICE9PSAnbmFtZScpIHtcclxuICAgICAgbGV0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KVxyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2MpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzaW1wbGVDb3B5KG9iaikge1xyXG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpXHJcbn1cclxuXHJcbmV4cG9ydCB7IG1peCwgc2ltcGxlQ29weSB9XHJcblxyXG4iLCJsZXQgZG9tYWluID0gJydcclxubGV0IHRva2VuID0gJydcclxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XHJcbiAgZG9tYWluID0gJ2h0dHA6Ly96c3lhczIudGVzdGluZy54dWVwaW5nLmNvbSdcclxuXHJcblxyXG5cclxuICB0b2tlbiA9XHJcbiAgICAnL3VzZXJuYW1lL3poYW5neGl1eGl1L3RpbWUvMTY4MDA1ODEzOS9zaWcvOTYxNzExZGMyODJhZTA0MDMyMDc1OTkwNzM3NDMzMDIvc2Vzc2lvbmlkL3Nlc3Npb25fNzdkOTE5ZDY1YWQ4NjkzN2FkYjRhNGQ1YzlhOTcwZjEnXHJcbiAgLy8gdG9rZW4gPVxyXG4gIC8vICAgJy91c2VybmFtZS9kYW5pZS90aW1lLzE1NzIyNDA2MjYvc2lnLzNhOTJiOGUzNTlkN2EyZmQ4Zjk0MzUyMzJjZjliMDAwL3Nlc3Npb25pZC9zZXNzaW9uXzI1MTFkNzNmMTA3YjcwODA0OWM0NTUwYWY4YWU3YzFkJ1xyXG4gIC8vXHJcbiAgLy8gdG9rZW4gPVxyXG4gIC8vICAgJy91c2VybmFtZS96ZW5neXVxdW4vdGltZS8xNTc1MjU1NTIwL3NpZy8yMDg0ZWUyYjBlZjJkODUyMDgxZjM5OTFiOGJjZTFmNC9zZXNzaW9uaWQvc2Vzc2lvbl85OTQ3Yjk4ZDA5MmY0NjFmMjg1ZThlZDQ3OGZlZTIxYSdcclxuICAvLyAgIC8v6KKB5by6XHJcbiAgLy8gICB0b2tlbiA9XHJcbiAgLy8gICAnL3VzZXJuYW1lLzM4NjUwMDAvdGltZS8xNTc0MzIzNDUyL3NpZy9lZTIzZmQ5NDk0NDdmODZiZWM3YzZhYjBiY2Y3YjE3Yi9zZXNzaW9uaWQvc2Vzc2lvbl8zZDQ0Y2U4YWQyZTY5OTcyYmY2YzJmZGUxNDVmMzRlNidcclxuICAvL1xyXG4gIC8vICAgdG9rZW4gPVxyXG4gIC8vICAgJy91c2VybmFtZS8zODUzMDAyL3RpbWUvMTU3Njc0MjM4My9zaWcvMjRkYThkMmQ3ZmZmMmYwYWNhNmE3Njg1NjNlMGIwYmQvc2Vzc2lvbmlkL3Nlc3Npb25fOTFjOGI5MTFmNmM2OWIwNDAzZmVkYWE2ZGI5MDYxYzknXHJcbiAgLy8gICAgLy9wZW5nIGN1aSAg5b2t57+gXHJcbiAgLy8gICAgdG9rZW4gPSAnL3VzZXJuYW1lL3BjMDAyL3RpbWUvMTU2NzQ5OTkwOC9zaWcvN2Q5Y2EzZDQwYjc0MjJiNzU5Y2U5YTdlMDhiMmRlMjAvc2Vzc2lvbmlkL3Nlc3Npb25fOTM0ODJmNmNmMWM4NjViN2EyZTI3OTNjNjZmMmM1OTUnXHJcbiAgLy8gICAgdG9rZW4gPVxyXG4gIC8vICAgJy91c2VybmFtZS94bGwvdGltZS8xNTcwNzU5NDQ0L3NpZy8xZTVlN2QwYTI5N2NmZDk3ZDY5OThkM2EyOTdhZjliMy9zZXNzaW9uaWQvc2Vzc2lvbl9iNTY5OWM3NzVmM2Q3NzBhYjI4YjRiYmExZTU4ZTViMSdcclxuXHJcblxyXG5cclxuICB3aW5kb3cuaGdjX2xheWVyID0ge1xyXG4gICAgYWxlcnQ6IGZ1bmN0aW9uKG1zZykge1xyXG4gICAgICB3aW5kb3cuYWxlcnQobXNnKVxyXG4gICAgfSxcclxuICAgIG9wZW46IGZ1bmN0aW9uKCkge30sXHJcbiAgICBjbG9zZUFsbDogZnVuY3Rpb24oKSB7fSxcclxuICAgIG1zZzogZnVuY3Rpb24oKSB7fVxyXG4gIH1cclxufSBlbHNlIHtcclxuICB3aW5kb3cuaGdjX2xheWVyID0gbGF5ZXJcclxufVxyXG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSAnLi9yZXF1ZXN0J1xyXG5pbXBvcnQgeyBJU19USElEUkQgfSBmcm9tICcuL3V0aWxzJ1xyXG5jbGFzcyBBcGkge1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5nZXRTY29yZVBhcnRBcGkgPSBkb21haW4gKyAnL2luZGV4LnBocC9leHBvcnQvR2V0U2VjdGlvbicgKyB0b2tlblxyXG5cclxuICAgIHRoaXMuZ2V0RXhhbUNsYXNzQXBpID0gZG9tYWluICsgJy9pbmRleC5waHAvZXhwb3J0L2dldEV4YW1DbGFzcycgKyB0b2tlblxyXG5cclxuICAgIHRoaXMuZ2V0RG93bmxvYWRQcm9ncmVzc0FwaSA9ICAgXHJcbiAgICAgIGRvbWFpbiArICcvaW5kZXgucGhwL2V4cG9ydC9kb3dubG9hZFByb2dyZXNzJyArIHRva2VuXHJcblxyXG4gICAgdGhpcy5kZWxUYXNrQXBpID0gZG9tYWluICsgJy9pbmRleC5waHAvZXhwb3J0L2RlbGV0ZVRhc2snICsgdG9rZW5cclxuXHJcbiAgICB0aGlzLmRvd25Mb2FkVGVhY2hlclVybCA9IGRvbWFpbiArICcvZXhwb3J0L2Rvd25fbG9hZD9leGFtSWQ9J1xyXG5cclxuICAgIHRoaXMuZG93bkxvYWRFcnJvclRlblVybCA9IGRvbWFpbiArICcvZXhwb3J0L2Rvd25sb2FkP2V4YW1faWQ9J1xyXG5cclxuICAgIHRoaXMuYmF0Y2hEb3duTG9hZEFwaSA9IGRvbWFpbiArICcvaW5kZXgucGhwL2V4cG9ydC9wdXNoVGFzaycgKyB0b2tlblxyXG5cclxuICAgIHRoaXMuc2luZ2xlRG93bkxvYWRBcGkgPSBkb21haW4gKyAnL2luZGV4LnBocC9leHBvcnQvYWpheF9kb3duJyArIHRva2VuXHJcblxyXG4gICAgdGhpcy5qdWRnZVRlYWNoZXJGb3JTdWJqZWN0OCA9IGRvbWFpbiArICcvdGVhY2hpbmcvaW5kZXgnICsgdG9rZW5cclxuICAgIHRoaXMuanVkZ2VUZWFjaGVyRm9yU3ViamVjdE90aGVyID0gZG9tYWluICsgJy9leHBvcnQvYWNhZGVtaWNyJyArIHRva2VuXHJcbiAgfVxyXG4gIGdldFNjb3JlUGFydChleGFtSWQpIHtcclxuICAgIHJldHVybiByZXF1ZXN0KHtcclxuICAgICAgdXJsOiB0aGlzLmdldFNjb3JlUGFydEFwaSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGV4YW1faWQ6IGV4YW1JZFxyXG4gICAgICB9LFxyXG4gICAgICBtZXRob2Q6ICdQT1NUJ1xyXG4gICAgfSlcclxuICB9XHJcbiAgZ2V0RXhhbUNsYXNzKGV4YW1JZCkge1xyXG4gICAgcmV0dXJuIHJlcXVlc3Qoe1xyXG4gICAgICB1cmw6IHRoaXMuZ2V0RXhhbUNsYXNzQXBpLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgaXNUaGlyZDogMCxcclxuICAgICAgICBleGFtR3JvdXBJZDogZXhhbUlkXHJcbiAgICAgIH0sXHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnXHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXREb3dubG9hZFByb2dyZXNzKHBhcmFtcykge1xyXG4gICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9XHJcbiAgICBwYXJhbXMucGFnZUxpbWl0ID0gMTBcclxuICAgIGNvbnNvbGUubG9nKHBhcmFtcylcclxuICAgIHJldHVybiByZXF1ZXN0KHtcclxuICAgICAgdXJsOiB0aGlzLmdldERvd25sb2FkUHJvZ3Jlc3NBcGksXHJcbiAgICAgIGRhdGE6IHBhcmFtcyxcclxuICAgICAgbWV0aG9kOiAnUE9TVCdcclxuICAgIH0pXHJcbiAgfVxyXG4gIGRlbFRhc2socGFyYW1zKSB7XHJcbiAgICByZXR1cm4gcmVxdWVzdCh7XHJcbiAgICAgIHVybDogdGhpcy5kZWxUYXNrQXBpLFxyXG4gICAgICBkYXRhOiBwYXJhbXMsXHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnXHJcbiAgICB9KVxyXG4gIH1cclxuICBkb3duTG9hZFRlYWNoZXIoZXhhbUlkKSB7XHJcbiAgICBsb2NhdGlvbi5ocmVmID0gdGhpcy5kb3duTG9hZFRlYWNoZXJVcmwgKyBleGFtSWRcclxuICB9XHJcbiAgZG93bkxvYWRFcnJvclRlbihleGFtSWQpIHtcclxuICAgIGxvY2F0aW9uLmhyZWYgPSB0aGlzLmRvd25Mb2FkRXJyb3JUZW5VcmwgKyBleGFtSWRcclxuICB9XHJcbiAgYmF0Y2hEb3duTG9hZChwYXJhbXMpIHtcclxuICAgIHJldHVybiByZXF1ZXN0KHtcclxuICAgICAgdXJsOiB0aGlzLmJhdGNoRG93bkxvYWRBcGksXHJcbiAgICAgIGRhdGE6IHBhcmFtcyxcclxuICAgICAgbWV0aG9kOiAnUE9TVCdcclxuICAgIH0pXHJcbiAgfVxyXG4gIHNpbmdsZURvd25Mb2FkKHBhcmFtcykge1xyXG4gICAgcmV0dXJuIHJlcXVlc3Qoe1xyXG4gICAgICB1cmw6IHRoaXMuc2luZ2xlRG93bkxvYWRBcGksXHJcbiAgICAgIGRhdGE6IHBhcmFtcyxcclxuICAgICAgbWV0aG9kOiAnUE9TVCdcclxuICAgIH0pXHJcbiAgfVxyXG4gIC8vIOaVmeWtpuWuneaYr+WQpuWPr+S7peS4i+i9vVxyXG4gIGp1ZGdlVGVhY2hlckRvd25Mb2FkKHBhcmFtcykge1xyXG4gICAgbGV0IHsgY2xhc3NJZCwgZXhhbUlkLCBzdWJqZWN0SWQgfSA9IHBhcmFtc1xyXG4gICAgbGV0IHVybCA9IHRoaXMuanVkZ2VUZWFjaGVyRm9yU3ViamVjdE90aGVyXHJcbiAgICAvL+aJuemHj+S4i+i9veeahOaXtuWAmei/h+a7pOadoeS7tuS4jeWQjFxyXG4gICAgbGV0IGZpbHRlckNvbmRpdGlvbnMgPSBJU19USElEUkQgPyAnOCw5LDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5JyA6ICc4J1xyXG4gICAgaWYgKH5maWx0ZXJDb25kaXRpb25zLmluZGV4T2Yoc3ViamVjdElkKSkge1xyXG4gICAgICB1cmwgPSB0aGlzLmp1ZGdlVGVhY2hlckZvclN1YmplY3Q4XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVxdWVzdCh7XHJcbiAgICAgIHVybDogdXJsLFxyXG4gICAgICBkYXRhOiB7IGNsYXNzSWQsIGV4YW1JZCB9LFxyXG4gICAgICBtZXRob2Q6ICdHRVQnXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQXBpXHJcbiIsIi8v5aSN6YCJXHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSdcclxuY2xhc3MgQ2hlY2tCb3hJdGVtIHtcclxuICBjb25zdHJ1Y3RvcigkY2hlY2tCb3gsIGFsbEZuLCBzaW5nbGVGbikge1xyXG4gICAgdGhpcy5hbGxGbiA9IGFsbEZuIHx8IGZ1bmN0aW9uKCkge31cclxuICAgIHRoaXMuc2luZ2xlRm4gPSBzaW5nbGVGbiB8fCBmdW5jdGlvbigpIHt9XHJcbiAgICB0aGlzLiRjaGVjQm94ID0gJGNoZWNrQm94XHJcbiAgICAvL+mZpOS6hiDlhajpgIkg56aB55So5oyJ6ZKu5Lul5aSW55qE5YW25LuW5oyJ6ZKu55qE6ZuG5ZCIXHJcbiAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLiRjaGVjQm94LmZpbmQoXHJcbiAgICAgICcuaF9jaGVja0l0ZW06bm90KFwiLmNoZWNrQWxsXCIpOm5vdChcIi5kaXNhYmxlZFwiKSdcclxuICAgICkubGVuZ3RoXHJcbiAgICB0aGlzLmNoZWNrZWRJdGVtc0NvdW50ID0gMFxyXG4gICAgdGhpcy5iaW5kRXZlbnQoKVxyXG4gIH1cclxuICBiaW5kRXZlbnQoKSB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpc1xyXG4gICAgdGhpcy4kY2hlY0JveC5vbignY2xpY2snLCAnLmhfY2hlY2tJdGVtJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgIGxldCBpc0Rpc2FibGVkID0gJCh0aGlzKS5oYXNDbGFzcygnZGlzYWJsZWQnKVxyXG4gICAgICBsZXQgaXNOb3RTZWwgPSAkKHRoaXMpLmhhc0NsYXNzKCdub3RTZWwnKVxyXG4gICAgICBsZXQgaXNDaGVja2VkID0gJCh0aGlzKS5oYXNDbGFzcygnY2hlY2tlZCcpXHJcbiAgICAgIGxldCBpc0NoZWNrQWxsRWwgPSAkKHRoaXMpLmhhc0NsYXNzKCdjaGVja0FsbCcpXHJcbiAgICAgIGlmIChpc0Rpc2FibGVkIHx8IGlzTm90U2VsKSByZXR1cm5cclxuICAgICAgJCh0aGlzKVtpc0NoZWNrZWQgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oJ2NoZWNrZWQnKVxyXG4gICAgICBpZiAoaXNDaGVja0FsbEVsKSB7XHJcbiAgICAgICAgbGV0IGNoZWNrSXRlbXMgPSAkKHRoaXMpLnNpYmxpbmdzKCcuaF9jaGVja0l0ZW0nKVxyXG4gICAgICAgIGNoZWNrSXRlbXNbaXNDaGVja2VkID8gJ3JlbW92ZUNsYXNzJyA6ICdhZGRDbGFzcyddKCdjaGVja2VkJylcclxuICAgICAgICBzZWxmLmNoZWNrZWRJdGVtc0NvdW50ID0gaXNDaGVja2VkID8gMCA6IGNoZWNrSXRlbXMubGVuZ3RoXHJcbiAgICAgICAgc2VsZi5hbGxGbigkKHRoaXMpLCAhaXNDaGVja2VkKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBjaGVja0FsbCA9ICQodGhpcykuc2libGluZ3MoJy5jaGVja0FsbCcpXHJcbiAgICAgICAgIWlzQ2hlY2tlZCA/IHNlbGYuY2hlY2tlZEl0ZW1zQ291bnQrKyA6IHNlbGYuY2hlY2tlZEl0ZW1zQ291bnQtLVxyXG4gICAgICAgIGxldCBpc0NoZWNrQWxsU3RhdHVzID0gc2VsZi5jaGVja2VkSXRlbXNDb3VudCA+PSBzZWxmLnRvdGFsQ291bnRcclxuICAgICAgICBjaGVja0FsbFtpc0NoZWNrQWxsU3RhdHVzID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKCdjaGVja2VkJylcclxuICAgICAgICBzZWxmLnNpbmdsZUZuKCQodGhpcyksICFpc0NoZWNrZWQpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbi8vIOWNlemAiVxyXG5jbGFzcyBSYWRpb0JveEl0ZW0ge1xyXG4gIGNvbnN0cnVjdG9yKCRyYWRpb0JveCwgZm4pIHtcclxuICAgIHRoaXMuJHJhZGlvQm94ID0gJHJhZGlvQm94XHJcbiAgICB0aGlzLmNiID0gZm5cclxuXHJcbiAgICB0aGlzLmJpbmRFdmVudCgpXHJcbiAgfVxyXG4gIGJpbmRFdmVudCgpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzXHJcbiAgICB0aGlzLiRyYWRpb0JveC5vbignY2xpY2snLCAnLmhfcmFkaW9JdGVtJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgIGxldCBpc05vdFNlbCA9ICQodGhpcykuaGFzQ2xhc3MoJ25vdFNlbCcpXHJcbiAgICAgIGlmIChpc05vdFNlbCkgcmV0dXJuXHJcbiAgICAgICQodGhpcylcclxuICAgICAgICAuYWRkQ2xhc3MoJ2NoZWNrZWQnKVxyXG4gICAgICAgIC5zaWJsaW5ncygnLmhfcmFkaW9JdGVtJylcclxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ2NoZWNrZWQnKVxyXG4gICAgICBzZWxmLmNiICYmIHNlbGYuY2IoJCh0aGlzKSlcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbi8vIOWIh+aNolxyXG5jbGFzcyBTd2l0Y2gge1xyXG4gIGNvbnN0cnVjdG9yKCRzd2l0Y2gsIGZuLCBkZWZhdWx0c3RhdHVzKSB7XHJcbiAgICB0aGlzLiRzd2l0Y2ggPSAkc3dpdGNoXHJcbiAgICB0aGlzLnN0YXR1cyA9IGRlZmF1bHRzdGF0dXMgfHwgZmFsc2VcclxuICAgIHRoaXMuY2IgPSBmbiB8fCBmdW5jdGlvbigpIHt9XHJcbiAgICB0aGlzLmJpbmRFdmVudCgpXHJcbiAgfVxyXG4gIGJpbmRFdmVudCgpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzXHJcbiAgICB0aGlzLiRzd2l0Y2guY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAgICQodGhpcykudG9nZ2xlQ2xhc3MoJ29wZW4nKVxyXG4gICAgICBzZWxmLnN0YXR1cyA9ICFzZWxmLnN0YXR1c1xyXG4gICAgICBzZWxmLmNiICYmIHNlbGYuY2Ioc2VsZi5zdGF0dXMpXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHsgQ2hlY2tCb3hJdGVtLCBSYWRpb0JveEl0ZW0sIFN3aXRjaCB9XHJcblxyXG4iLCJjb25zdCBkb3duTG9hZFNldHRpbmdNb2R1bGVUcGwgPSBgPGRpdiBpZD1cImhnY19yZXBvcnRCb3hcIj5cclxuPGRpdiBjbGFzcz1cImhnY19yZXBvcnRcIj5cclxuICAgIDxoMiBjbGFzcz1cInRpdGxlXCI+5LiL6L295oql6KGoIDxpIGNsYXNzPVwiaGNsb3NlXCI+WDwvaT48L2gyPlxyXG4gICAgPGRpdiBjbGFzcz1cInNldHRpbmdcIiBpZD1cInNldHRpbmdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVwb3J0SXRlbSB7aXNTaW5nbGV9XCI+XHJcbiAgICAgICAgICAgIDxlbSBjbGFzcz1cIm9wdGlvblRpdGxlXCI+5LiL6L295a+56LGhOjwvZW0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zQ29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZG93bkxvYWRPYmplY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ3b3JkIGN1cnJlbnRcIiBkYXRhLWlkPVwiMVwiPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZXhjZWxcIiBkYXRhLWlkPVwiMlwiPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGVhY2hlclwiIGRhdGEtaWQ9XCIzXCI+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJlcnJvclRlblwiIGRhdGEtaWQ9XCI0XCI+PC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYW5zZWxPcHRpb25zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXBvcnRJdGVtXCIgaWQ9XCJyZXBvcnRDb250ZW50T3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XCJvcHRpb25UaXRsZVwiPuaKpeihqOWGheWuuTo8L2VtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNDb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfY2hlY2tCb3hcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVwb3J0SXRlbSBoaWRlXCIgaWQ9XCJleGFtQ2xhc3NCb3hcIj5cclxuICAgICAgICAgICAgPGVtIGNsYXNzPVwib3B0aW9uVGl0bGVcIj7ogIPor5Xnj63nuqc6PC9lbT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNDb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG93bkxvYWQgY2FuRG93bkxvYWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInRhZ1wiPuWPr+S4i+i9vTwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9jaGVja0JveFwiIGlkPVwiY2FuRG93bkxvYWRFeGFtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3duTG9hZCBub0Rvd25Mb2FkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ0YWdcIj7kuI3lj6/kuIvovb08L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfY2hlY2tCb3hcIiBpZD1cIm5vRG93bkxvYWRFeGFtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbnNlbE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcG9ydEl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cIm9wdGlvblRpdGxlXCI+PC9lbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zQ29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHlsZUNoYW5nZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpcCBkb3duXCI+54mI5byP5YiH5o2iPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zZy10ZXh0IG9wdGlvbnMtd29yZFwiID7ms6jvvJrpopjlj7fotoXov4c1MOmimOeahOiAg+ivleS7heiDveaUr+aMgemimOWei+eJiDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0eWxlQm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hhcnRTdHlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz48c3Bhbj7nj63nuqflrabnlJ/miJDnu6nliIbmnpDooag8L3NwYW4+PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hhbmdlQm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX3JhZGlvQm94XCIgaWQ9XCJhY2hpZXZlbWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfcmFkaW9JdGVtIGNoZWNrZWRcIiBkYXRhLW5hbWU9XCJpc1NpbXBsZUNsYXp6QWNoaWV2ZW1lbnRcIiBkYXRhLXN0YXR1cz1cIjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPuWujOaVtOeJiDwvZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX3JhZGlvSXRlbSBcIiBkYXRhLW5hbWU9XCJpc1NpbXBsZUNsYXp6QWNoaWV2ZW1lbnRcIiBkYXRhLXN0YXR1cz1cIjFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPjxzcGFuIGNsYXNzPVwib3B0aW9ucy13b3JkXCI+6aKY5Z6L54mIPC9zcGFuPjxzcGFuIGNsYXNzPVwib3B0aW9ucy1leGNlbFwiPueugOaYk+eJiDwvc3Bhbj48L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm9wdGlvbnMtZXhjZWxcIj7nroDmmJPniYjkuI3mj5Dkvpvpopjnm67nu5/orqHjgIHnrZTplJnkurrmlbDjgIHpgInpobnnu5/orqHjgIHnvLrogIPkurrmlbA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwib3B0aW9ucy13b3JkXCI+6aKY5Y+36LaF6L+HNTDpopjml7bku4Xog73pgInmi6npopjlnovniYjvvIzpopjlnovniYjkuI3mj5Dkvpvpopjnm67nu5/orqHjgIHnrZTplJnkurrmlbDjgIE8YnIgLz7pgInpobnnu5/orqE8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGFydFN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPjxzcGFuPuePree6p+W5s+Wdh+WIhuihqDwvc3Bhbj48L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGFuZ2VCb3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfcmFkaW9Cb3hcIiBpZD1cImF2Z1Njb3JlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9yYWRpb0l0ZW0gY2hlY2tlZFwiIGRhdGEtbmFtZT1cImlzU2ltcGxlQ2xhenpBdmdTY29yZVwiIGRhdGEtc3RhdHVzPVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpPjwvaT48ZW0+5a6M5pW054mIPC9lbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfcmFkaW9JdGVtIFwiIGRhdGEtbmFtZT1cImlzU2ltcGxlQ2xhenpBdmdTY29yZVwiIGRhdGEtc3RhdHVzPVwiMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpPjwvaT48ZW0+PHNwYW4gY2xhc3M9XCJvcHRpb25zLXdvcmRcIj7popjlnovniYg8L3NwYW4+PHNwYW4gY2xhc3M9XCJvcHRpb25zLWV4Y2VsXCI+566A5piT54mIPC9zcGFuPjwvZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwib3B0aW9ucy1leGNlbFwiPueugOaYk+eJiOS4jeaPkOS+m+mimOebrue7n+iuoTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJvcHRpb25zLXdvcmRcIj7popjlj7fotoXov4c1MOmimOaXtuS7heiDvemAieaLqemimOWei+eJiO+8jOmimOWei+eJiOS4jeaPkOS+m+mimOebrue7n+iuoTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYXJ0U3R5bGUgZXhjZWxPcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+PHNwYW4+5bm057qn5a2m55Sf5oiQ57up5YiG5p6Q6KGoPC9zcGFuPjwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYW5nZUJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9yYWRpb0JveFwiIGlkPVwiZ3JhZGVBdmdTY29yZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfcmFkaW9JdGVtIGNoZWNrZWRcIiBkYXRhLW5hbWU9XCJpc1NpbXBsZUdyYWRlQWNoaWV2ZW1lbnRcIiBkYXRhLXN0YXR1cz1cIjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPuWujOaVtOeJiDwvZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX3JhZGlvSXRlbSBcIiBkYXRhLW5hbWU9XCJpc1NpbXBsZUdyYWRlQWNoaWV2ZW1lbnRcIiBkYXRhLXN0YXR1cz1cIjFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPjxzcGFuIGNsYXNzPVwib3B0aW9ucy13b3JkXCI+6aKY5Z6L54mIPC9zcGFuPjxzcGFuIGNsYXNzPVwib3B0aW9ucy1leGNlbFwiPueugOaYk+eJiDwvc3Bhbj48L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm9wdGlvbnMtZXhjZWxcIj7nroDmmJPniYjkuI3mj5Dkvpvpopjnm67nu5/orqHjgIHnrZTplJnkurrmlbDjgIHpgInpobnnu5/orqHjgIHliIbmlbDmrrXkurrmlbA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwib3B0aW9ucy13b3JkXCI+6aKY5Y+36LaF6L+HNTDpopjml7bku4Xog73pgInmi6npopjlnovniYjvvIzpopjlnovniYjkuI3mj5Dkvpvpopjnm67nu5/orqHjgIHnrZTplJnkurrmlbDjgIE8YnIgLz7pgInpobnnu5/orqHjgIHliIbmlbDmrrXkurrmlbA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGFydFN0eWxlIGV4Y2VsT3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hhbmdlQm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfY2hlY2tCb3hcIiBpZD1cInN1YmplY3RSZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfY2hlY2tJdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPuaWh+e7vOeQhue7vOWNleenkeaIkOe7qeaYjue7huaKpeihqDwvZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPu+8iOePree6p+WtpueUn+aIkOe7qeWIhuaekOihqOOAgeePree6p+W5s+Wdh+WIhuihqOOAgeW5tOe6p+WtpueUn+aIkOe7qeWIhuaekOihqO+8iTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcG9ydEl0ZW1cIiBpZD1cInNjb3JlUGFydEVsXCI+XHJcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XCJvcHRpb25UaXRsZVwiPuWIhuauteiuvue9rjo8L2VtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNDb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjb3JlUGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRpcHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPuivpeWIhuauteiuvue9rueUqOS6jumFjee9ruWIhuaVsOauteS6uuaVsOe7n+iuoTwvc3Bhbj48c3Bhbj4gPGk+5rOoOjwvaT4g5YiG5q615YyF5ZCr5Y+z6L6555WM5YC8PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY29yZVNldFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwic2NvcmVzXCIgaWQ9XCJzY29yZUxpc3RcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bnNcIiBpZD1cInNjb3JlT3BlcmF0b3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZCBoYnRuXCI+Kzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlZHVjZSBoYnRuIGRpc2FibGVkXCI+LTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRlbCBoYnRuXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVwb3J0SXRlbVwiIGlkPVwic2NvcmVEaXNwbGF5U2V0dGluZ3NcIj5cclxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cIm9wdGlvblRpdGxlXCI+5pi+56S66K6+572uOjwvZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc0NvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9yYWRpb0JveFwiIGlkPVwic3R1ZGVudEFjaGlldmVtZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX3JhZGlvSXRlbSBjaGVja2VkXCIgZGF0YS1uYW1lPVwic2NvcmVPZkVhY2hRdWVzdGlvblwiIGRhdGEtc3RhdHVzPVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT7lrabnlJ/nrZTmoYg8L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfcmFkaW9JdGVtXCIgZGF0YS1uYW1lPVwic2NvcmVPZkVhY2hRdWVzdGlvblwiIGRhdGEtc3RhdHVzPVwiMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT7lrabnlJ/lvpfliIY8L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogIzk5OTtcIj7vvIjlrabnlJ/miJDnu6nliIbmnpDooajmoLnmja7orr7nva7mmL7npLrvvIk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXBvcnRJdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XCJvcHRpb25UaXRsZVwiPuaAu+WIhuezu+aVsDo8L2VtPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNDb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsU2NvcmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfc3dpdGNoXCIgaWQ9XCJzd2l0Y2gtdG90YWwtc2NvcmVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJkaXNhYmxlZFwiIGRpc2FibGVkIHZhbHVlPVwiMS4yNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj7lkK/nlKjns7vmlbDlkI7vvIzkvJrlj6blpJbmj5DkvpvmjaLnrpflkI7nmoTmgLvliIbmiJDnu6nvvIjljp/lp4vmgLvliIbDl+ezu+aVsO+8iTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm51bWJlci10eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIGlkPVwiY29udGFjdENob2ljZTFcIiBuYW1lPVwicmV0YWluXCIgdmFsdWU9XCIxXCIgY2hlY2tlZCBkaXNhYmxlZD5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY29udGFjdENob2ljZTFcIj7kv53nlZnlsI/mlbA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBpZD1cImNvbnRhY3RDaG9pY2UyXCIgbmFtZT1cInJldGFpblwiIHZhbHVlPVwiMFwiICBkaXNhYmxlZD5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY29udGFjdENob2ljZTJcIj7kv53nlZnmlbTmlbA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVwb3J0SXRlbVwiIGlkPVwicGFwZXJTaXplU2V0dGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVwib3B0aW9uVGl0bGVcIj7nurjlvKDorr7nva46PC9lbT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zQ29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX3JhZGlvQm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX3JhZGlvSXRlbSBjaGVja2VkXCIgZGF0YS1uYW1lPVwicGFwZXJTaXplVHlwZVwiIGRhdGEtc3RhdHVzPVwiMVwiIGlkPVwiaGFzWGE0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPkE05qiq5ZCRPC9lbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX3JhZGlvSXRlbVwiIGRhdGEtbmFtZT1cInBhcGVyU2l6ZVR5cGVcIiBkYXRhLXN0YXR1cz1cIjJcIiBpZD1cImhhc1lhM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT5BM+e6teWQkTwvZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9yYWRpb0l0ZW1cIiBkYXRhLW5hbWU9XCJwYXBlclNpemVUeXBlXCIgZGF0YS1zdGF0dXM9XCIzXCIgaWQ9XCJoYXNYYTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpPjwvaT48ZW0+QTPmqKrlkJE8L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogIzk5OTtcIiBjbGFzcz1cInBhcGVyLXRpcHNcIj48aT7vvJ88L2k+PGVtPumimOebruaVsOi2hei/hzQw5pe26buY6K6k5Li6QTPmqKrlkJE8L2VtPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcG9ydEl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cIm9wdGlvblRpdGxlXCI+5o6S5ZCN5Y2H6ZmNOjwvZW0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc0NvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG90YWxTY29yZSByYW5raW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX3N3aXRjaFwiIGlkPVwic3dpdGNoLXJhbmtpbmdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+5ZCv55So5ZCO77yM5Lya5Zyo54+t57qn5oiQ57up5YiG5p6Q6KGo5Lit5pi+56S654+t57qn5o6S5ZCN5Y2H6ZmN77yM5bm057qn5o6S5ZCN5Y2H6ZmNPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJoaWdoU2V0dGluZ1wiIGlkPVwiaGlnaFNldHRpbmdcIj48c3Bhbj7pq5jnuqforr7nva48L3NwYW4+PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJub3NldHRpbmdcIiBpZD1cIm5vc2V0dGluZ1wiPiA8c3Bhbj48L3NwYW4+IDxzdHJvbmc+6ZSZ6aKY5YmN5Y2B5peg6ZyA6YWN572u77yM55u05o6l5LiL6L295Y2z5Y+vPC9zdHJvbmc+IDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyT3B0aW9uc1wiIGlkPVwiZmlsdGVyT3B0aW9uc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGFydFN0eWxlXCI+XHJcbiAgICAgICAgICAgIDxoMz48c3Bhbj7lrabnlJ/kv6Hmga88L3NwYW4+PC9oMz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoYW5nZUJveFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfY2hlY2tCb3hcIiBpZD1cInN0dWRlbnRzU2V0dGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX2NoZWNrSXRlbSBjaGVja0FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPuWFqOmAiTwvZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfY2hlY2tJdGVtIGNoZWNrZWQgZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT7lrabnlJ/lp5PlkI08L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX2NoZWNrSXRlbVwiIGRhdGEtbmFtZT1cImhhc1N0dWRlbnRTeXN0ZW1DYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpPjwvaT48ZW0+57O757uf5YeG6ICD6K+B5Y+3PC9lbT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9jaGVja0l0ZW1cIiBkYXRhLW5hbWU9XCJoYXNTdHVkZW50U2Nob29sQ2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPuWtpuagoeWHhuiAg+ivgeWPtzwvZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfY2hlY2tJdGVtXCIgZGF0YS1uYW1lPVwiaGFzSWROdW1iZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT7ouqvku73or4Hlj7c8L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX2NoZWNrSXRlbVwiIGRhdGEtbmFtZT1cImhhc1N0dWRlbnROb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPuWtpuWPtzwvZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNoYXJ0U3R5bGVcIj5cclxuICAgICAgICAgICAgPGgzPjxzcGFuPui/h+a7pOadoeS7tjwvc3Bhbj48L2gzPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hhbmdlQm94XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaF9jaGVja0JveFwiIGlkPVwiZmlsdGVyU2V0dGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX2NoZWNrSXRlbSBjaGVja0FsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aT48L2k+PGVtPuWFqOmAiTwvZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhfY2hlY2tJdGVtICBcIiBkYXRhLW5hbWU9XCJyZW1vdmVPdXRlclN0dWRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGk+PC9pPjxlbT7lj6rmmL7npLrlnKjnsY3nlJ88L2VtPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoX2NoZWNrSXRlbVwiIGRhdGEtbmFtZT1cInJlbW92ZVplcm9TdHVkZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpPjwvaT48ZW0+6L+H5rukMOWIhuiAg+eUnzwvZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNoYXJ0U3R5bGVcIj5cclxuICAgICAgICAgICAgPGgzPjxzcGFuPui+vue6v+eOh+iuvue9rjwvc3Bhbj48L2gzPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hhbmdlQm94IGNvbXBsaWFuY2VSYXRlXCIgaWQ9XCJjb21wbGlhbmNlUmF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXNhYmxlZFwiPjEwMCU8L3NwYW4+PGk+4omlPC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+5LyY56eA546HPC9zcGFuPjxpPuKJpTwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuPjxpbnB1dCBkYXRhLW5hbWU9XCJleGNlbGxlbnRSYXRpb1wiIGlkPVwiZXhjZWxsZW50UmF0aW9cIiB0eXBlPVwidGV4dFwiIHZhbHVlPVwiOTBcIj4lPC9zcGFuPjxpPj48L2k+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj7oia/lpb3njoc8L3NwYW4+PGk+4omlPC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+PGlucHV0IGRhdGEtbmFtZT1cImdvb2RSYXRpb1wiIGlkPVwiZ29vZFJhdGlvXCIgdHlwZT1cInRleHRcIiB2YWx1ZT1cIjgwXCI+JTwvc3Bhbj48aT4+PC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+5Lit562J546HPC9zcGFuPjxpPuKJpTwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuPjxpbnB1dCBkYXRhLW5hbWU9XCJtZWRpdW1SYXRpb1wiIGlkPVwibWVkaXVtUmF0aW9cIiB0eXBlPVwidGV4dFwiIHZhbHVlPVwiNjBcIj4lPC9zcGFuPjxpPj48L2k+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj7kuI3lj4rmoLznjoc8L3NwYW4+PGk+4omlPC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXNhYmxlZFwiPjAlPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8cCBjbGFzcz1cInRpcHNcIj48aSBjbGFzcz1cIm5vdGljZVwiPuazqDo8L2k+IOS4gOasoemFjee9ruS/neWtmOWQju+8jOWQjue7reS4i+i9veS7jeayv+eUqOW9k+WJjemFjee9rjwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInN1Ym1pdEJ0bnMgc2F2ZVNldHRpbmdCdG4gXCIgaWQ9XCJoX3NhdmVTZXR0aW5nQnRuXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImVuc3VyZSBoYnRuXCI+5L+d5a2Y5bm26L+U5ZuePC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbmNlbCBoYnRuXCI+5Y+W5raI5bm26L+U5ZuePC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzdWJtaXRCdG5zIHN1Ym1pdEJ0biBmbGV4XCIgaWQ9XCJoX3N1Ym1pdEJ0blwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbnN1cmUgaGJ0blwiPuS4i+i9vTwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcmVhdGUgaGJ0blwiPueUn+aIkDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYW5jZWwgaGJ0blwiPuWPlua2iDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48L2Rpdj5gXHJcblxyXG5jb25zdCBkb3duTG9hZE1vZHVsZUxpc3RUcGwgPSBgPGRpdiBpZD1cImhnY19yZXBvcnRCb3hcIj5cclxuPGRpdiBjbGFzcz1cImhnY19yZXBvcnRcIj5cclxuICAgIDxoMiBjbGFzcz1cInRpdGxlXCI+5LiL6L296L+b5bqmIDxpIGNsYXNzPVwiaGNsb3NlXCI+WDwvaT48L2gyPlxyXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJJdGVtXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPuWtpuenke+8mjwvc3Bhbj5cclxuICAgICAgICAgICAgPHNlbGVjdCBpZD1cInN1YmplY3RGaWx0ZXJcIj48L3NlbGVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVySXRlbVwiPlxyXG4gICAgICAgICAgICA8c3Bhbj7nirbmgIHvvJo8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJzdGF0dXNGaWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj7lhajpg6g8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxXCI+5pyq55Sf5oiQPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMlwiPuW3sueUn+aIkDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjNcIj7nlJ/miJDlpLHotKU8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJoX2NoZWNrQm94IGRvd25Mb2FkTGlzdFwiIGlkPVwiZG93bkxvYWRMaXN0XCI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgaWQ9XCJoX3BhZ2luYXRpb25cIiBjbGFzcz1cIm0tc3R5bGUgaC1wYWdpbmF0aW9uXCI+PC9kaXY+XHJcbjwvZGl2PlxyXG48L2Rpdj5gXHJcblxyXG5jb25zdCBkb3duTG9hZFNldHRpbmdNb2R1bGVDcmVhdGUgPSBgPGRpdiBpZD1cInNjX2NyZWF0ZUJveFwiPlxyXG48ZGl2IGNsYXNzPVwic2MtcmVwb3J0XCI+XHJcbiAgPGRpdiBjbGFzcz1cInNjX2Nsb3NlXCI+w5c8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwic2NfY29udGVudFwiPlxyXG4gICAgICDlt7LnlJ/miJDvvIzor7fpgInmi6nkuIvkuIDmraXmk43kvZzvvIFcclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwic2Nfc3VibWl0QnRuc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY3JlYXRlIGhidG5cIj7miZPljbA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImVuc3VyZSBoYnRuXCI+5LiL6L29PC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48L2Rpdj5gXHJcbmV4cG9ydCB7IGRvd25Mb2FkU2V0dGluZ01vZHVsZVRwbCwgZG93bkxvYWRNb2R1bGVMaXN0VHBsLGRvd25Mb2FkU2V0dGluZ01vZHVsZUNyZWF0ZSB9XHJcbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSdcclxuaW1wb3J0IEFwaSBmcm9tICcuL2FwaSdcclxuaW1wb3J0IHsgQ2hlY2tCb3hJdGVtLCBSYWRpb0JveEl0ZW0sIFN3aXRjaCB9IGZyb20gJy4vY29tcG9uZW50J1xyXG5pbXBvcnQgJy4vcGFnaW5hdGlvbidcclxuaW1wb3J0ICcuL3JlcG9ydC5zY3NzJ1xyXG5pbXBvcnQgeyBkb3duTG9hZE1vZHVsZUxpc3RUcGwsIGRvd25Mb2FkU2V0dGluZ01vZHVsZVRwbCBhcyBodG1sVHBsLGRvd25Mb2FkU2V0dGluZ01vZHVsZUNyZWF0ZSB9IGZyb20gJy4vdGVtcGxhdGUnXHJcbmltcG9ydCB7IElTX0JBVENIRE9XTkxPQUQsIElTX1RISURSRCwgbWl4LCBzaW1wbGVDb3B5IH0gZnJvbSAnLi91dGlscydcclxubGV0IERvd25Mb2FkTW9kZWxJbnN0YW5jZSA9IG51bGxcclxubGV0IERvd25Mb2FkTW9kZWxMaXN0SW5zdGFuY2UgPSBudWxsXHJcbmxldCBEb3duTG9hZFVSTCA9IG51bGxcclxuLyoqXHJcbiAqIOaWh+aho+S4i+i9veW8ueahhuWIhuS4ulxyXG4gKiAxIOWNleaWh+S7tuS4i+i9vVxyXG4gKiAyIOaJuemHj+S4i+i9vVxyXG4gKiDlkowg44CQ5Y2V5paH5Lu25LiL6L2944CR55u45q+U44CQ5om56YeP5LiL6L2944CR5Y+q5piv5aSa5LqG44CQ54+t57qn6YCJ5oup44CR55qE5qaC5b+1XHJcbiAqIOmHjOmdoueahOmrmOe6p+iuvue9ruaYr+S4gOagt+eahFxyXG4gKi9cclxuXHJcbiAvKipcclxuICrorr/pl67lnLDlnYAgaHR0cDovL2xvY2FsaG9zdDo4MDgxLyMvZXhwb3J0L2JhdGNoXHJcbiAqKi9cclxuXHJcbmNsYXNzIFRwbHMge1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5kb3duTG9hZFR5cGUgPSB7XHJcbiAgICAgIHdvcmQ6IDEsXHJcbiAgICAgIGV4Y2VsOiAyLFxyXG4gICAgICB0ZWFjaGVyOiAzLFxyXG4gICAgICBlcnJvcjogNFxyXG4gICAgfVxyXG4gICAgdGhpcy5jaGVja0FsbFRwbCA9IGA8ZGl2IGNsYXNzPVwiaF9jaGVja0l0ZW0gY2hlY2tBbGxcIj5cclxuICAgICAgICAgIDxpPjwvaT48ZW0+5YWo6YCJPC9lbT5cclxuICAgICAgPC9kaXY+YFxyXG4gICAgdGhpcy5yZXBvcnRDb250ZW50T3B0aW9uVHBsID0gYDxkaXYgY2xhc3M9XCJoX2NoZWNrSXRlbVwiIGRhdGEtaWQ9XCJ7aWR9XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpPjwvaT48ZW0+e25hbWV9PC9lbT5cclxuICAgICAgICAgICAgICA8L2Rpdj5gXHJcbiAgICB0aGlzLnNjb3JlUGFydFRwbCA9IGA8bGkgY2xhc3M9XCJudW1iZXJcIj48aW5wdXQgdHlwZT1cInRleHRcIiB2YWx1ZT1cIntzY29yZX1cIiBkYXRhLWluZGV4PVwie2luZGV4fVwiPjwvbGk+XHJcbiAgICA8bGkgY2xhc3M9XCJsaW5lXCI+PC9saT5gXHJcbiAgICB0aGlzLnNjb3JlUGFydFplcm9UcGwgPSBgPGxpIGNsYXNzPVwibnVtYmVyIGxhc3RcIj4wPC9saT5gXHJcbiAgICB0aGlzLmNhbkRvd25Mb2FkQ2xhc3NUcGwgPSBgPGRpdiBjbGFzcz1cImhfY2hlY2tJdGVtXCIgZGF0YS1pZD1cIntpZH1cIj5cclxuICAgICAgICAgICAgPGk+PC9pPjxlbT57Y2xhc3NOYW1lfTwvZW0+XHJcbiAgICAgICAgPC9kaXY+YFxyXG4gICAgdGhpcy5ub0Rvd25Mb2FkQ2xhc3NUcGwgPSBgPGRpdiBjbGFzcz1cImhfY2hlY2tJdGVtIGRpc2FibGVkXCI+XHJcbiAgICAgICAgPGk+PC9pPjxlbT57Y2xhc3NOYW1lfTwvZW0+XHJcbiAgICA8L2Rpdj5gXHJcbiAgICB0aGlzLmRvd25Mb2FkTGlzdEl0ZW1UcGwgPSBgPGRpdiBjbGFzcz1cImhfY2hlY2tJdGVtIHtpc0Rpc2FiZWxkfVwiIGRhdGEtaWQ9XCJ7aWR9XCI+XHJcbiAgICA8aT48L2k+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZG93bkxvYWRJbmZvXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm9cIj5cclxuICAgICAgICAgICAgPGgzPntleGFtTmFtZX08L2gzPlxyXG4gICAgICAgICAgICA8cD48c3Bhbj7lrabnp5HvvJp7c3ViamVjdH08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuPuS4i+i9veWvueixoe+8mntkb3dubG9hZE5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwidHh0XCI+XHJcbiAgICAgICAgICAgICAgICB7Y29tcGxldGVkU3RhdHVzfe+8mntjbGFzc0xlbmd0aH3kuKrnj63nuqdcclxuICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwidGlwYm94XCI+e2NsYXNzTGlzdH08L2I+XHJcbiAgICAgICAgICAgICAgPC9zdHJvbmc+XHJcbiAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cInRpcCB7aXNIaWRlfVwiPlxyXG4gICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJ0aXBib3hcIj57ZXJyb3JNc2d9PC9iPlxyXG4gICAgICAgICAgICAgIDwvc3Ryb25nPlxyXG5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhidG5zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLWJ0biBjcmVhdGUgc2luZ2xlQnRuIHtpc0Rpc2FiZWxkfSB7aXNTaG93fVwiICBkYXRhLWlkPVwie2lkfVwiIGRhdGEtemlwVXJsPVwie3ppcFVybH1cIj7miZPljbA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtYnRuIHNpbmdsZUJ0biB7aXNEaXNhYmVsZH1cIiBkYXRhLWlkPVwie2lkfVwiIGRhdGEtemlwVXJsPVwie3ppcFVybH1cIj7kuIvovb08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlbCBzaW5nbGVCdG5cIiBkYXRhLWlkPVwie2lkfVwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PmBcclxuICAgIHRoaXMuYmF0Y2hDaGVja0FsbFRwbCA9IGA8ZGl2IGNsYXNzPVwiaF9jaGVja0l0ZW0gY2hlY2tBbGxcIj5cclxuICAgIDxpPjwvaT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYXRjaEJ0bnNcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5vdGljZSBvcHJhdG9yQnRuXCI+5Yig6Zmk6YCJ5Lit6aG5PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PmBcclxuICAgIHRoaXMubm90YXNrVHBsID0gJzxkaXYgY2xhc3M9XCJub3Rhc2tcIj7mmoLml6DkuIvovb3ku7vliqE8L2Rpdj4nXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBtaXhpbnNDbGFzcyA9IFtUcGxzLCBBcGldXHJcbi8v5om56YeP5LiL6L29XHJcbmNsYXNzIEJhdGNoRG93bkxvYWQgZXh0ZW5kcyBtaXgoLi4ubWl4aW5zQ2xhc3MpIHtcclxuICBjb25zdHJ1Y3RvcihleGFtSWQpIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMuZXhhbUlkID0gZXhhbUlkXHJcbiAgICAvL+aJgOacieS4i+i9veWvueixoeePree6p+eahOmbhuWQiFxyXG4gICAgdGhpcy5hbGxDbGFzc0xpc3QgPSBbXVxyXG4gICAgLy/kuIvovb3lr7nosaHlr7nlupTnj63nuqfpm4blkIjnmoTnvJPlrZhcclxuICAgIHRoaXMuY2FjaGVFeGFtVHlwZUZvckNsYXNzID0ge31cclxuICAgIC8v5b2T5YmN5LiL6L295a+56LGh5LiL6Z2iIOmAieaLqeeahOePree6p1xyXG4gICAgdGhpcy5zZWxFeGFtQ2xhc3NEYXRhID0gW11cclxuICAgIC8v5b2T5YmN5riy5p+T55qE54+t57qn5pWw5o2uXHJcbiAgICAvL3dvcmQgIGV4Y2VsIOaVmeWtpuWunSDplJnpopjliY3ljYEg5a+55bqU5Y+v5LiL6L2955qE54+t57qn6YO95LiN5LiA5qC3XHJcbiAgICB0aGlzLmNhbkRvd25Mb2FkRXhhbUxpc3REYXRhID0gW11cclxuICAgIHRoaXMubm9Eb3duTG9hZEV4YW1MaXN0RGF0YSA9IFtdXHJcbiAgfVxyXG4gIGJhdGNoSW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdERvbSgpXHJcbiAgICB0aGlzLmJpbmRFdmVudCgpXHJcbiAgICAvL+abtOaWsOmUmemimOWJjeWNgSDlkozorrLmoYjnmoTpl67pophcclxuICAgIC8vSVNfVEhJRFJEICYmIHRoaXMuc3ViamVjdElkICE9ICc4J1xyXG4gICAgaWYgKCF0aGlzLmlzTWF0aFN1YmplY3QpIHtcclxuICAgICAgLy/mlZnlrablrp3lkozplJnpopjliY3ljYHmj5DnpLrpl67pophcclxuICAgICAgdGhpcy5kb3dubG9hZFR5cGVUZXh0Tm90aWNlID0ge1xyXG4gICAgICAgIFt0aGlzLmRvd25Mb2FkVHlwZS50ZWFjaGVyXTogJ+ivpeWtpuenkeaaguS4jeaUr+aMgeaJuemHj+S4i+i9veaVmeWtpuWunScsXHJcbiAgICAgICAgW3RoaXMuZG93bkxvYWRUeXBlLmVycm9yXTogJ+W9k+WJjeenkeebruaaguacquS4iue6v+mUmemimOWJjeWNgSdcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBpbml0RG9tKCkge1xyXG4gICAgJCgnI2V4YW1DbGFzc0JveCcpLnJlbW92ZUNsYXNzKCdoaWRlJylcclxuICAgIHRoaXMuJGNhbkRvd25Mb2FkRXhhbSA9ICQoJyNjYW5Eb3duTG9hZEV4YW0nKVxyXG4gICAgdGhpcy4kbm9Eb3duTG9hZEV4YW0gPSAkKCcjbm9Eb3duTG9hZEV4YW0nKVxyXG4gIH1cclxuICBhc3luYyBnZXRFeGFtQ2xhc3NMaXN0KGNiKSB7XHJcbiAgICAvLy8vY29uc29sZS5sb2codGhpcy5leGFtSWQpXHJcbiAgICBjb25zdCBleGFtQ2xhc3NMaXN0ID0gYXdhaXQgdGhpcy5nZXRFeGFtQ2xhc3ModGhpcy5leGFtSWQpXHJcbiAgICBsZXQgcmVzdWx0ID0gSlNPTi5wYXJzZShleGFtQ2xhc3NMaXN0KVxyXG4gICAgdGhpcy5hbGxDbGFzc0xpc3QgPSByZXN1bHQuc3VjY2VzcyA/IHJlc3VsdC5kYXRhLmNsYXNzIDogW11cclxuICAgIGNvbnNvbGUubG9nKHJlc3VsdClcclxuXHJcbiAgICB0aGlzLmluaXRTdGF0dXNGb3JEb3dubGFvZFR5cGUodGhpcy5kb3duTG9hZERhdGEuZG93bmxvYWRfdHlwZSlcclxuICAgIC8vdGhpcy51cGRhdGVSZW5kZXJFeGFtTGlzdERhdGEoJ3dvcmQnKVxyXG4gICAgaWYoIXJlc3VsdC5kYXRhLnNjb3JlUGFydCl7XHJcbiAgICAgICQoJyNzY29yZVBhcnRFbCcpLmhpZGUoKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmRvd25Mb2FkRGF0YS5zY29yZVNlY3Rpb24gPSByZXN1bHQuZGF0YS5zY29yZVBhcnQuc3BsaWNlKFxyXG4gICAgICAwLFxyXG4gICAgICByZXN1bHQuZGF0YS5zY29yZVBhcnQubGVuZ3RoIC0gMVxyXG4gICAgKVxyXG4gICAgY2IgJiYgY2IocmVzdWx0LmRhdGEuc2NvcmVQYXJ0KVxyXG4gIH1cclxuICB1cGRhdGVSZW5kZXJFeGFtTGlzdERhdGEoa2V5KSB7XHJcbiAgICB0aGlzLnNlbEV4YW1DbGFzc0RhdGEgPSBbXVxyXG4gICAgaWYgKHRoaXMuY2FjaGVFeGFtVHlwZUZvckNsYXNzW2tleV0pIHtcclxuICAgICAgdGhpcy5jYW5Eb3duTG9hZEV4YW1MaXN0RGF0YSA9IHRoaXMuY2FjaGVFeGFtVHlwZUZvckNsYXNzW2tleV0uY2FuXHJcbiAgICAgIHRoaXMubm9Eb3duTG9hZEV4YW1MaXN0RGF0YSA9IHRoaXMuY2FjaGVFeGFtVHlwZUZvckNsYXNzW2tleV0ubm9cclxuICAgICAgdGhpcy5yZW5kZXJFeGFtTGlzdCgpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IGlzRXhjZWwgPSBrZXkgPT09ICdleGNlbCdcclxuXHJcbiAgICAvL+e8k+WtmOWPr+S7peS4i+i9veWSjOS4jeWPr+S4i+i9veeahFxyXG4gICAgY29uc3QgY2FjaGVFeGFtSXRlbSA9ICh0aGlzLmNhY2hlRXhhbVR5cGVGb3JDbGFzc1trZXldID0ge1xyXG4gICAgICBjYW46IFtdLFxyXG4gICAgICBubzogW11cclxuICAgIH0pXHJcbiAgICAvL+WmguaenOayoeacieWujOaIkOmYheWNt1xyXG4gICAgdGhpcy5jYW5Eb3duTG9hZEV4YW1MaXN0RGF0YSA9ICBjYWNoZUV4YW1JdGVtLmNhbiA9IHRoaXMuYWxsQ2xhc3NMaXN0LmZpbHRlcihcclxuICAgICAgdiA9PiB2W2tleV1cclxuICAgICk7XHJcbiAgICB0aGlzLm5vRG93bkxvYWRFeGFtTGlzdERhdGEgPSBjYWNoZUV4YW1JdGVtLm5vID0gIHRoaXMuYWxsQ2xhc3NMaXN0LmZpbHRlcihcclxuICAgICAgdiA9PiAhdltrZXldXHJcbiAgICApXHJcbiAgICB0aGlzLnJlbmRlckV4YW1MaXN0KClcclxuICB9XHJcbiAgcmVuZGVyRXhhbUxpc3QoKSB7XHJcbiAgICBsZXQgZXhhbUNsYXNzSHRtbCA9IHRoaXMuY2FuRG93bkxvYWRFeGFtTGlzdERhdGEucmVkdWNlKFxyXG4gICAgICAoZXhhbUh0bWwsIGl0ZW0pID0+IHtcclxuICAgICAgICBleGFtSHRtbCArPSB0aGlzLmNhbkRvd25Mb2FkQ2xhc3NUcGwuc3Vic3RpdHV0ZShpdGVtKVxyXG4gICAgICAgIHJldHVybiBleGFtSHRtbFxyXG4gICAgICB9LFxyXG4gICAgICAnJ1xyXG4gICAgKVxyXG4gICAgLy8vL2NvbnNvbGUubG9nKHRoaXMubm9Eb3duTG9hZEV4YW1MaXN0RGF0YSlcclxuICAgIGxldCBleGFtQ2xhc3NIdG1sRGlzYWJsZWQgPSB0aGlzLm5vRG93bkxvYWRFeGFtTGlzdERhdGEucmVkdWNlKFxyXG4gICAgICAoZXhhbUh0bWwsIGl0ZW0pID0+IHtcclxuICAgICAgICBleGFtSHRtbCArPSB0aGlzLm5vRG93bkxvYWRDbGFzc1RwbC5zdWJzdGl0dXRlKGl0ZW0pXHJcbiAgICAgICAgcmV0dXJuIGV4YW1IdG1sXHJcbiAgICAgIH0sXHJcbiAgICAgICcnXHJcbiAgICApXHJcbiAgICB0aGlzLiRjYW5Eb3duTG9hZEV4YW0uaHRtbChcclxuICAgICAgZXhhbUNsYXNzSHRtbCA/IHRoaXMuY2hlY2tBbGxUcGwgKyBleGFtQ2xhc3NIdG1sIDogJ+aaguaXoOWPr+S4i+i9veeahOePree6pydcclxuICAgIClcclxuICAgIHRoaXMuJG5vRG93bkxvYWRFeGFtLmh0bWwoXHJcbiAgICAgIGV4YW1DbGFzc0h0bWxEaXNhYmxlZCA/IGV4YW1DbGFzc0h0bWxEaXNhYmxlZCA6ICfmmoLml6DkuI3lj6/kuIvovb3nmoTnj63nuqcnXHJcbiAgICApXHJcbiAgICAvL+mHjee9ruWPr+S7pemAieaLqeeahOiAg+ivleePree6p+eahOS4quaVsOetieS/oeaBr1xyXG4gICAgdGhpcy5yZXNldENhbkRvd25Mb2FkQ2hlY2tCb3goKVxyXG4gIH1cclxuICByZXNldENhbkRvd25Mb2FkQ2hlY2tCb3goKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuY2FuRG93bkxvYWRFeGFtQ2hlY2ssIHtcclxuICAgICAgdG90YWxDb3VudDogdGhpcy5jYW5Eb3duTG9hZEV4YW1MaXN0RGF0YS5sZW5ndGgsXHJcbiAgICAgIGNoZWNrZWRJdGVtc0NvdW50OiAwXHJcbiAgICB9KVxyXG4gIH1cclxuICBiaW5kRXZlbnQoKSB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpc1xyXG4gICAgc2VsZi5jYW5Eb3duTG9hZEV4YW1DaGVjayA9IG5ldyBDaGVja0JveEl0ZW0oXHJcbiAgICAgIHNlbGYuJGNhbkRvd25Mb2FkRXhhbSxcclxuICAgICAgZnVuY3Rpb24oJGNoZWNrQWxsSXRlbSwgc3RhdHVzKSB7XHJcbiAgICAgICAgc2VsZi5zZWxFeGFtQ2xhc3NEYXRhID0gc3RhdHVzXHJcbiAgICAgICAgICA/IHNlbGYuY2FuRG93bkxvYWRFeGFtTGlzdERhdGEubWFwKHYgPT4gKHtcclxuICAgICAgICAgICAgICBpZDogdi5pZCxcclxuICAgICAgICAgICAgICBjbGFzc05hbWU6IHYuY2xhc3NOYW1lXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgOiBbXVxyXG4gICAgICAgIC8vLy9jb25zb2xlLmxvZygn6YCJ5oup55qE54+t57qnJywgc2VsZi5zZWxFeGFtQ2xhc3NEYXRhKVxyXG4gICAgICB9LFxyXG4gICAgICBmdW5jdGlvbigkY2hlY2tJdGVtLCBzdGF0dXMpIHtcclxuICAgICAgICBsZXQgY3VySWQgPSAkY2hlY2tJdGVtLmF0dHIoJ2RhdGEtaWQnKVxyXG4gICAgICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgICAgIGxldCBjdXJFeGFtQ2xhc3MgPSBzZWxmLmNhbkRvd25Mb2FkRXhhbUxpc3REYXRhLmZpbmQoXHJcbiAgICAgICAgICAgIHYgPT4gdi5pZCA9PSBjdXJJZFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgc2VsZi5zZWxFeGFtQ2xhc3NEYXRhLnB1c2goc2ltcGxlQ29weShjdXJFeGFtQ2xhc3MpKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgY3VySW5kZXggPSBzZWxmLnNlbEV4YW1DbGFzc0RhdGEuZmluZEluZGV4KHYgPT4gdi5pZCA9PSBjdXJJZClcclxuICAgICAgICAgIHNlbGYuc2VsRXhhbUNsYXNzRGF0YS5zcGxpY2UoY3VySW5kZXgsIDEpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vLy9jb25zb2xlLmxvZygn6YCJ5oup55qE54+t57qnJywgc2VsZi5zZWxFeGFtQ2xhc3NEYXRhKVxyXG4gICAgICB9XHJcbiAgICApXHJcbiAgfVxyXG59XHJcbi8v5Yik5pat5piv5ZCm6ZyA6KaB5om56YeP5LiL6L2955qE5Yqf6IO9XHJcbmlmIChJU19CQVRDSERPV05MT0FEKSB7XHJcbiAgbWl4aW5zQ2xhc3MucHVzaChCYXRjaERvd25Mb2FkKVxyXG59XHJcbi8v5LiL6L296K6+572u5by55qGGXHJcbmNsYXNzIERvd25Mb2FkTW9kZWwgZXh0ZW5kcyBtaXgoLi4ubWl4aW5zQ2xhc3MpIHtcclxuICBjb25zdHJ1Y3Rvcih7ZXhhbUlkLCBzdWJqZWN0SWQsIGNsYXNzSWQsIGRvd25Mb2FkVHlwZSxjb21wbGV0ZX0pIHtcclxuICAgIHN1cGVyKGV4YW1JZClcclxuICAgIHRoaXMuZXhhbUlkID0gZXhhbUlkXHJcbiAgICB0aGlzLnN1YmplY3RJZCA9IHN1YmplY3RJZFxyXG4gICAgdGhpcy5jbGFzc0lkID0gY2xhc3NJZFxyXG4gICAgLy/liKTmlq3mmK/lkKblrozmiJDpmIXljbcg5pyq5a6M5oiQ6ZiF5Y235Y+q5pyJZXhjZWwg6YeM6Z2i44CQ6YCJ5oup5L2c562U5piO57uG6KGo44CR6IO95LiL6L29XHJcbiAgICAvL1xyXG4gICAgdGhpcy5pc0NvbXBsZXRlID0gSVNfQkFUQ0hET1dOTE9BRD90cnVlOmNvbXBsZXRlID09PSAnMSdcclxuXHJcbiAgICAvL+WIpOaWreaYr+WQpuaWh+e7vOeQhue7vFxyXG4gICAgdGhpcy5pc1dlbkxpQWxsID0gWycxOCcsICcxOSddLmluY2x1ZGVzKHRoaXMuc3ViamVjdElkKVxyXG4gICAgLy/liKTmlq3mmK/lkKbmlbDlrablrabnp5FcclxuICAgIHRoaXMuaXNNYXRoU3ViamVjdCA9IFsnMycsICc2JywgJzUxJ10uaW5jbHVkZXModGhpcy5zdWJqZWN0SWQpXHJcbiAgICAvL+aVmeWtpuWuneaYr+WQpuWPr+S7peS4i+i9vVxyXG4gICAgdGhpcy50ZWFjaGVyVGFsa2luZ0lzRG93bkxvYWQgPSBmYWxzZVxyXG4gICAgLy/plJnpopjliY3ljYHmmK/lkKblj6/ku6XkuIvovb1cclxuICAgIHRoaXMuZXJyb3JUZW5Jc0Rvd25Mb2FkID0gZmFsc2VcclxuICAgIC8v5pWZ5a2m5a6d5ZKM6ZSZ6aKY5YmN5Y2B5o+Q56S66Zeu6aKYXHJcbiAgICB0aGlzLmRvd25sb2FkVHlwZVRleHROb3RpY2UgPSB7XHJcbiAgICAgIFt0aGlzLmRvd25Mb2FkVHlwZS50ZWFjaGVyXTogJ+aVmeWtpuWuneaXoOmcgOmFjee9ru+8jOebtOaOpeS4i+i9veWNs+WPrycsXHJcbiAgICAgIFt0aGlzLmRvd25Mb2FkVHlwZS5lcnJvcl06IHRoaXMuaXNNYXRoU3ViamVjdFxyXG4gICAgICAgID8gJ+mUmemimOWJjeWNgeaXoOmcgOmFjee9ru+8jOebtOaOpeS4i+i9veWNs+WPrydcclxuICAgICAgICA6ICflvZPliY3np5Hnm67mmoLmnKrkuIrnur/mlZnlrablrp0nXHJcbiAgICB9XHJcblxyXG4gICAgLy/kuIvovb3pgInpobnmj5DkuqTmlbDmja5cclxuICAgIHRoaXMuZG93bkxvYWREYXRhID0ge1xyXG4gICAgICAvLzEgd29yZCAyZXhjZWwgMyDmlZnlrablrp0gNCDplJnpopjmlofmoaNcclxuICAgICAgZG93bmxvYWRfdHlwZTogZG93bkxvYWRUeXBlID8gK2Rvd25Mb2FkVHlwZSA6IHRoaXMuaXNDb21wbGV0ZT90aGlzLmRvd25Mb2FkVHlwZS53b3JkOjIsXHJcbiAgICAgIC8v5oql6KGo57G75Z6LXHJcbiAgICAgIHJlcG9ydFR5cGU6IFtdLFxyXG4gICAgICAvL+ePree6p+WtpueUn+aIkOe7qeWIhuaekOihqCDnroDljZXniYgv5a6M5pW054mIXHJcbiAgICAgIGlzU2ltcGxlQ2xhenpBY2hpZXZlbWVudDogMCxcclxuXHJcbiAgICAgIC8v54+t57qn5bmz5Z2H5YiG5pWw6KGoIOeugOWNleeJiC/lrozmlbTniYhcclxuICAgICAgaXNTaW1wbGVDbGF6ekF2Z1Njb3JlOiAwLFxyXG4gICAgICAvL+W5tOe6p+aIkOe7qeWIhuaekOihqOeugOWNleeJiC/lrozmlbTniYhcclxuICAgICAgaXNTaW1wbGVHcmFkZUFjaGlldmVtZW50OiAwLFxyXG4gICAgICAvL+aYvuekuuiuvue9rlxyXG4gICAgICBzY29yZU9mRWFjaFF1ZXN0aW9uOjAsXHJcbiAgICAgIC8v5YiG5pWw5q61XHJcbiAgICAgIHNjb3JlU2VjdGlvbjogW10sXHJcbiAgICAgIC8v5oC75YiG57O75pWwXHJcbiAgICAgIHRvdGFsU2NvcmVDb2VmZmljaWVudDogLTEsXHJcbiAgICAgIC8v57q45byg57G75Z6LIEE0OjEgQTM6MlxyXG4gICAgICBwYXBlclNpemVUeXBlOjFcclxuICAgIH1cclxuICAgIC8v6auY57qn6K6+572uXHJcbiAgICB0aGlzLmZpcnN0RW50ZXJIaWdoU2V0dGluZyA9IHRydWVcclxuICAgIHRoaXMuaGlnaFNldHRpbmdEYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2hpZ2hTZXR0aW5nJylcclxuICAgICAgPyBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdoaWdoU2V0dGluZycpKVxyXG4gICAgICA6IHtcclxuICAgICAgICAgIC8v57O757uf5YeG6ICD6K+B5Y+3XHJcbiAgICAgICAgICBoYXNTdHVkZW50U3lzdGVtQ2FyZDogMCxcclxuICAgICAgICAgIC8v5a2m5qCh5YeG6ICD6K+B5Y+3XHJcbiAgICAgICAgICBoYXNTdHVkZW50U2Nob29sQ2FyZDogMCxcclxuICAgICAgICAgIC8v6Lqr5Lu96K+B5Y+3XHJcbiAgICAgICAgICBoYXNJZE51bWJlcjogMCxcclxuICAgICAgICAgIC8v6ICD5Y+3XHJcbiAgICAgICAgICBoYXNTdHVkZW50Tm86MCxcclxuICAgICAgICAgIC8v6L+H5ruk5aSW57GN55SfXHJcbiAgICAgICAgICByZW1vdmVPdXRlclN0dWRlbnQ6IDAsXHJcbiAgICAgICAgICAvLyDov4fmu6Qw5YiGXHJcbiAgICAgICAgICByZW1vdmVaZXJvU3R1ZGVudDogMCxcclxuICAgICAgICAgIC8v5LyY56eA546HXHJcbiAgICAgICAgICBleGNlbGxlbnRSYXRpbzogMC45LFxyXG4gICAgICAgICAgLy/oia/lpb3njodcclxuICAgICAgICAgIGdvb2RSYXRpbzogMC44LFxyXG4gICAgICAgICAgLy/kuK3nrYnnjodcclxuICAgICAgICAgIG1lZGl1bVJhdGlvOiAwLjZcclxuICAgICAgICB9XHJcblxyXG4gICAgLy/pkojlr7l3b3JkIOWSjCBleGNlbCDnmoTkuIvovb3lhoXlrrlcclxuICAgIC8qKlxyXG4gICAgICogQ0xBWlpfQUNISUVWRU1FTlQoMCxcIuePree6p+WtpueUn+aIkOe7qeWIhuaekOihqFwiKSxcclxuICAgICAqIENMQVpaX0FWR19TQ09SRSgxLFwi54+t57qn5bmz5Z2H5YiG6KGoXCIpLFxyXG4gICAgICogU1RVREVOVF9BQ0hJRVZFTUVOVF9SQU5LKDIsXCLlrabnlJ/miJDnu6nmjpLlkI3ot5/ouKrooahcIiksXHJcbiAgICBHUkFERV9BQ0hJRVZFTUVOVCgzLFwi5bm057qn5a2m55Sf5oiQ57up5YiG5p6Q6KGoXCIpLFxyXG4gICAgU0NPUkVfU0VDVElPTig0LFwi54+t57qn5YiG5pWw5q616KGoXCIpLFxyXG5cclxuICAgIFNVQkpFQ1RfQUNISUVWRU1FTlQoNSxcIuWQhOWtpuenkeaIkOe7qeWIhuaekOihqFwiKSxcclxuICAgIFdFTl9MSV9aT05HX0FDSElFVkVNRU5UX0RFVEFJTFMoNixcIuaWh+e7vOeQhue7vOWNleenkeaIkOe7qeaYjue7huaKpeihqFwiKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy53b3JkRG93bkxvYWRDb250ZW50T3B0aW9ucyA9IFtcclxuICAgICAgeyBuYW1lOiAn54+t57qn5a2m55Sf5oiQ57up5YiG5p6Q6KGoJywgaWQ6IDAgfSxcclxuICAgICAgeyBuYW1lOiAn54+t57qn5bmz5Z2H5YiG6KGoJywgaWQ6IDEgfSxcclxuICAgICAgeyBuYW1lOiAn54+t57qn5YiG5pWw5q616KGoJywgaWQ6IDQgfVxyXG4gICAgXVxyXG4gICAgdGhpcy5leGNlbERvd25Mb2FkQ29udGVudE9wdGlvbnMgPSBbXHJcbiAgICAgIC4uLnRoaXMud29yZERvd25Mb2FkQ29udGVudE9wdGlvbnMsXHJcbiAgICAgIHsgbmFtZTogJ+W5tOe6p+WtpueUn+aIkOe7qeWIhuaekOihqCcsIGlkOiAzIH0sXHJcbiAgICAgIHsgbmFtZTogJ+WtpueUn+aIkOe7qeaOkuWQjei3n+i4quihqCcsIGlkOiAyIH0sXHJcblxyXG4gICAgICB7IG5hbWU6ICflrabnlJ/kvZznrZTmmI7nu4booagnLCBpZDogNyB9XHJcbiAgICBdXHJcbiAgICAvLyDmlofnu7znkIbnu7zni6zmnInpgInpoblcclxuICAgIGlmICh0aGlzLmlzV2VuTGlBbGwpIHtcclxuICAgICAgdGhpcy5leGNlbERvd25Mb2FkQ29udGVudE9wdGlvbnMuc3BsaWNlKDEsIDAsIHtcclxuICAgICAgICBuYW1lOiAn5ZCE5a2m56eR5oiQ57up5YiG5p6Q6KGoJyxcclxuICAgICAgICBpZDogNVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyUmVwb3J0Q29udGVudE9wdGlvbnMgPSB0aGlzLndvcmREb3duTG9hZENvbnRlbnRPcHRpb25zXHJcblxyXG4gICAgdGhpcy5pbml0c0RvbSgpXHJcblxyXG4gICAgaWYgKElTX0JBVENIRE9XTkxPQUQpIHtcclxuICAgICAgdGhpcy5iYXRjaEluaXQoKVxyXG5cclxuICAgICAgdGhpcy5nZXRFeGFtQ2xhc3NMaXN0KHRoaXMucmVuZGVyU2NvcmVQYXJ0LmJpbmQodGhpcykpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFNjb3JlRGF0YSgpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kRXZlbnRzKClcclxuXHJcbiAgICB0aGlzLnJlbmRlcigpXHJcbiAgfVxyXG4gIGFzeW5jIGdldFNjb3JlRGF0YSgpIHtcclxuICAgIC8vIOWIhuautVxyXG4gICAgY29uc3Qgc2NvcmVQYXJ0RGF0YSA9IGF3YWl0IHRoaXMuZ2V0U2NvcmVQYXJ0KHRoaXMuZXhhbUlkKVxyXG5cclxuICAgIGNvbnN0IHJlcyA9IEpTT04ucGFyc2Uoc2NvcmVQYXJ0RGF0YSlcclxuXHJcbiAgICB0aGlzLmluaXRTdGF0dXNGb3JEb3dubGFvZFR5cGUodGhpcy5kb3duTG9hZERhdGEuZG93bmxvYWRfdHlwZSlcclxuICAgIGlmIChyZXMuc3VjY2Vzcykge1xyXG4gICAgICB0aGlzLmluaXREb3dubG9hZFR5cGVUZXh0Tm90aWNlKHJlcy5kb3dubG9hZF9ydWxlKVxyXG5cclxuICAgICAgdGhpcy5kb3duTG9hZERhdGEuc2NvcmVTZWN0aW9uID0gcmVzLmRhdGEuc3BsaWNlKDAsIHJlcy5kYXRhLmxlbmd0aCAtIDEpXHJcbiAgICAgIHRoaXMucmVuZGVyU2NvcmVQYXJ0KClcclxuICAgIH1cclxuICB9XHJcbiAgaW5pdERvd25sb2FkVHlwZVRleHROb3RpY2UoZG93bmxvYWRfcnVsZSkge1xyXG4gICAgbGV0IHtcclxuICAgICAgaXNfbGVjdHVyZV9kb3dubG9hZDogaXNUZWFjaGVyRG93bkxvYWQsXHJcbiAgICAgIGlzX3RvcHdiX2Rvd25sb2FkOiBpc0Vycm9yVGVuRG93bkxvYWQsXHJcbiAgICAgIGlzX2xlY3R1cmVfZG93bmxvYWRfbXNnOiB0ZWFjaGVyRG93bkxvYWRNc2csXHJcbiAgICAgIGlzX3RvcHdiX2Rvd25sb2FkX21zZzogZXJyb3JEb3duTG9hZE1zZ1xyXG4gICAgfSA9IGRvd25sb2FkX3J1bGVcclxuICAgIC8vIC8v6aKY5Y+36LaF6L+HNTDpopjml7bku4Xog73pgInmi6npopjlnovniYhcclxuICAgIC8vIGlmKHRoaXMuZG93bkxvYWREYXRhLmRvd25sb2FkX3R5cGUpe1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyhkb3dubG9hZF9ydWxlLDg4KVxyXG4gICAgLy8gICAkKCcjYWNoaWV2ZW1lbnQnKS5jaGlsZHJlbignLmhfcmFkaW9JdGVtJykuZXEoMCkuYWRkQ2xhc3MoJ25vdFNlbCcpXHJcbiAgICAvLyAgICQoJyNhdmdTY29yZScpLmNoaWxkcmVuKCcuaF9yYWRpb0l0ZW0nKS5lcSgwKS5hZGRDbGFzcygnbm90U2VsJylcclxuICAgIC8vICAgJCgnI2dyYWRlQXZnU2NvcmUnKS5jaGlsZHJlbignLmhfcmFkaW9JdGVtJykuZXEoMCkuYWRkQ2xhc3MoJ25vdFNlbCcpXHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLnRlYWNoZXJUYWxraW5nSXNEb3duTG9hZCA9IGlzVGVhY2hlckRvd25Mb2FkID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICBpZiAoIWlzVGVhY2hlckRvd25Mb2FkKSB7XHJcbiAgICAgIHRoaXMuZG93bmxvYWRUeXBlVGV4dE5vdGljZVtcclxuICAgICAgICB0aGlzLmRvd25Mb2FkVHlwZS50ZWFjaGVyXHJcbiAgICAgIF0gPSB0ZWFjaGVyRG93bkxvYWRNc2dcclxuICAgICAgICA/IHRlYWNoZXJEb3duTG9hZE1zZ1xyXG4gICAgICAgIDogJ+aVmeWtpuWuneaXoOmcgOmFjee9ru+8jOebtOaOpeS4i+i9veWNs+WPrydcclxuICAgIH1cclxuICAgIHRoaXMuZXJyb3JUZW5Jc0Rvd25Mb2FkID0gaXNFcnJvclRlbkRvd25Mb2FkID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICBpZiAoIWlzRXJyb3JUZW5Eb3duTG9hZCkge1xyXG4gICAgICB0aGlzLmRvd25sb2FkVHlwZVRleHROb3RpY2VbdGhpcy5kb3duTG9hZFR5cGUuZXJyb3JdID0gZXJyb3JEb3duTG9hZE1zZ1xyXG4gICAgICAgID8gSVNfVEhJRFJEXHJcbiAgICAgICAgICA/ICflvZPliY3np5Hnm67mnKrkuIrnur/plJnpopjliY3ljYEnXHJcbiAgICAgICAgICA6IGVycm9yRG93bkxvYWRNc2dcclxuICAgICAgICA6ICfplJnpopjliY3ljYHml6DpnIDphY3nva7vvIznm7TmjqXkuIvovb3ljbPlj68nXHJcbiAgICB9XHJcbiAgfVxyXG4gIGluaXRzRG9tKCkge1xyXG4gICAgJCgnYm9keScpLmFwcGVuZCggIC8vSVNfQkFUQ0hET1dOTE9BRCDmmK/lkKbmibnph49cclxuICAgICAgaHRtbFRwbC5zdWJzdGl0dXRlKHtcclxuICAgICAgICBpc1NpbmdsZTogSVNfQkFUQ0hET1dOTE9BRCA/ICcnIDogJ2hpZGUnXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICAvLyDlpoLmnpzmmK93b3Jk5pi+56S66aKY5Z6L54mIXHJcbiAgICAkKCcjaF9zdWJtaXRCdG4gLmVuc3VyZScpLnNob3coKVxyXG4gICAgaWYodGhpcy5kb3duTG9hZERhdGEuZG93bmxvYWRfdHlwZT09MSl7XHJcbiAgICAgICQoJyNoX3N1Ym1pdEJ0biAuZW5zdXJlJykuaGlkZSgpXHJcbiAgICAgICQoJyNoX3N1Ym1pdEJ0biAuY3JlYXRlJykuc2hvdygpXHJcbiAgICAgICQoJy5vcHRpb25zLWV4Y2VsJykuaGlkZSgpXHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgICQoJy5vcHRpb25zLXdvcmQnKS5oaWRlKClcclxuICAgIH1cclxuXHJcbiAgICAvLyDlpoLmnpzkuI3mmK93b3Jk5pa55byP5omT5byA77yM5LiN5pi+56S657q45byg6K6+572uXHJcbiAgICBpZih0aGlzLmRvd25Mb2FkRGF0YS5kb3dubG9hZF90eXBlICE9IDEpe1xyXG4gICAgICAkKCcjcGFwZXJTaXplU2V0dGluZycpLnJlbW92ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5aaC5p6c5rKh5pyJ5a6M5oiQ6ZiF5Y2377yM6Zmk5LqGZXhjZWzmiqXooajlhbbku5bmiqXooajpg73kuI3og73pgInmi6lcclxuICAgIGlmKCF0aGlzLmlzQ29tcGxldGUpe1xyXG4gICAgICAgICQoJy5kb3duTG9hZE9iamVjdCBsaScpLmFkZENsYXNzKCdkaXNhYmxlZCcpLnJlbW92ZUNsYXNzKCdjdXJyZW50JykuZXEoMSkucmVtb3ZlQ2xhc3MoJ2Rpc2FibGVkJykuYWRkQ2xhc3MoJ2N1cnJlbnQnKTtcclxuICAgIH1cclxuICAgIC8v5YWI6ZqQ6JePZXhjZWwg6YCJ6aG55qih5Z2XXHJcbiAgICAkKCcuZXhjZWxPcHRpb24nKS5oaWRlKClcclxuICAgIC8v5Yik5pat5paH57u855CG57u86YCJ6aG55piv5ZCm5pi+56S6XHJcbiAgICBpZiAoIXRoaXMuaXNXZW5MaUFsbCkge1xyXG4gICAgICAvL2NvbnNvbGUubG9nKCQoJy5leGNlbE9wdGlvbicpKVxyXG4gICAgICAkKCcuZXhjZWxPcHRpb24nKVxyXG4gICAgICAgIC5lcSgxKVxyXG4gICAgICAgIC5yZW1vdmUoKVxyXG4gICAgfVxyXG4gICAgdGhpcy4kcmVwb3J0Q29udGVudE9wdGlvbnMgPSAkKCcjcmVwb3J0Q29udGVudE9wdGlvbiAuaF9jaGVja0JveCcpXHJcbiAgICAvL+WIhuauteezu+aVsFxyXG4gICAgdGhpcy4kdG90YWxTY29yZUNvZWZmaWNpZW50ID0gJCgnLnRvdGFsU2NvcmUgaW5wdXQnKVxyXG4gIH1cclxuICByZW5kZXIoKSB7XHJcbiAgICB0aGlzLnJlbmRlclJlcG9ydENvbnRlbnRPcHRpb24oKVxyXG5cclxuICAgIC8v5Yid5aeL5YyW5LiL6L2957G75Z6L6YCJ6aG5XHJcbiAgICAvL3RoaXMuaW5pdFN0YXR1c0ZvckRvd25sYW9kVHlwZSh0aGlzLmRvd25Mb2FkRGF0YS5kb3dubG9hZF90eXBlKVxyXG4gIH1cclxuICAvL+aKpeihqOWGheWuuemAiemhuVxyXG4gIHJlbmRlclJlcG9ydENvbnRlbnRPcHRpb24oKSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCflvZPliY3pgInmi6nnmoTmiqXooajnsbvlnosnLCB0aGlzLmRvd25Mb2FkRGF0YS5kb3dubG9hZF90eXBlKVxyXG4gICAgY29uc3Qgb3B0aW9ucyA9ICh0aGlzLnJlbmRlclJlcG9ydENvbnRlbnRPcHRpb25zID0gKF90aGlzID0+IHtcclxuICAgICAgY29uc3QgZG93bkxvYWREYXRhID0gX3RoaXMuZG93bkxvYWREYXRhXHJcbiAgICAgIGlmICh+JzF8MicuaW5kZXhPZihkb3duTG9hZERhdGEuZG93bmxvYWRfdHlwZSkpIHtcclxuICAgICAgICByZXR1cm4gZG93bkxvYWREYXRhLmRvd25sb2FkX3R5cGUgPT09IF90aGlzLmRvd25Mb2FkVHlwZS53b3JkXHJcbiAgICAgICAgICA/IF90aGlzLndvcmREb3duTG9hZENvbnRlbnRPcHRpb25zXHJcbiAgICAgICAgICA6IF90aGlzLmV4Y2VsRG93bkxvYWRDb250ZW50T3B0aW9uc1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBbXVxyXG4gICAgICB9XHJcbiAgICB9KSh0aGlzKSlcclxuICAgIGxldCByZXBvcnRDb250ZW50T3B0aW9uSHRtbCA9IHRoaXMuY2hlY2tBbGxUcGwuc3Vic3RpdHV0ZSh7XHJcbiAgICAgIG5hbWU6ICdyZXBvcnRDb250ZW50T3B0aW9uJ1xyXG4gICAgfSlcclxuICAgIGZvciAobGV0IGl0ZW0gb2Ygb3B0aW9ucykge1xyXG4gICAgICByZXBvcnRDb250ZW50T3B0aW9uSHRtbCArPSB0aGlzLnJlcG9ydENvbnRlbnRPcHRpb25UcGwuc3Vic3RpdHV0ZShpdGVtKVxyXG4gICAgfVxyXG5cclxuICAgICQoJyNyZXBvcnRDb250ZW50T3B0aW9uJylbb3B0aW9ucy5sZW5ndGggPyAnc2hvdycgOiAnaGlkZSddKClcclxuICAgIHRoaXMuJHJlcG9ydENvbnRlbnRPcHRpb25zLmh0bWwocmVwb3J0Q29udGVudE9wdGlvbkh0bWwpXHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMucmVwb3J0Q29udGVudENoZWNrLCB7XHJcbiAgICAgIHRvdGFsQ291bnQ6IG9wdGlvbnMubGVuZ3RoLFxyXG4gICAgICBjaGVja2VkSXRlbXNDb3VudDogMFxyXG4gICAgfSlcclxuICAgIGlmKHRoaXMuaXNDb21wbGV0ZSl7XHJcbiAgICAgICAgdGhpcy4kcmVwb3J0Q29udGVudE9wdGlvbnMuY2hpbGRyZW4oJy5jaGVja0FsbCcpLnRyaWdnZXIoJ2NsaWNrJylcclxuICAgIH1lbHNle1xyXG4gICAgICAgIHRoaXMuJHJlcG9ydENvbnRlbnRPcHRpb25zLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBsZXQgaWQgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtaWQnKVxyXG4gICAgICAgICAgICBpZihpZCAhPT0gJzcnKXtcclxuICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ25vdFNlbCcpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS50cmlnZ2VyKCdjbGljaycpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICAvL+WIhuauteiuvue9rlxyXG4gIHJlbmRlclNjb3JlUGFydCgpIHtcclxuICAgIGxldCBzY29yZUh0bWwgPSB0aGlzLmRvd25Mb2FkRGF0YS5zY29yZVNlY3Rpb24ucmVkdWNlKFxyXG4gICAgICAoc2NvcmVQYXJ0SHRtbCwgc2NvcmUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgc2NvcmVQYXJ0SHRtbCArPSB0aGlzLnNjb3JlUGFydFRwbC5zdWJzdGl0dXRlKHtcclxuICAgICAgICAgIHNjb3JlOiBzY29yZSxcclxuICAgICAgICAgIGluZGV4OiBpbmRleFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHNjb3JlUGFydEh0bWxcclxuICAgICAgfSxcclxuICAgICAgJydcclxuICAgIClcclxuICAgICQoJyNzY29yZUxpc3QnKS5odG1sKHNjb3JlSHRtbCArIHRoaXMuc2NvcmVQYXJ0WmVyb1RwbClcclxuICB9XHJcbiAgcmVkdWNlU2NvcmVQYXJ0KCkge1xyXG4gICAgbGV0IHNjb3JlU2VjdGlvbiA9IHRoaXMuZG93bkxvYWREYXRhLnNjb3JlU2VjdGlvblxyXG4gICAgbGV0IHNjb3JlUGFydExlbmd0aCA9IHNjb3JlU2VjdGlvbi5sZW5ndGhcclxuICAgIGlmIChzY29yZVBhcnRMZW5ndGggPD0gMikgcmV0dXJuXHJcbiAgICB0aGlzLmRvd25Mb2FkRGF0YS5zY29yZVNlY3Rpb24gPSBzY29yZVNlY3Rpb24uc3BsaWNlKFxyXG4gICAgICAwLFxyXG4gICAgICBzY29yZVNlY3Rpb24ubGVuZ3RoIC0gMVxyXG4gICAgKVxyXG5cclxuICAgIHRoaXMucmVuZGVyU2NvcmVQYXJ0KClcclxuICB9XHJcbiAgYWRkU2NvcmVQYXJ0KCkge1xyXG4gICAgbGV0IHNjb3JlU2VjdGlvbiA9IHRoaXMuZG93bkxvYWREYXRhLnNjb3JlU2VjdGlvblxyXG4gICAgbGV0IHNjb3JlUGFydExlbmd0aCA9IHNjb3JlU2VjdGlvbi5sZW5ndGhcclxuICAgIGlmIChzY29yZVBhcnRMZW5ndGggPj0gMTApIHJldHVyblxyXG4gICAgc2NvcmVTZWN0aW9uLnB1c2goJycpXHJcbiAgICB0aGlzLnJlbmRlclNjb3JlUGFydCgpXHJcbiAgfVxyXG4gIGNsZWFyU2Nyb2VQYXJ0KCkge1xyXG4gICAgbGV0IHNjb3JlU2VjdGlvbiA9IHRoaXMuZG93bkxvYWREYXRhLnNjb3JlU2VjdGlvblxyXG4gICAgdGhpcy5kb3duTG9hZERhdGEuc2NvcmVTZWN0aW9uID0gc2NvcmVTZWN0aW9uLm1hcChmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuICcnXHJcbiAgICB9KVxyXG4gICAgdGhpcy5yZW5kZXJTY29yZVBhcnQoKVxyXG4gIH1cclxuICBiaW5kRXZlbnRzKCkge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXNcclxuICAgIGNvbnN0IGRvd25Mb2FkRGF0YSA9IHNlbGYuZG93bkxvYWREYXRhXHJcbiAgICBsZXQgZG93bkxvYWRUeXBlID0gZG93bkxvYWREYXRhLmRvd25sb2FkX3R5cGVcclxuICAgIC8v5piv5ZCm5Y+q6YCJ5oup5LqG6YCJ5oup5L2c562U5piO57uG6KGoXHJcbiAgICBsZXQgaGFzUmVwb3J0VHlwZTcgPSBmYWxzZTtcclxuICAgIC8v5oql6KGo5YaF5a656YCJ6aG5XHJcbiAgICBzZWxmLnJlcG9ydENvbnRlbnRDaGVjayA9IG5ldyBDaGVja0JveEl0ZW0oXHJcbiAgICAgIHNlbGYuJHJlcG9ydENvbnRlbnRPcHRpb25zLFxyXG4gICAgICBmdW5jdGlvbigkY2hlY2tBbGxJdGVtLCBzdGF0dXMpIHtcclxuICAgICAgICBkb3duTG9hZERhdGEucmVwb3J0VHlwZSA9IHN0YXR1c1xyXG4gICAgICAgICAgPyBzZWxmLnJlbmRlclJlcG9ydENvbnRlbnRPcHRpb25zLm1hcCh2ID0+IHYuaWQpXHJcbiAgICAgICAgICA6IFtdXHJcblxyXG4gICAgICAgIGlmKElTX0JBVENIRE9XTkxPQUQgJiYgaGFzUmVwb3J0VHlwZTcpe1xyXG4gICAgICAgICAgaGFzUmVwb3J0VHlwZTcgPSBmYWxzZTtcclxuICAgICAgICAgIGxldCB7IHdvcmQsIGV4Y2VsLCB0ZWFjaGVyLCBlcnJvciB9ID0gc2VsZi5kb3duTG9hZFR5cGVcclxuICAgICAgICAgIGxldCByZXBvcnROYW1lTWFwID0ge1xyXG4gICAgICAgICAgICBbd29yZF06ICd3b3JkJyxcclxuICAgICAgICAgICAgW2V4Y2VsXTogJ2V4Y2VsJyxcclxuICAgICAgICAgICAgW3RlYWNoZXJdOiAndGVhY2hlcicsXHJcbiAgICAgICAgICAgIFtlcnJvcl06ICdlcnJvcidcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNlbGYudXBkYXRlUmVuZGVyRXhhbUxpc3REYXRhKHJlcG9ydE5hbWVNYXBbZG93bkxvYWRUeXBlXSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ+aKpeihqOWGheWuuemAiemhuScsIGRvd25Mb2FkRGF0YS5yZXBvcnRUeXBlKVxyXG4gICAgICB9LFxyXG4gICAgICBmdW5jdGlvbigkY2hlY2tJdGVtLCBzdGF0dXMpIHtcclxuICAgICAgICBsZXQgY3VySWQgPSAkY2hlY2tJdGVtLmF0dHIoJ2RhdGEtaWQnKVxyXG4gICAgICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgICAgIGRvd25Mb2FkRGF0YS5yZXBvcnRUeXBlLnB1c2goY3VySWQpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBjdXJJbmRleCA9IGRvd25Mb2FkRGF0YS5yZXBvcnRUeXBlLmZpbmRJbmRleChpZCA9PiBpZCA9PSBjdXJJZClcclxuICAgICAgICAgIGRvd25Mb2FkRGF0YS5yZXBvcnRUeXBlLnNwbGljZShjdXJJbmRleCwgMSlcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coc2VsZi5hbGxDbGFzc0xpc3QpXHJcblxyXG4gICAgICAgIGlmKElTX0JBVENIRE9XTkxPQUQgJiYgZG93bkxvYWREYXRhLnJlcG9ydFR5cGUudG9TdHJpbmcoKSA9PT0gJzcnKXtcclxuXHJcbiAgICAgICAgICBoYXNSZXBvcnRUeXBlNyA9IHRydWU7XHJcbiAgICAgICAgICBzZWxmLmNhbkRvd25Mb2FkRXhhbUxpc3REYXRhID0gc2VsZi5hbGxDbGFzc0xpc3RcclxuICAgICAgICAgIHNlbGYubm9Eb3duTG9hZEV4YW1MaXN0RGF0YSA9IFtdXHJcbiAgICAgICAgICBzZWxmLnJlbmRlckV4YW1MaXN0KClcclxuXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBsZXQgeyB3b3JkLCBleGNlbCwgdGVhY2hlciwgZXJyb3IgfSA9IHNlbGYuZG93bkxvYWRUeXBlXHJcbiAgICAgICAgICBsZXQgcmVwb3J0TmFtZU1hcCA9IHtcclxuICAgICAgICAgICAgW3dvcmRdOiAnd29yZCcsXHJcbiAgICAgICAgICAgIFtleGNlbF06ICdleGNlbCcsXHJcbiAgICAgICAgICAgIFt0ZWFjaGVyXTogJ3RlYWNoZXInLFxyXG4gICAgICAgICAgICBbZXJyb3JdOiAnZXJyb3InXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzZWxmLnVwZGF0ZVJlbmRlckV4YW1MaXN0RGF0YShyZXBvcnROYW1lTWFwW2Rvd25Mb2FkVHlwZV0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ+aKpeihqOWGheWuuemAiemhuScsIGRvd25Mb2FkRGF0YS5yZXBvcnRUeXBlKVxyXG4gICAgICB9XHJcbiAgICApXHJcbiAgICAvL+aWh+e7vOeQhue7vOWNleenkeaIkOe7qeaYjue7huihqFxyXG4gICAgbmV3IENoZWNrQm94SXRlbShcclxuICAgICAgJCgnI3N1YmplY3RSZXBvcnQnKSxcclxuICAgICAgKCkgPT4ge30sXHJcbiAgICAgIGZ1bmN0aW9uKCRjaGVja0l0ZW0sIHN0YXR1cykge1xyXG4gICAgICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgICAgIGRvd25Mb2FkRGF0YS5yZXBvcnRUeXBlLnB1c2goNilcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGN1ckluZGV4ID0gZG93bkxvYWREYXRhLnJlcG9ydFR5cGUuZmluZEluZGV4KGlkID0+IGlkID09PSA1KVxyXG4gICAgICAgICAgZG93bkxvYWREYXRhLnJlcG9ydFR5cGUuc3BsaWNlKGN1ckluZGV4LCAxKVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL3NlbGYuaGFzV2VuTGlab25nRGV0YWlsID0gc3RhdHVzID8gMSA6IDBcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCfmiqXooajlhoXlrrnpgInpobknLCBkb3duTG9hZERhdGEucmVwb3J0VHlwZSlcclxuICAgICAgfVxyXG4gICAgKVxyXG5cclxuICAgIC8v5qC35byP5YiH5o2iXHJcbiAgICAkKCcuaGdjX3JlcG9ydCAuc3R5bGVDaGFuZ2UgLnRpcCcpLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG4gICAgICBsZXQgaXNDbG9zZSA9ICQodGhpcykuaGFzQ2xhc3MoJ2Rvd24nKVxyXG4gICAgICAkKHRoaXMpXHJcbiAgICAgICAgLnNpYmxpbmdzKCcuc3R5bGVCb3gnKVxyXG4gICAgICAgIFtpc0Nsb3NlID8gJ3Nob3cnIDogJ2hpZGUnXSgpXHJcbiAgICAgICQodGhpcylcclxuICAgICAgICBbaXNDbG9zZSA/ICdyZW1vdmVDbGFzcycgOiAnYWRkQ2xhc3MnXSgnZG93bicpXHJcbiAgICAgICAgW2lzQ2xvc2UgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10oJ3VwJylcclxuICAgIH0pXHJcbiAgICAvL+ePree6p+WtpueUn+aIkOe7qeWIhuaekOihqFxyXG4gICAgbmV3IFJhZGlvQm94SXRlbSgkKCcjYWNoaWV2ZW1lbnQnKSwgZnVuY3Rpb24oJHJhZGlvSXRlbSwgc3RhdHVzKSB7XHJcbiAgICAgIGxldCBzdGF0ID0gJHJhZGlvSXRlbS5hdHRyKCdkYXRhLXN0YXR1cycpXHJcbiAgICAgIGxldCBuYW1lID0gJHJhZGlvSXRlbS5hdHRyKCdkYXRhLW5hbWUnKVxyXG4gICAgICBkb3duTG9hZERhdGFbbmFtZV0gPSBzdGF0XHJcbiAgICAgIC8vLy9jb25zb2xlLmxvZyhkb3duTG9hZERhdGEpXHJcbiAgICB9KVxyXG4gICAgLy/nurjlvKDorr7nva5cclxuICAgIG5ldyBSYWRpb0JveEl0ZW0oJCgnI3BhcGVyU2l6ZVNldHRpbmcnKSwgZnVuY3Rpb24oJHJhZGlvSXRlbSwgc3RhdHVzKSB7XHJcbiAgICAgIGxldCBzdGF0ID0gJHJhZGlvSXRlbS5hdHRyKCdkYXRhLXN0YXR1cycpXHJcbiAgICAgIGxldCBuYW1lID0gJHJhZGlvSXRlbS5hdHRyKCdkYXRhLW5hbWUnKVxyXG4gICAgICBkb3duTG9hZERhdGFbbmFtZV0gPSBzdGF0XHJcbiAgICAgIC8vLy9jb25zb2xlLmxvZyhkb3duTG9hZERhdGEpXHJcbiAgICB9KVxyXG4gICAgLy/nj63nuqflubPlnYfliIbooahcclxuICAgIG5ldyBSYWRpb0JveEl0ZW0oJCgnI2F2Z1Njb3JlJyksIGZ1bmN0aW9uKCRyYWRpb0l0ZW0sIHN0YXR1cykge1xyXG4gICAgICBsZXQgc3RhdCA9ICRyYWRpb0l0ZW0uYXR0cignZGF0YS1zdGF0dXMnKVxyXG4gICAgICBsZXQgbmFtZSA9ICRyYWRpb0l0ZW0uYXR0cignZGF0YS1uYW1lJylcclxuICAgICAgZG93bkxvYWREYXRhW25hbWVdID0gc3RhdFxyXG4gICAgICAvLy8vY29uc29sZS5sb2coZG93bkxvYWREYXRhKVxyXG4gICAgfSlcclxuICAgIC8v5bm057qn5bmz5Z2H5YiG6KGoXHJcbiAgICBuZXcgUmFkaW9Cb3hJdGVtKCQoJyNncmFkZUF2Z1Njb3JlJyksIGZ1bmN0aW9uKCRyYWRpb0l0ZW0sIHN0YXR1cykge1xyXG4gICAgICBsZXQgc3RhdCA9ICRyYWRpb0l0ZW0uYXR0cignZGF0YS1zdGF0dXMnKVxyXG4gICAgICBsZXQgbmFtZSA9ICRyYWRpb0l0ZW0uYXR0cignZGF0YS1uYW1lJylcclxuICAgICAgZG93bkxvYWREYXRhW25hbWVdID0gc3RhdFxyXG4gICAgICAvLy8vY29uc29sZS5sb2coZG93bkxvYWREYXRhKVxyXG4gICAgfSlcclxuICAgIC8v5pi+56S66K6+572uXHJcbiAgICBuZXcgUmFkaW9Cb3hJdGVtKCQoJyNzdHVkZW50QWNoaWV2ZW1lbnQnKSwgZnVuY3Rpb24oJHJhZGlvSXRlbSwgc3RhdHVzKSB7XHJcbiAgICAgIGxldCBzdGF0ID0gJHJhZGlvSXRlbS5hdHRyKCdkYXRhLXN0YXR1cycpXHJcbiAgICAgIGxldCBuYW1lID0gJHJhZGlvSXRlbS5hdHRyKCdkYXRhLW5hbWUnKVxyXG4gICAgICBkb3duTG9hZERhdGFbbmFtZV0gPSBzdGF0XHJcbiAgICAgIC8vLy9jb25zb2xlLmxvZyhkb3duTG9hZERhdGEpXHJcbiAgICB9KVxyXG5cclxuICAgIC8v5YiG5q616K6+572uXHJcbiAgICAkKCcjc2NvcmVPcGVyYXRvciAuaGJ0bicpXHJcbiAgICAgIC51bmJpbmQoKVxyXG4gICAgICAuY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ3JlZHVjZScpKSB7XHJcbiAgICAgICAgICBzZWxmLnJlZHVjZVNjb3JlUGFydCgpXHJcbiAgICAgICAgfSBlbHNlIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdhZGQnKSkge1xyXG4gICAgICAgICAgc2VsZi5hZGRTY29yZVBhcnQoKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzZWxmLmNsZWFyU2Nyb2VQYXJ0KClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAvL+WIhuauteaWh+acrOahhuaTjeS9nFxyXG4gICAgJCgnI3Njb3JlTGlzdCcpXHJcbiAgICAgIC5vZmYoJ2JsdXInKVxyXG4gICAgICAub24oJ2JsdXInLCAnaW5wdXQnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBsZXQgc2NvcmVTZWN0aW9uID0gc2VsZi5kb3duTG9hZERhdGEuc2NvcmVTZWN0aW9uXHJcbiAgICAgICAgbGV0IF9pbmRleCA9ICskKHRoaXMpLmF0dHIoJ2RhdGEtaW5kZXgnKVxyXG4gICAgICAgIGxldCB2YWwgPSArJCh0aGlzKS52YWwoKVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHZhbCA8PSAwIHx8XHJcbiAgICAgICAgICAoc2NvcmVTZWN0aW9uW19pbmRleCArIDFdICYmIHZhbCA8PSBzY29yZVNlY3Rpb25bX2luZGV4ICsgMV0pIHx8XHJcbiAgICAgICAgICAoc2NvcmVTZWN0aW9uW19pbmRleCAtIDFdICYmIHZhbCA+PSBzY29yZVNlY3Rpb25bX2luZGV4IC0gMV0pIHx8XHJcbiAgICAgICAgICB2YWwgPj0gc2VsZi5tYXhTY29yZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaGdjX2xheWVyLmFsZXJ0KCfliIbmrrXmlbDlgLzorr7nva7kuI3mraPnoa7vvIzor7fph43mlrDovpPlhaUnKVxyXG4gICAgICAgICAgJCh0aGlzKS52YWwoc2NvcmVTZWN0aW9uW19pbmRleF0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNjb3JlU2VjdGlvbltfaW5kZXhdID0gdmFsXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgIG5ldyBTd2l0Y2goJCgnI3N3aXRjaC10b3RhbC1zY29yZScpLCBzdGF0dXMgPT4ge1xyXG4gICAgICBpZihzdGF0dXMpe1xyXG4gICAgICAgICQoJyNjb250YWN0Q2hvaWNlMSwjY29udGFjdENob2ljZTInKS5wcm9wKCdkaXNhYmxlZCcsZmFsc2UpXHJcbiAgICAgICAgc2VsZi5kb3duTG9hZERhdGEudG90YWxTY29yZUNvZWZmaWNpZW50SXNSb3VuZGluZyA9IDFcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgJCgnI2NvbnRhY3RDaG9pY2UxLCNjb250YWN0Q2hvaWNlMicpLnByb3AoJ2Rpc2FibGVkJyx0cnVlKVxyXG4gICAgICAgICQoJyNjb250YWN0Q2hvaWNlMScpLnByb3AoJ2NoZWNrZWQnLHRydWUpXHJcbiAgICAgICAgJCgnI2NvbnRhY3RDaG9pY2UyJykucHJvcCgnY2hlY2tlZCcsZmFsc2UpXHJcbiAgICAgICAgZGVsZXRlIHNlbGYuZG93bkxvYWREYXRhLnRvdGFsU2NvcmVDb2VmZmljaWVudElzUm91bmRpbmdcclxuICAgICAgfVxyXG4gICAgICB0aGlzLiR0b3RhbFNjb3JlQ29lZmZpY2llbnRbc3RhdHVzID8gJ3JlbW92ZUNsYXNzJyA6ICdhZGRDbGFzcyddKFxyXG4gICAgICAgICdkaXNhYmxlZCdcclxuICAgICAgKS5wcm9wKCdkaXNhYmxlZCcsICFzdGF0dXMpXHJcblxyXG4gICAgICBzZWxmLmRvd25Mb2FkRGF0YS50b3RhbFNjb3JlQ29lZmZpY2llbnQgPSBzdGF0dXNcclxuICAgICAgICA/IHRoaXMuJHRvdGFsU2NvcmVDb2VmZmljaWVudC52YWwoKVxyXG4gICAgICAgIDogLTFcclxuICAgIH0pXHJcbiAgICAkKCcubnVtYmVyLXR5cGUgaW5wdXQnKS5jbGljayhmdW5jdGlvbigpe1xyXG4gICAgICBzZWxmLmRvd25Mb2FkRGF0YS50b3RhbFNjb3JlQ29lZmZpY2llbnRJc1JvdW5kaW5nID0gJCh0aGlzKS52YWwoKVxyXG4gICAgfSlcclxuICAgIG5ldyBTd2l0Y2goJCgnI3N3aXRjaC1yYW5raW5nJyksIHN0YXR1cyA9PiB7XHJcbiAgICAgIHNlbGYuZG93bkxvYWREYXRhLnNob3dSYW5raW5nQ2hhbmdlcyA9IHN0YXR1cyA/IDEgOjBcclxuICAgIH0pXHJcbiAgICB0aGlzLiR0b3RhbFNjb3JlQ29lZmZpY2llbnQuYmx1cihmdW5jdGlvbigpIHtcclxuICAgICAgbGV0IHZhbCA9ICskKHRoaXMpLnZhbCgpXHJcbiAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHZhbCkpIHtcclxuICAgICAgICBoZ2NfbGF5ZXIuYWxlcnQoJ+aAu+WIhuezu+aVsOS4ujDvvZ4xMOS7peWGheeahOaVsOWtlycpXHJcbiAgICAgICAgdmFsID0gMS4yNVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh2YWwgPD0gMCkge1xyXG4gICAgICAgICAgdmFsID0gMS4yNVxyXG4gICAgICAgIH0gZWxzZSBpZiAodmFsID4gMTApIHtcclxuICAgICAgICAgIHZhbCA9IDEwXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICQodGhpcykudmFsKHZhbC50b0ZpeGVkKDIpKVxyXG4gICAgICBzZWxmLmRvd25Mb2FkRGF0YS50b3RhbFNjb3JlQ29lZmZpY2llbnQgPSB2YWwudG9GaXhlZCgyKVxyXG4gICAgfSlcclxuICAgICQoJyNoX3N1Ym1pdEJ0biAuaGJ0bicpLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG4gICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygnZW5zdXJlJykpIHsgLy/kuIvovb1cclxuICAgICAgICAgIG9uU3VibWl0QnRuKHNlbGYpXHJcbiAgICAgIH0gZWxzZSBpZiAoJCh0aGlzKS5oYXNDbGFzcygnY3JlYXRlJykpIHsgLy8g55Sf5oiQXHJcbiAgICAgICAgb25TdWJtaXRCdG4oc2VsZiwn55Sf5oiQJylcclxuICAgICAgICAvLyAkKCdib2R5JykuYXBwZW5kKGRvd25Mb2FkU2V0dGluZ01vZHVsZUNyZWF0ZSlcclxuICAgICAgICAvLyAgIHNjRm4uY2FsbCh0aGlzKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICQoJyNoZ2NfcmVwb3J0Qm94JykucmVtb3ZlKClcclxuICAgICAgICBEb3duTG9hZE1vZGVsSW5zdGFuY2UgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICAkKCcuaGdjX3JlcG9ydCBoMi50aXRsZSAuaGNsb3NlJykuY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAgICQoJyNoZ2NfcmVwb3J0Qm94JykucmVtb3ZlKClcclxuICAgICAgRG93bkxvYWRNb2RlbEluc3RhbmNlID0gbnVsbFxyXG4gICAgfSlcclxuICAgIGZ1bmN0aW9uIG9uU3VibWl0QnRuKHNlbGYsdHlwZSl7XHJcbiAgICAgIGxldCBkb3duTG9hZFR5cGUgPSBzZWxmLmRvd25Mb2FkRGF0YS5kb3dubG9hZF90eXBlXHJcbiAgICAgIGxldCBzdWJtaXRQYXJhbXMgPSB7XHJcbiAgICAgICAgLi4uc2VsZi5kb3duTG9hZERhdGEsXHJcbiAgICAgICAgLi4uc2VsZi5oaWdoU2V0dGluZ0RhdGEsXHJcbiAgICAgICAgc2NvcmVTZWN0aW9uOnNlbGYuZG93bkxvYWREYXRhLnNjb3JlU2VjdGlvbi5sZW5ndGg/Wy4uLnNlbGYuZG93bkxvYWREYXRhLnNjb3JlU2VjdGlvbiwgJzAnXTpbXVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB+JzF8MicuaW5kZXhPZihkb3duTG9hZFR5cGUpICYmXHJcbiAgICAgICAgIXNlbGYuZG93bkxvYWREYXRhLnJlcG9ydFR5cGUubGVuZ3RoXHJcbiAgICAgICkge1xyXG4gICAgICAgIGhnY19sYXllci5hbGVydCgn6K+36YCJ5oup6KaB5LiL6L2955qE5oql6KGo5YaF5a65JylcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBpZiAoSVNfQkFUQ0hET1dOTE9BRCkgeyAvLyDmibnph49cclxuICAgICAgICBzdWJtaXRQYXJhbXMuZXhhbUdyb3VwSWQgPSBzZWxmLmV4YW1JZFxyXG4gICAgICAgIHNlbGYuYmF0Y2hEb3duTG9hZEZuKGRvd25Mb2FkVHlwZSwgc3VibWl0UGFyYW1zLHR5cGUpXHJcbiAgICAgIH0gZWxzZSB7IC8vIOWNleS4qiDkuIvovb1cclxuICAgICAgICBzdWJtaXRQYXJhbXMuZXhhbV9pZCA9IHNlbGYuZXhhbUlkXHJcbiAgICAgICAgc2VsZi5zaW5nbGVEb3duTG9hZEZuKGRvd25Mb2FkVHlwZSwgc3VibWl0UGFyYW1zLHR5cGUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaGlnaFNldHRpbmdFdmVudCgpXHJcbiAgfVxyXG4gIHNjRm4oKSB7XHJcbiAgICAkKCcuc2Nfc3VibWl0QnRucyAuaGJ0bicpLmNsaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ2NyZWF0ZScpKSB7IC8v5omT5Y2wXHJcbiAgICAgICAgZXZhbHVhdGlvbkNsaWVudC5CdWxrUHJpbnRQREYoSlNPTi5zdHJpbmdpZnkoRG93bkxvYWRVUkwucHJpbnQpKVxyXG4gICAgICAgICQoJyNoZ2NfcmVwb3J0Qm94JykucmVtb3ZlKClcclxuICAgICAgICAkKCcjc2NfY3JlYXRlQm94JykucmVtb3ZlKClcclxuICAgICAgfWVsc2UgeyAvL+S4i+i9vVxyXG4gICAgICAgIGlmIChEb3duTG9hZFVSTC5zdGF0dXMpIHtcclxuICAgICAgICAgICQoJyNoZ2NfcmVwb3J0Qm94JykucmVtb3ZlKClcclxuICAgICAgICAgICQoJyNzY19jcmVhdGVCb3gnKS5yZW1vdmUoKVxyXG4gICAgICAgICAgbG9jYXRpb24uaHJlZiA9IERvd25Mb2FkVVJMLnJlc3VsdFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgICQoJy5zY19jbG9zZScpLmNsaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgJCgnI3NjX2NyZWF0ZUJveCcpLnJlbW92ZSgpXHJcbiAgICB9KVxyXG4gIH1cclxuICBoaWdoU2V0dGluZ0V2ZW50KCkge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXNcclxuICAgIGNvbnN0IGRvd25Mb2FkRGF0YSA9IHNlbGYuZG93bkxvYWREYXRhXHJcbiAgICAvL+mrmOe6p+iuvue9rlxyXG4gICAgJCgnI2hpZ2hTZXR0aW5nIHNwYW4nKS5jbGljayhmdW5jdGlvbigpIHtcclxuICAgICAgc2VsZi5zdWJtaXRCdG5TdGF0dXNDaGFuZ2UodHJ1ZSlcclxuXHJcbiAgICAgIHNlbGYuaW5pdEhpZ2hTZXR0aW5nU3RhdHVzKClcclxuICAgIH0pXHJcblxyXG4gICAgLy/pq5jnuqforr7nva4tLS3lrabnlJ/pgInmi6lcclxuICAgIGNvbnN0IHN0dWRlbnRzSW5mbyA9IFtcclxuICAgICAgJ2hhc1N0dWRlbnRTeXN0ZW1DYXJkJyxcclxuICAgICAgJ2hhc1N0dWRlbnRTY2hvb2xDYXJkJyxcclxuICAgICAgJ2hhc0lkTnVtYmVyJyxcclxuICAgICAgJ2hhc1N0dWRlbnRObydcclxuICAgIF1cclxuICAgIG5ldyBDaGVja0JveEl0ZW0oXHJcbiAgICAgICQoJyNzdHVkZW50c1NldHRpbmcnKSxcclxuICAgICAgKCRjaGVja0FsbCwgc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgc3R1ZGVudHNJbmZvLmZvckVhY2godiA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhpZ2hTZXR0aW5nRGF0YVt2XSA9IHN0YXR1cyA/IDEgOiAwXHJcbiAgICAgICAgfSlcclxuICAgICAgfSxcclxuICAgICAgKCRjaGVja0l0ZW0sIHN0YXR1cykgPT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gJGNoZWNrSXRlbS5hdHRyKCdkYXRhLW5hbWUnKVxyXG4gICAgICAgIHRoaXMuaGlnaFNldHRpbmdEYXRhW25hbWVdID0gc3RhdHVzID8gMSA6IDBcclxuICAgICAgfVxyXG4gICAgKVxyXG4gICAgLy/ov4fmu6TmnaHku7ZcclxuICAgIGNvbnN0IGZpbHRlckluZm8gPSBbJ3JlbW92ZU91dGVyU3R1ZGVudCcsICdyZW1vdmVaZXJvU3R1ZGVudCddXHJcbiAgICBuZXcgQ2hlY2tCb3hJdGVtKFxyXG4gICAgICAkKCcjZmlsdGVyU2V0dGluZycpLFxyXG4gICAgICAoJGNoZWNrQWxsLCBzdGF0dXMpID0+IHtcclxuICAgICAgICBmaWx0ZXJJbmZvLmZvckVhY2godiA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhpZ2hTZXR0aW5nRGF0YVt2XSA9IHN0YXR1cyA/IDEgOiAwXHJcbiAgICAgICAgfSlcclxuICAgICAgfSxcclxuICAgICAgKCRjaGVja0l0ZW0sIHN0YXR1cykgPT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gJGNoZWNrSXRlbS5hdHRyKCdkYXRhLW5hbWUnKVxyXG4gICAgICAgIHRoaXMuaGlnaFNldHRpbmdEYXRhW25hbWVdID0gc3RhdHVzID8gMSA6IDBcclxuICAgICAgfVxyXG4gICAgKVxyXG4gICAgLy/ovr7nur/orr7nva5cclxuICAgIGxldCBjb21wbGlhbmNlRmllbGRzID0gW1xyXG4gICAgICAxMDAsXHJcbiAgICAgICdleGNlbGxlbnRSYXRpbycsXHJcbiAgICAgICdnb29kUmF0aW8nLFxyXG4gICAgICAnbWVkaXVtUmF0aW8nLFxyXG4gICAgICAwXHJcbiAgICBdXHJcblxyXG4gICAgJCgnI2NvbXBsaWFuY2VSYXRlIGlucHV0JykuYmx1cihmdW5jdGlvbigpIHtcclxuICAgICAgbGV0IG5hbWUgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtbmFtZScpXHJcbiAgICAgIGxldCBjdXJyZW50VmFsID0gKyQodGhpcykudmFsKClcclxuICAgICAgbGV0IGZpZWxkSW5kZXggPSBjb21wbGlhbmNlRmllbGRzLmluZGV4T2YobmFtZSlcclxuICAgICAgbGV0IHByZVZhbCA9IGNvbXBsaWFuY2VGaWVsZHNbZmllbGRJbmRleCAtIDFdXHJcbiAgICAgIHByZVZhbCA9IE51bWJlci5pc0Zpbml0ZShwcmVWYWwpXHJcbiAgICAgICAgPyBwcmVWYWxcclxuICAgICAgICA6IHNlbGYuaGlnaFNldHRpbmdEYXRhW3ByZVZhbF0gKiAxMDBcclxuICAgICAgbGV0IG5leHRWYWwgPSBjb21wbGlhbmNlRmllbGRzW2ZpZWxkSW5kZXggKyAxXVxyXG4gICAgICBuZXh0VmFsID0gTnVtYmVyLmlzRmluaXRlKG5leHRWYWwpXHJcbiAgICAgICAgPyBuZXh0VmFsXHJcbiAgICAgICAgOiBzZWxmLmhpZ2hTZXR0aW5nRGF0YVtuZXh0VmFsXSAqIDEwMFxyXG4gICAgICBpZiAoY3VycmVudFZhbCA8IHByZVZhbCAmJiBjdXJyZW50VmFsID4gbmV4dFZhbCkge1xyXG4gICAgICAgIHNlbGYuaGlnaFNldHRpbmdEYXRhW25hbWVdID0gKyhjdXJyZW50VmFsIC8gMTAwKS50b0ZpeGVkKDIpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJCh0aGlzKS52YWwoc2VsZi5oaWdoU2V0dGluZ0RhdGFbbmFtZV0gKiAxMDApXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgJCgnLmhnY19yZXBvcnQnKS5vbignY2xpY2snLCAnLmRvd25Mb2FkT2JqZWN0IGxpJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYoJCh0aGlzKS5oYXNDbGFzcygnZGlzYWJsZWQnKSlyZXR1cm47XHJcbiAgICAgICQodGhpcylcclxuICAgICAgICAuYWRkQ2xhc3MoJ2N1cnJlbnQnKVxyXG4gICAgICAgIC5zaWJsaW5ncygpXHJcbiAgICAgICAgLnJlbW92ZUNsYXNzKCdjdXJyZW50JylcclxuICAgICAgbGV0IGRvd25Mb2FkVHlwZSA9ICQodGhpcykuYXR0cignZGF0YS1pZCcpXHJcbiAgICAgIGlmKGRvd25Mb2FkVHlwZT09Mil7XHJcbiAgICAgICAgJCgnI3Njb3JlRGlzcGxheVNldHRpbmdzJykuc2hvdygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICQoJyNzY29yZURpc3BsYXlTZXR0aW5ncycpLmhpZGUoKTtcclxuICAgICAgICBzZWxmLmRvd25Mb2FkRGF0YS5zY29yZU9mRWFjaFF1ZXN0aW9uID0gMFxyXG4gICAgICB9XHJcbiAgICAgIC8vIOWmguaenOS4jeaYr3dvcmTmlrnlvI/miZPlvIDvvIzkuI3mmL7npLrnurjlvKDorr7nva5cclxuICAgICAgaWYoZG93bkxvYWRUeXBlICE9IDEpe1xyXG4gICAgICAgICQoJyNwYXBlclNpemVTZXR0aW5nJykuaGlkZSgpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICAkKCcjcGFwZXJTaXplU2V0dGluZycpLnNob3coKTtcclxuICAgICAgfVxyXG4gICAgICAvLyDlpoLmnpzmmK93b3Jk5pi+56S66aKY5Z6L54mIXHJcbiAgICAgIGlmKGRvd25Mb2FkVHlwZT09MSl7XHJcbiAgICAgICAgJCgnLm9wdGlvbnMtZXhjZWwnKS5oaWRlKClcclxuICAgICAgICAkKCcub3B0aW9ucy13b3JkJykuc2hvdygpXHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICAkKCcub3B0aW9ucy13b3JkJykuaGlkZSgpXHJcbiAgICAgICAgJCgnLm9wdGlvbnMtZXhjZWwnKS5zaG93KClcclxuICAgICAgfVxyXG4gICAgICBzZWxmLmluaXRTdGF0dXNGb3JEb3dubGFvZFR5cGUoZG93bkxvYWRUeXBlKVxyXG4gICAgfSlcclxuXHJcbiAgICAkKCcjaF9zYXZlU2V0dGluZ0J0biAuaGJ0bicpLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG4gICAgICBzZWxmLnN1Ym1pdEJ0blN0YXR1c0NoYW5nZShmYWxzZSlcclxuICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ2Vuc3VyZScpKSB7XHJcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgJ2hpZ2hTZXR0aW5nJyxcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHNlbGYuaGlnaFNldHRpbmdEYXRhKVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgaW5pdEhpZ2hTZXR0aW5nU3RhdHVzKCkge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXNcclxuICAgIGlmICghc2VsZi5maXJzdEVudGVySGlnaFNldHRpbmcpIHJldHVyblxyXG4gICAgY29uc3QgaGlnaFNldHRpbmdPcHRpb25zID0gW1xyXG4gICAgICAuLi4kKCcjc3R1ZGVudHNTZXR0aW5nIC5oX2NoZWNrSXRlbScpLFxyXG4gICAgICAuLi4kKCcjZmlsdGVyU2V0dGluZyAuaF9jaGVja0l0ZW0nKVxyXG4gICAgXVxyXG4gICAgaGlnaFNldHRpbmdPcHRpb25zLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICBsZXQgbmFtZSA9ICQoZWwpLmF0dHIoJ2RhdGEtbmFtZScpXHJcbiAgICAgIGlmICh0aGlzLmhpZ2hTZXR0aW5nRGF0YVtuYW1lXSkge1xyXG4gICAgICAgICQoZWwpLmNsaWNrKClcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICAkKCcjY29tcGxpYW5jZVJhdGUgaW5wdXQnKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICBsZXQgbmFtZSA9ICQodGhpcykuYXR0cignZGF0YS1uYW1lJylcclxuICAgICAgJCh0aGlzKS52YWwoc2VsZi5oaWdoU2V0dGluZ0RhdGFbbmFtZV0gKiAxMDApXHJcbiAgICB9KVxyXG5cclxuICAgIHNlbGYuZmlyc3RFbnRlckhpZ2hTZXR0aW5nID0gZmFsc2VcclxuICB9XHJcbiAgc3VibWl0QnRuU3RhdHVzQ2hhbmdlKGZsYWcpIHtcclxuICAgICQoJyNzZXR0aW5nJylbZmxhZyA/ICdoaWRlJyA6ICdzaG93J10oKVxyXG4gICAgJCgnI2ZpbHRlck9wdGlvbnMnKVshZmxhZyA/ICdoaWRlJyA6ICdzaG93J10oKVxyXG4gICAgJCgnI2hfc2F2ZVNldHRpbmdCdG4nKVtmbGFnID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKCdmbGV4JylcclxuICAgICQoJyNoX3N1Ym1pdEJ0bicpWyFmbGFnID8gJ2FkZENsYXNzJyA6ICdyZW1vdmVDbGFzcyddKCdmbGV4JylcclxuICB9XHJcbiAgYmF0Y2hEb3duTG9hZEZuKGRvd25Mb2FkVHlwZSwgc3VibWl0UGFyYW1zKSB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpc1xyXG4gICAgY29uc29sZS5sb2coc3VibWl0UGFyYW1zKTtcclxuICAgIGlmICghc2VsZi5zZWxFeGFtQ2xhc3NEYXRhLmxlbmd0aCkge1xyXG4gICAgICBoZ2NfbGF5ZXIuYWxlcnQoJ+ivt+mAieaLqeimgeS4i+i9veeahOePree6pycpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgc3VibWl0UGFyYW1zID0ge1xyXG4gICAgICAuLi5zdWJtaXRQYXJhbXMsXHJcbiAgICAgIGNsYXNzX2lkczogc2VsZi5zZWxFeGFtQ2xhc3NEYXRhXHJcbiAgICB9XHJcbiAgICBoZ2NfbGF5ZXIubXNnKCfnlJ/miJDkuK3vvIzor7fnqI3lkI4uLi4nLCB7IHRpbWU6IDAsIHNoYWRlOiAwLjQgfSlcclxuICAgIHNlbGYuYmF0Y2hEb3duTG9hZChzdWJtaXRQYXJhbXMpLnRoZW4ocmVzID0+IHtcclxuICAgICAgaGdjX2xheWVyLmNsb3NlQWxsKClcclxuICAgICAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICBpZiAocmVzdWx0LnN0YXR1cykge1xyXG4gICAgICAgIGhnY19sYXllci5vcGVuKHtcclxuICAgICAgICAgIHRpdGxlOiAn5LiL6L295o+Q56S6OicsXHJcbiAgICAgICAgICBjb250ZW50OiAn5bey5oiQ5Yqf6L2s5YWl5ZCO5Y+w55Sf5oiQ5oql6KGo77yM6K+3562J5b6FJyxcclxuICAgICAgICAgIGJ0bjogWyfmn6XnnIvnlJ/miJDov5vluqYnLCAn56Gu5a6aJ10sXHJcbiAgICAgICAgICB5ZXM6IGZ1bmN0aW9uKGluZGV4LCBsYXllcm8pIHtcclxuICAgICAgICAgICAgLy/mjInpkq7jgJDmjInpkq7kuIDjgJHnmoTlm57osINcclxuICAgICAgICAgICAgaGdjX2xheWVyLmNsb3NlQWxsKClcclxuICAgICAgICAgICAgJCgnI2hnY19yZXBvcnRCb3gnKS5yZW1vdmUoKVxyXG4gICAgICAgICAgICBsZXQgc3ViamVjdElkID0gJCgnLnByb2dyZXNzX2J0bicpLmF0dHIoJ3N1YmplY3RJZCcpXHJcbiAgICAgICAgICAgIERvd25Mb2FkTW9kZWxMaXN0SW5zdGFuY2UgPSBuZXcgRG93bkxvYWRMaXN0TW9kZWwoc3ViamVjdElkKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGJ0bjI6IGZ1bmN0aW9uKGluZGV4LCBsYXllcm8pIHtcclxuICAgICAgICAgICAgLy/mjInpkq7jgJDmjInpkq7kuozjgJHnmoTlm57osINcclxuICAgICAgICAgICAgLy9yZXR1cm4gZmFsc2Ug5byA5ZCv6K+l5Luj56CB5Y+v56aB5q2i54K55Ye76K+l5oyJ6ZKu5YWz6ZetXHJcbiAgICAgICAgICAgIC8v5oyJ6ZKu44CQ5oyJ6ZKu5LiA44CR55qE5Zue6LCDXHJcbiAgICAgICAgICAgIGhnY19sYXllci5jbG9zZUFsbCgpXHJcbiAgICAgICAgICAgICQoJyNoZ2NfcmVwb3J0Qm94JykucmVtb3ZlKClcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAvL+WPs+S4iuinkuWFs+mXreWbnuiwg1xyXG4gICAgICAgICAgICAvL3JldHVybiBmYWxzZSDlvIDlkK/or6Xku6PnoIHlj6/npoHmraLngrnlh7vor6XmjInpkq7lhbPpl61cclxuICAgICAgICAgICAgLy/mjInpkq7jgJDmjInpkq7kuIDjgJHnmoTlm57osINcclxuICAgICAgICAgICAgaGdjX2xheWVyLmNsb3NlQWxsKClcclxuICAgICAgICAgICAgJCgnI2hnY19yZXBvcnRCb3gnKS5yZW1vdmUoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaGdjX2xheWVyLmFsZXJ0KHJlc3VsdC5tc2cpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGFzeW5jIHNpbmdsZURvd25Mb2FkRm4oZG93bkxvYWRUeXBlLCBzdWJtaXRQYXJhbXMsdHlwZSkge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXNcclxuICAgIGlmICh+JzN8NCcuaW5kZXhPZihkb3duTG9hZFR5cGUpKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBkb3duTG9hZFR5cGUgPT0gc2VsZi5kb3duTG9hZFR5cGUudGVhY2hlciAmJlxyXG4gICAgICAgIHNlbGYudGVhY2hlclRhbGtpbmdJc0Rvd25Mb2FkXHJcbiAgICAgICkge1xyXG4gICAgICAgIGhnY19sYXllci5tc2coJ+eUn+aIkOS4re+8jOivt+eojeWQji4uLicsIHsgdGltZTogMCwgc2hhZGU6IDAuNCB9KVxyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBzZWxmLmp1ZGdlVGVhY2hlckRvd25Mb2FkKHtcclxuICAgICAgICAgIHN1YmplY3RJZDogc2VsZi5zdWJqZWN0SWQsXHJcbiAgICAgICAgICBjbGFzc0lkOiBzZWxmLmNsYXNzSWQsXHJcbiAgICAgICAgICBleGFtSWQ6IHNlbGYuZXhhbUlkXHJcbiAgICAgICAgfSlcclxuICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShyZXN1bHQpXHJcbiAgICAgICAgbGV0IGVycm9ySW5mbyA9IHJlcy5lcnJvclxyXG4gICAgICAgIGhnY19sYXllci5jbG9zZUFsbCgpXHJcbiAgICAgICAgaWYgKCFyZXMuc3RhdHVzKSB7XHJcbiAgICAgICAgICBzZWxmLmRvd25Mb2FkVGVhY2hlcihzZWxmLmV4YW1JZClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaGdjX2xheWVyLmFsZXJ0KHJlcy5lcnJvcilcclxuICAgICAgICAgIC8v5pWZ5a2m5a6d5piv5ZCm5Y+v5Lul5LiL6L2955qE54q25oCB5Yik5patY1xyXG4gICAgICAgICAgJCgnI25vc2V0dGluZycpXHJcbiAgICAgICAgICAgIC5jaGlsZHJlbignc3Ryb25nJylcclxuICAgICAgICAgICAgLmh0bWwoZXJyb3JJbmZvKVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL+aVmeWtpuWuneaYr+WQpuiDveS4i+i9vVxyXG4gICAgICAgIHNlbGYudGVhY2hlclRhbGtpbmdJc0Rvd25Mb2FkID0gcmVzLnN0YXR1cyA/IGZhbHNlIDogdHJ1ZVxyXG4gICAgICAgIHNlbGYuZG93bmxvYWRUeXBlVGV4dE5vdGljZVtkb3duTG9hZFR5cGVdID0gZXJyb3JJbmZvXHJcbiAgICAgICAgICA/IGVycm9ySW5mb1xyXG4gICAgICAgICAgOiBzZWxmLmRvd25sb2FkVHlwZVRleHROb3RpY2VbZG93bkxvYWRUeXBlXVxyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGRvd25Mb2FkVHlwZSA9PSBzZWxmLmRvd25Mb2FkVHlwZS5lcnJvciAmJlxyXG4gICAgICAgIHNlbGYuZXJyb3JUZW5Jc0Rvd25Mb2FkXHJcbiAgICAgICkge1xyXG4gICAgICAgIHNlbGYuZG93bkxvYWRFcnJvclRlbihzZWxmLmV4YW1JZClcclxuICAgICAgfVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIC8v5oql6KGo5YaF5a655pu/5o2i5a2X5q61XHJcbiAgICAvKipcclxuICAgICAqIENMQVpaX0FDSElFVkVNRU5UKDAsXCLnj63nuqflrabnlJ/miJDnu6nliIbmnpDooahcIiksQ0xBWlpfQVZHX1NDT1JFKDEsXCLnj63nuqflubPlnYfliIbooahcIiksU1RVREVOVF9BQ0hJRVZFTUVOVF9SQU5LKDIsXCLlrabnlJ/miJDnu6nmjpLlkI3ot5/ouKrooahcIiksXHJcbiAgICBHUkFERV9BQ0hJRVZFTUVOVCgzLFwi5bm057qn5a2m55Sf5oiQ57up5YiG5p6Q6KGoXCIpLFNDT1JFX1NFQ1RJT04oNCxcIuePree6p+WIhuaVsOauteihqFwiKSxTVUJKRUNUX0FDSElFVkVNRU5UKDUsXCLlkITlrabnp5HmiJDnu6nliIbmnpDooahcIiksXHJcbiAgICBXRU5fTElfWk9OR19BQ0hJRVZFTUVOVF9ERVRBSUxTKDYsXCLmlofnu7znkIbnu7zljZXnp5HmiJDnu6nmmI7nu4bmiqXooahcIik7XHJcbiAgICAgKi9cclxuICAgIGxldCByZXBvcnRNYXAgPSB7XHJcbiAgICAgIDA6ICdoYXNDbGF6ekFjaGlldmVtZW50JyxcclxuICAgICAgMTogJ2hhc0NsYXp6QXZnU2NvcmUnLFxyXG4gICAgICAyOiAnaGFzU3R1ZGVudEFjaGlldmVtZW50UmFuaycsXHJcbiAgICAgIDM6ICdoYXNHcmFkZUFjaGlldmVtZW50JyxcclxuICAgICAgNDogJ2hhc1Njb3JlU2VjdGlvbicsXHJcbiAgICAgIDU6ICdoYXNTdWJqZWN0QWNoaWV2ZW1lbnQnLFxyXG4gICAgICA2OiAnaGFzV2VuTGlab25nRGV0YWlsJyxcclxuICAgICAgNzonaGFzQ2xhenpDaG9pY2VUb3BpY1N0YXRpc3RpY3MnXHJcbiAgICB9XHJcbiAgICBzdWJtaXRQYXJhbXMucmVwb3J0VHlwZS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIHN1Ym1pdFBhcmFtc1tyZXBvcnRNYXBba2V5XV0gPSAxXHJcbiAgICB9KVxyXG4gICAgaGdjX2xheWVyLm1zZygn55Sf5oiQ5Lit77yM6K+356iN5ZCOLi4uJywgeyB0aW1lOiAwLCBzaGFkZTogMC40IH0pXHJcbiAgICBzZWxmLnNpbmdsZURvd25Mb2FkKHN1Ym1pdFBhcmFtcykudGhlbihyZXMgPT4ge1xyXG4gICAgICBoZ2NfbGF5ZXIuY2xvc2VBbGwoKVxyXG4gICAgICBsZXQgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXMpXHJcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzKSB7XHJcbiAgICAgICAgaWYgKHR5cGUgPT0gJ+eUn+aIkCcpIHtcclxuICAgICAgICAgIERvd25Mb2FkVVJMID0gcmVzdWx0XHJcbiAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKGRvd25Mb2FkU2V0dGluZ01vZHVsZUNyZWF0ZSlcclxuICAgICAgICAgIHRoaXMuc2NGbi5jYWxsKHRoaXMpXHJcbiAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgJCgnI2hnY19yZXBvcnRCb3gnKS5yZW1vdmUoKVxyXG4gICAgICAgICAgbG9jYXRpb24uaHJlZiA9IHJlc3VsdC5yZXN1bHRcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaGdjX2xheWVyLmFsZXJ0KHJlc3VsdC5yZXN1bHQpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGFzeW5jIGluaXRTdGF0dXNGb3JEb3dubGFvZFR5cGUoZG93bkxvYWRUeXBlKSB7XHJcbiAgICBsZXQgaGFzT3B0aW9uID0gficxfDInLmluZGV4T2YoZG93bkxvYWRUeXBlKVxyXG4gICAgbGV0IGlzVGVhY2hlciA9IGRvd25Mb2FkVHlwZSA9PSAzO1xyXG5cclxuICAgIHRoaXMuZG93bkxvYWREYXRhLmRvd25sb2FkX3R5cGUgPSArZG93bkxvYWRUeXBlXHJcbiAgICAvL+mHjee9ruaKpeihqOWGheWuuemAiemhuVxyXG4gICAgdGhpcy5kb3duTG9hZERhdGEucmVwb3J0VHlwZSA9IFtdXHJcbiAgICAvL+aYr+WQpuacieaKpeihqOWGheWuuemAiemhuVxyXG4gICAgaWYgKGhhc09wdGlvbikge1xyXG4gICAgICB0aGlzLnJlbmRlclJlcG9ydENvbnRlbnRPcHRpb24oKVxyXG4gICAgfVxyXG4gICAgLy8gd29yZCDmqKHlnZflubbkuJTmmK/mibnph48g5LiLXHJcbiAgICBpZiAoSVNfQkFUQ0hET1dOTE9BRCkge1xyXG4gICAgICAkKCcjaF9zdWJtaXRCdG4gLmVuc3VyZScpLnNob3coKVxyXG4gICAgICAkKCcjaF9zdWJtaXRCdG4gLmNyZWF0ZScpLmhpZGUoKVxyXG4gICAgICBpZiAoZG93bkxvYWRUeXBlID09IDEpIHtcclxuICAgICAgICAkKCcjaF9zdWJtaXRCdG4gLmVuc3VyZScpLmhpZGUoKVxyXG4gICAgICAgICQoJyNoX3N1Ym1pdEJ0biAuY3JlYXRlJykuc2hvdygpXHJcbiAgICAgIH1cclxuICAgIH0gXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmlZnlrablrp0g6ZSZ6aKY5YmN5Y2BIOayoeaciemAiemhuSBpbml0XHJcbiAgICAgKi9cclxuICAgICQoJyNzZXR0aW5nIC5jYW5zZWxPcHRpb25zJylbaGFzT3B0aW9uID8gJ3Nob3cnIDogJ2hpZGUnXSgpXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBleGNlbCDmnInlubTnuqflubPlnYfliIbpgInpobkgaW5pdFxyXG4gICAgICovXHJcbiAgICAkKCcuZXhjZWxPcHRpb24nKVtcclxuICAgICAgZG93bkxvYWRUeXBlID09IHRoaXMuZG93bkxvYWRUeXBlLmV4Y2VsID8gJ3Nob3cnIDogJ2hpZGUnXHJcbiAgICBdKClcclxuICAgIC8v6buY6K6k5LiN6YCJ5Lit5paH57u855CG57u85Y2V56eR5oiQ57up5piO57uG5oql6KGoIOmdnuaWh+e7vOeQhue7vOayoeaciei/meS4qumAiemhuVxyXG4gICAgaWYgKHRoaXMuaXNXZW5MaUFsbCkge1xyXG4gICAgICAvL+aWh+eQhue7vOWNleenkeaIkOe7qeaYjue7huihqFxyXG4gICAgICAkKCcjc3ViamVjdFJlcG9ydCAuaF9jaGVja0l0ZW0nKS5yZW1vdmVDbGFzcygnY2hlY2tlZCcpXHJcbiAgICB9XHJcbiAgICBpZiAoIUlTX0JBVENIRE9XTkxPQUQpIHtcclxuICAgICAgLy/mlZnlrablrp3mmK/lkKblj6/ku6XkuIvovb3nmoTnirbmgIHliKTmlq1jXHJcbiAgICAgIC8v5Y2V5Liq5LiL6L296Zmk5LqG5pWw5a2mIOWFtuS7luenkeebrumDveayoeaciemUmemimOWJjeWNgVxyXG4gICAgICAvL2xldCBpc0Rvd25Mb2FkRXJyb3IgPSAhdGhpcy5pc01hdGhTdWJqZWN0ICYmIGRvd25Mb2FkVHlwZSA9PSA0XHJcbiAgICAgICQoJyNub3NldHRpbmcnKVxyXG4gICAgICAgIFtoYXNPcHRpb24gPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oJ2ZsZXgnKVxyXG4gICAgICAgIC5jaGlsZHJlbignc3Ryb25nJylcclxuICAgICAgICAuaHRtbCh0aGlzLmRvd25sb2FkVHlwZVRleHROb3RpY2VbZG93bkxvYWRUeXBlXSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCB7IHdvcmQsIGV4Y2VsLCB0ZWFjaGVyLCBlcnJvciB9ID0gdGhpcy5kb3duTG9hZFR5cGVcclxuICAgICAgbGV0IHJlcG9ydE5hbWVNYXAgPSB7XHJcbiAgICAgICAgW3dvcmRdOiAnd29yZCcsXHJcbiAgICAgICAgW2V4Y2VsXTogJ2V4Y2VsJyxcclxuICAgICAgICBbdGVhY2hlcl06ICd0ZWFjaGVyJyxcclxuICAgICAgICBbZXJyb3JdOiAnZXJyb3InXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGRhdGVSZW5kZXJFeGFtTGlzdERhdGEocmVwb3J0TmFtZU1hcFtkb3duTG9hZFR5cGVdKVxyXG4gICAgICAvL0lTX1RISURSRCAmJiB0aGlzLnN1YmplY3RJZCAhPSAnOCdcclxuICAgICAgLy/mibnph4/kuIvovb0g6Zmk5LqG5pWw5a2m5YW25LuW56eR55uuIOaVmeWtpuWunT09Pj7kuI3mlK/mjIHkuIvovb0gIOmUmemimOWJjeWNgT09Pj7mmoLmnKrkuIrnur/or6Xlip/og71cclxuICAgICAgaWYgKCF0aGlzLmlzTWF0aFN1YmplY3QpIHtcclxuXHJcbiAgICAgICAgLy/mlZnlrablrp3mmK/lkKblj6/ku6XkuIvovb3nmoTnirbmgIHliKTmlq1jXHJcbiAgICAgICAgJCgnI25vc2V0dGluZycpXHJcbiAgICAgICAgICBbaGFzT3B0aW9uIHx8IGlzVGVhY2hlciA/ICdyZW1vdmVDbGFzcycgOiAnYWRkQ2xhc3MnXSgnZmxleCcpXHJcbiAgICAgICAgICAuY2hpbGRyZW4oJ3N0cm9uZycpXHJcbiAgICAgICAgICAuaHRtbCh0aGlzLmRvd25sb2FkVHlwZVRleHROb3RpY2VbZG93bkxvYWRUeXBlXSlcclxuICAgICAgICAkKCcjZXhhbUNsYXNzQm94JylbaGFzT3B0aW9uIHx8IGlzVGVhY2hlciA/ICdzaG93JyA6ICdoaWRlJ10oKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbi8vIOaJuemHj+S4i+i9veWIl+ihqOW8ueahhlxyXG5jbGFzcyBEb3duTG9hZExpc3RNb2RlbCBleHRlbmRzIG1peChUcGxzLCBBcGkpIHtcclxuICBjb25zdHJ1Y3RvcihzdWJqZWN0SWQpIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMuc2VhcmNoUGFyYW1zID0ge1xyXG4gICAgICAgIHBhZ2U6MSxcclxuICAgICAgICBwYWdlTGltaXQ6MTAsXHJcbiAgICAgICAgc3ViamVjdElkOnN1YmplY3RJZCxcclxuICAgICAgICBzdGF0dXM6JydcclxuICAgIH1cclxuICAgIHRoaXMubGlzdERhdGEgPSBbXVxyXG5cclxuICAgIHRoaXMuc2VsTGlzdERhdGEgPSBbXVxyXG5cclxuICAgIHRoaXMuc2VhcmNoU3ViamVjdHMgPSB7fVxyXG5cclxuICAgIHRoaXMuZXZlbnRCaW5kKClcclxuXHJcbiAgICB0aGlzLmdldExpc3QoKVxyXG4gIH1cclxuICBhc3luYyBnZXRMaXN0KHBhZ2UgPSAxKSB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpc1xyXG4gICAgc2VsZi5zZWFyY2hQYXJhbXMucGFnZSA9IHBhZ2U7XHJcbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgc2VsZi5nZXREb3dubG9hZFByb2dyZXNzKHNlbGYuc2VhcmNoUGFyYW1zKVxyXG4gICAgbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0KVxyXG4gICAgc2VsZi5pbml0TGlzdFByb2dyZXNzKHJlcylcclxuICAgIC8v6LCD55So5YiG6aG1XHJcbiAgICBpZihyZXMucGFnZXMudG90YWxQYWdlIDw9IDEpe1xyXG4gICAgICAkKCcjaF9wYWdpbmF0aW9uJykuaGlkZSgpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgICQoJyNoX3BhZ2luYXRpb24nKS5zaG93KClcclxuICAgICQoJyNoX3BhZ2luYXRpb24nKS5wYWdpbmF0aW9uKHtcclxuICAgICAgcGFnZUNvdW50OiByZXMucGFnZXMudG90YWxQYWdlLFxyXG4gICAgICBqdW1wOiB0cnVlLFxyXG4gICAgICBjYWxsYmFjazogYXBpID0+IHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGFwaS5nZXRDdXJyZW50KCkpXHJcbiAgICAgICAgc2VsZi5zZWFyY2hQYXJhbXMucGFnZSA9IGFwaS5nZXRDdXJyZW50KClcclxuICAgICAgICBzZWxmLmdldERvd25sb2FkUHJvZ3Jlc3Moc2VsZi5zZWFyY2hQYXJhbXMpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdClcclxuICAgICAgICAgIHNlbGYuaW5pdExpc3RQcm9ncmVzcyhyZXMpXHJcbiAgICAgICAgfSlcclxuICAgICAgICAvL+iOt+WPluW9k+WJjemhtemdolxyXG4gICAgICAgIC8vYXBpLmdldEN1cnJlbnQoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBpbml0TGlzdFByb2dyZXNzKHJlcykge1xyXG4gICAgdGhpcy5zZWxMaXN0RGF0YSA9IFtdXHJcbiAgICB0aGlzLmxpc3REYXRhID0gdGhpcy5mb3JtYXREYXRhKHJlcy5kYXRhLmxpc3REYXRhKVxyXG4gICAgaWYoIU9iamVjdC5rZXlzKHRoaXMuc2VhcmNoU3ViamVjdHMpLmxlbmd0aCl7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJGaWx0ZXJTdWJqZWN0KHJlcy5zdWJqZWN0cyxyZXMuc2Vzc2lvblN1YmplY3RJZClcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyTGlzdCgpXHJcbiAgfVxyXG4gIGZvcm1hdERhdGEoZGF0YSkge1xyXG4gICAgLy8yIHdvcmQgMWV4Y2VsIDMg5pWZ5a2m5a6dIDQg6ZSZ6aKY5paH5qGjXHJcbiAgICBsZXQgeyB3b3JkLCBleGNlbCwgdGVhY2hlciwgZXJyb3IgfSA9IHRoaXMuZG93bkxvYWRUeXBlXHJcbiAgICBjb25zdCBkb3dubG9hZE1hcCA9IHtcclxuICAgICAgW3dvcmRdOiAnd29yZCcsXHJcbiAgICAgIFtleGNlbF06ICdleGNlbCcsXHJcbiAgICAgIFt0ZWFjaGVyXTogJ+aVmeWtpuWunScsXHJcbiAgICAgIFtlcnJvcl06ICfplJnpopjmlofmoaMnXHJcbiAgICB9XHJcbiAgICBjb25zdCBjcmVhdGVTdGF0dXNNYXAgPSB7XHJcbiAgICAgIDE6ICfmnKrnlJ/miJAnLFxyXG4gICAgICAyOiAn5bey55Sf5oiQJyxcclxuICAgICAgMzogJ+eUn+aIkOWksei0pScsXHJcbiAgICAgIDQ6ICfnlJ/miJDkuK0nXHJcbiAgICB9XHJcbiAgICBsZXQgcmVzdWx0RGF0YSA9IFtdXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDAsIGlsZW4gPSBkYXRhLmxlbmd0aDsgaSA8IGlsZW47IGkrKykge1xyXG4gICAgICBsZXQgZXhhbU5hbWUgPSBkYXRhW2ldLmV4YW1OYW1lXHJcbiAgICAgIGxldCB0YXNrID0gZGF0YVtpXS50YXNrXHJcbiAgICAgIGZvciAobGV0IGogPSAwLCBqbGVuID0gdGFzay5sZW5ndGg7IGogPCBqbGVuOyBqKyspIHtcclxuICAgICAgICB0YXNrW2pdID0ge1xyXG4gICAgICAgICAgLi4udGFza1tqXSxcclxuICAgICAgICAgIGV4YW1OYW1lOiBleGFtTmFtZSxcclxuICAgICAgICAgIGNsYXNzTGVuZ3RoOiB0YXNrW2pdLmNsYXNzLmxlbmd0aCxcclxuICAgICAgICAgIGNsYXNzTGlzdDogdGFza1tqXS5jbGFzcy50b1N0cmluZygpLFxyXG4gICAgICAgICAgaXNIaWRlOiB0YXNrW2pdLmVycm9yTXNnID8gJycgOiAnaGlkZScsXHJcbiAgICAgICAgICBkb3dubG9hZE5hbWU6IGRvd25sb2FkTWFwW3Rhc2tbal0uZG93bmxvYWRUeXBlXSxcclxuICAgICAgICAgIGlzRGlzYWJlbGQ6IHRhc2tbal0uc3RhdHVzID09ICcyJyA/ICcnIDogJ2Rpc2FibGVkJyxcclxuICAgICAgICAgIGNvbXBsZXRlZFN0YXR1czogY3JlYXRlU3RhdHVzTWFwW3Rhc2tbal0uc3RhdHVzXSxcclxuICAgICAgICAgIGlzU2hvdzp0YXNrW2pdLmRvd25sb2FkVHlwZSA9PSAyID8gJ2lzU2hvdycgOiAnJ1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHREYXRhLnB1c2godGFza1tqXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdERhdGFcclxuICB9XHJcbiAgLy/muLLmn5Plrabnp5HnrZvpgInmnaHku7ZcclxuICByZW5kZXJGaWx0ZXJTdWJqZWN0KHN1YmplY3RzLGRlZmF1bHRTdWJqZWN0SWQpe1xyXG4gICAgICB0aGlzLnNlYXJjaFN1YmplY3RzID0gc3ViamVjdHM7XHJcbiAgICAgIGxldCBzdWJqZWN0T3B0aW9ucyA9ICcnO1xyXG4gICAgICBmb3IobGV0IHN1YmplY3RJZCBpbiBzdWJqZWN0cyl7XHJcbiAgICAgICAgbGV0IGlzRGVmYXVsdE9wdGlvbiA9IHN1YmplY3RJZCA9PT0gZGVmYXVsdFN1YmplY3RJZDtcclxuICAgICAgICBzdWJqZWN0T3B0aW9ucys9YDxvcHRpb24gdmFsdWU9XCIke3N1YmplY3RJZH1cIiAke2lzRGVmYXVsdE9wdGlvbj8nc2VsZWN0ZWQnOicnfT4ke3N1YmplY3RzW3N1YmplY3RJZF19PC9vcHRpb24+YFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VhcmNoUGFyYW1zLnN1YmplY3RJZCA9IGRlZmF1bHRTdWJqZWN0SWQ7XHJcbiAgICAgICQoJyNzdWJqZWN0RmlsdGVyJykuaHRtbChzdWJqZWN0T3B0aW9ucylcclxuICB9XHJcbiAgcmVuZGVyTGlzdCgpIHtcclxuICAgIGxldCBkYXRhID0gdGhpcy5saXN0RGF0YVxyXG4gICAgbGV0IGRvd25MaXN0SHRtbCA9ICcnXHJcbiAgICBmb3IgKGxldCBpID0gMCwgaWxlbiA9IGRhdGEubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKSB7XHJcbiAgICAgIGRvd25MaXN0SHRtbCArPSB0aGlzLmRvd25Mb2FkTGlzdEl0ZW1UcGwuc3Vic3RpdHV0ZShkYXRhW2ldKVxyXG4gICAgfVxyXG4gICAgaWYgKCFkb3duTGlzdEh0bWwpIHtcclxuICAgICAgZG93bkxpc3RIdG1sID0gdGhpcy5ub3Rhc2tUcGxcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRvd25MaXN0SHRtbCArPSB0aGlzLmJhdGNoQ2hlY2tBbGxUcGxcclxuICAgIH1cclxuICAgICQoJyNkb3duTG9hZExpc3QnKS5odG1sKGRvd25MaXN0SHRtbClcclxuICAgIHRoaXMudXBkYXRlTGlzdENoZWNrQ291bnQoKVxyXG4gIH1cclxuICB1cGRhdGVMaXN0Q2hlY2tDb3VudCgpIHtcclxuICAgIGxldCB0b3RhbENvdW50ID0gdGhpcy5saXN0RGF0YS5maWx0ZXIodiA9PiB2LnN0YXR1cyA9PT0gJzInKS5sZW5ndGhcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5kb3duTG9hZExpc3RDaGVjaywge1xyXG4gICAgICB0b3RhbENvdW50OiB0b3RhbENvdW50LFxyXG4gICAgICBjaGVja2VkSXRlbXNDb3VudDogMFxyXG4gICAgfSlcclxuICB9XHJcbiAgZGVsRG93bmxvYWQoaWRzLCBjYikge1xyXG4gICAgdGhpcy5kZWxUYXNrKHsgaWRzIH0pXHJcbiAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKVxyXG4gICAgICB9KVxyXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgY2IocmVzdWx0KVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgLy9jb25zb2xlLmVycm9yKGVycilcclxuICAgICAgfSlcclxuICB9XHJcbiAgZXZlbnRCaW5kKCkge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXNcclxuICAgICQoJ2JvZHknKS5hcHBlbmQoZG93bkxvYWRNb2R1bGVMaXN0VHBsKVxyXG4gICAgdGhpcy5kb3duTG9hZExpc3RDaGVjayA9IG5ldyBDaGVja0JveEl0ZW0oXHJcbiAgICAgICQoJyNkb3duTG9hZExpc3QnKSxcclxuICAgICAgKCRjaGVja0FsbEl0ZW0sIHN0YXR1cykgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsTGlzdERhdGEgPSBzdGF0dXMgPyBzaW1wbGVDb3B5KHRoaXMubGlzdERhdGEpIDogW11cclxuICAgICAgICAvLy8vY29uc29sZS5sb2coJ+aKpeihqOWGheWuuemAiemhuScsIGRvd25Mb2FkRGF0YS5yZXBvcnRUeXBlKVxyXG4gICAgICB9LFxyXG4gICAgICAoJGNoZWNrSXRlbSwgc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgbGV0IGN1cklkID0gJGNoZWNrSXRlbS5hdHRyKCdkYXRhLWlkJylcclxuICAgICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICBsZXQgY2hlY2tJdGVtID0gdGhpcy5saXN0RGF0YS5maW5kKHYgPT4gdi5pZCA9PT0gY3VySWQpXHJcbiAgICAgICAgICB0aGlzLnNlbExpc3REYXRhLnB1c2goY2hlY2tJdGVtKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgY2hlY2tJbmRleCA9IHRoaXMuc2VsTGlzdERhdGEuZmluZEluZGV4KHYgPT4gdi5pZCA9PT0gY3VySWQpXHJcbiAgICAgICAgICB0aGlzLnNlbExpc3REYXRhLnNwbGljZShjaGVja0luZGV4LCAxKVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLy8vY29uc29sZS5sb2coJ+aKpeihqOWGheWuuemAiemhuScsIGRvd25Mb2FkRGF0YS5yZXBvcnRUeXBlKVxyXG4gICAgICB9XHJcbiAgICApXHJcblxyXG4gICAgLy/kv67mlLnnrZvpgInmnaHku7ZcclxuICAgICQoJyNzdWJqZWN0RmlsdGVyJykuY2hhbmdlKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgc2VsZi5zZWFyY2hQYXJhbXMuc3ViamVjdElkID0gJCh0aGlzKS52YWwoKVxyXG4gICAgICAgIHNlbGYuZ2V0TGlzdCgpXHJcbiAgICB9KVxyXG4gICAgJCgnI3N0YXR1c0ZpbHRlcicpLmNoYW5nZShmdW5jdGlvbigpe1xyXG4gICAgICAgIHNlbGYuc2VhcmNoUGFyYW1zLnN0YXR1cyA9ICQodGhpcykudmFsKClcclxuICAgICAgICBzZWxmLmdldExpc3QoKVxyXG4gICAgfSlcclxuXHJcbiAgICBsZXQgdGhhdCA9IHRoaXNcclxuICAgICQoJyNkb3duTG9hZExpc3QnKS5vbignY2xpY2snLCAnLmRvd25Mb2FkSW5mbyAuaGJ0bnMgLnNpbmdsZUJ0bicsIGZ1bmN0aW9uKFxyXG4gICAgICBldmVudFxyXG4gICAgKSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICAgIGxldCBjdXJJZCA9ICQodGhpcykuYXR0cignZGF0YS1pZCcpXHJcbiAgICAgIC8v5Yig6ZmkXHJcbiAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdkZWwnKSkge1xyXG4gICAgICAgIHNlbGYuZGVsRG93bmxvYWQoW2N1cklkXSwgcmVzdWx0ID0+IHtcclxuXHJcbiAgICAgICAgICBsZXQgZGVsSW5kZXggPSBzZWxmLmxpc3REYXRhLmZpbmRJbmRleCh2ID0+IHYuaWQgPT09IGN1cklkKVxyXG4gICAgICAgICAgc2VsZi5saXN0RGF0YS5zcGxpY2UoZGVsSW5kZXgsIDEpXHJcblxyXG4gICAgICAgICAgaWYoIXNlbGYubGlzdERhdGEubGVuZ3RoKXtcclxuICAgICAgICAgICAgc2VsZi5nZXRMaXN0KClcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBzZWxmLnJlbmRlckxpc3QoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gZWxzZSBpZiAoJCh0aGlzKS5oYXNDbGFzcygnY3JlYXRlJykpIHsgLy/miZPljbBcclxuICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygnZGlzYWJsZWQnKSkgcmV0dXJuXHJcbiAgICAgICAgbGV0IGlkcyA9IHRoYXQubGlzdERhdGEuZmlsdGVyKHM9PnMuaWQgPT0gY3VySWQpXHJcbiAgICAgICAgbGV0IGRhdGEgPSAnJ1xyXG4gICAgICAgIGlmIChpZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBpZHNbMF0ucHJpbnRcclxuICAgICAgICAgIH1cclxuICAgICAgICBldmFsdWF0aW9uQ2xpZW50LkJ1bGtQcmludFBERihKU09OLnN0cmluZ2lmeShkYXRhKSlcclxuXHJcbiAgICAgIH0gZWxzZSB7IC8vIOS4i+i9vVxyXG4gICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdkaXNhYmxlZCcpKSByZXR1cm5cclxuICAgICAgICBsZXQgemlwVXJsID0gJCh0aGlzKS5hdHRyKCdkYXRhLXppcFVybCcpXHJcbiAgICAgICAgbG9jYXRpb24uaHJlZiA9IHppcFVybFxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgJCgnI2Rvd25Mb2FkTGlzdCcpLm9uKCdjbGljaycsICcuYmF0Y2hCdG5zIC5vcHJhdG9yQnRuJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgICAgaWYgKCFzZWxmLnNlbExpc3REYXRhLmxlbmd0aCkge1xyXG4gICAgICAgIGhnY19sYXllci5hbGVydCgn6K+36YCJ5oup6ZyA6KaB5pON5L2c55qE6aG5JylcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICAvL+aJuemHj+WIoOmZpFxyXG4gICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygnbm90aWNlJykpIHtcclxuICAgICAgICBzZWxmLmRlbERvd25sb2FkKFxyXG4gICAgICAgICAgc2VsZi5zZWxMaXN0RGF0YS5tYXAodiA9PiB2LmlkKSxcclxuICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHNlbGYuc2VsTGlzdERhdGEuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICAgICAgICBsZXQgY3VySW5kZXggPSBzZWxmLmxpc3REYXRhLmZpbmRJbmRleCgoeyBpZCB9KSA9PiBpZCA9PSB2LmlkKVxyXG4gICAgICAgICAgICAgIHNlbGYubGlzdERhdGEuc3BsaWNlKGN1ckluZGV4LCAxKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBzZWxmLnJlbmRlckxpc3QoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICAkKCcuaGdjX3JlcG9ydCBoMi50aXRsZSAuaGNsb3NlJykuY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAgICQoJyNoZ2NfcmVwb3J0Qm94JykucmVtb3ZlKClcclxuICAgICAgRG93bkxvYWRNb2RlbExpc3RJbnN0YW5jZSA9IG51bGxcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiQoZnVuY3Rpb24oKSB7XHJcbiAgICAkKCcjZHluYW1pYy10YWJsZSAuZG93bmxvYWRGaWxlQnRuJykuY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAgIGlmKCQodGhpcykuYXR0cigndG9waWNfY291bnQnKSA+PSA0MCkge1xyXG4gICAgICAgIC8vIGhhc1hhNCBoYXNZYTMgaGFzWGEzXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAkKCcjaGFzWGE0Jykuc2hvdygpO1xyXG4gICAgICAgICAgJCgnI2hhc1lhMycpLmhpZGUoKTtcclxuICAgICAgICAgICQoJyNoYXNYYTMnKS5zaG93KCk7XHJcbiAgICAgICAgfSwyMClcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgJCgnI2hhc1hhNCcpLnNob3coKTtcclxuICAgICAgICAgICQoJyNoYXNZYTMnKS5zaG93KCk7XHJcbiAgICAgICAgICAkKCcjaGFzWGEzJykuc2hvdygpO1xyXG4gICAgICAgIH0sMjApXHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFJU19CQVRDSERPV05MT0FEKSB7XHJcbiAgICAgICAgbGV0IGRvd25Mb2FkVHlwZSA9ICQodGhpcykuYXR0cignZGF0YS1kb3dubG9hZFR5cGUnKVxyXG4gICAgICAgIGxldCBleGFtSWQgPSAkKHRoaXMpLmF0dHIoJ3JlbCcpXHJcbiAgICAgICAgbGV0IHN1YmplY3RJZCA9ICQodGhpcykuYXR0cignc3ViamVjdCcpXHJcbiAgICAgICAgbGV0IGNsYXNzSWQgPSAkKHRoaXMpLmF0dHIoJ2NsYXNzX2lkJylcclxuICAgICAgICBsZXQgY29tcGxldGUgPSAkKHRoaXMpLmF0dHIoJ2NvbXBsZXRlJyk7XHJcbiAgICAgICAgRG93bkxvYWRNb2RlbEluc3RhbmNlID0gbmV3IERvd25Mb2FkTW9kZWwoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGV4YW1JZCxcclxuICAgICAgICAgICAgc3ViamVjdElkLFxyXG4gICAgICAgICAgICBjbGFzc0lkLFxyXG4gICAgICAgICAgICBkb3duTG9hZFR5cGUsXHJcbiAgICAgICAgICAgIGNvbXBsZXRlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBzdWJqZWN0SWQgPSAkKHRoaXMpLmF0dHIoJ3N1YmplY3QnKVxyXG4gICAgICAgIGxldCBleGFtSWQgPSAkKHRoaXMpLmF0dHIoJ3JlbCcpXHJcbiAgICAgICAgbGV0IGNvbXBsZXRlID0gJCh0aGlzKS5hdHRyKCdjb21wbGV0ZScpO1xyXG4gICAgICAgIERvd25Mb2FkTW9kZWxJbnN0YW5jZSA9IG5ldyBEb3duTG9hZE1vZGVsKHtcclxuICAgICAgICAgIGV4YW1JZCwgc3ViamVjdElkLGNvbXBsZXRlXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICBpZigkKHRoaXMpLmF0dHIoJ2RhdGEtZG93bmxvYWRUeXBlJykgIT0gMil7XHJcbiAgICAgICAgJCgnI3Njb3JlRGlzcGxheVNldHRpbmdzJykuaGlkZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ3NjaG9vbF9ncmFkZScpID09PSAnanVuaW9yX2hpZ2hfc2Nob29sJyl7XHJcbiAgICAgICAgJCgnLnJlcG9ydEl0ZW0gLmRvd25Mb2FkT2JqZWN0IGxpJykuZXEoMikuaGlkZSgpXHJcbiAgICAgICAgJCgnLnJlcG9ydEl0ZW0gLmRvd25Mb2FkT2JqZWN0IGxpJykuZXEoMykuaGlkZSgpXHJcbiAgICAgICAgJCgnLnJlcG9ydEl0ZW0gLmRvd25Mb2FkT2JqZWN0JykuY3NzKHsnanVzdGlmeS1jb250ZW50JzonZmxleC1zdGFydCd9KVxyXG4gICAgICAgICQoJy5yZXBvcnRJdGVtIC5kb3duTG9hZE9iamVjdCBsaScpLmVxKDApLmNzcygnbWFyZ2luUmlnaHQnLCczMHB4JylcclxuICAgICAgfVxyXG5cclxuICAgIH0pXHJcbiAgICAkKCcucHJvZ3Jlc3NfYnRuJykuY2xpY2soZnVuY3Rpb24oZSkge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGxldCBzdWJqZWN0SWQgPSAkKHRoaXMpLmF0dHIoJ3N1YmplY3RJZCcpXHJcbiAgICAgIERvd25Mb2FkTW9kZWxMaXN0SW5zdGFuY2UgPSBuZXcgRG93bkxvYWRMaXN0TW9kZWwoc3ViamVjdElkKVxyXG4gICAgfSlcclxufSlcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBREE7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUhBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FDM0NBO0FBQ0E7QUFDQTtBQUFBLGFBaUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBRUE7QUFHQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBTEE7QUFPQTs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQU5BO0FBUUE7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTs7O0FBQ0E7QUFDQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBOzs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUhBO0FBS0E7Ozs7OztBQUdBOzs7O0FDdklBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FDMUVBO0FBaVFBO0FBd0JBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDelJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBUUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUdBO0FBR0E7QUFFQTtBQUNBO0FBR0E7QUFHQTtBQTBCQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7Ozs7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBWkE7QUFhQTtBQUNBOzs7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFDQTs7Ozs7OztBQUVBO0FBQ0E7O0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Ozs7O0FBQ0E7Ozs7QUFHQTtBQUlBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7OztBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUdBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTs7O0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBTUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQXRJQTtBQUNBO0FBQ0E7QUF1SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBOzs7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuQkE7QUFDQTtBQXFCQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbEJBO0FBQ0E7QUFxQkE7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdEhBO0FBc0hBO0FBQ0E7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTs7QUFEQTtBQUVBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUtBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBYkE7QUFBQTtBQUNBO0FBREE7QUFlQTtBQUFBO0FBQ0E7QUFDQTtBQWpCQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBR0E7QUFDQTs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBTUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFHQTtBQUhBO0FBQ0E7QUFJQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBSUE7QUFDQTtBQUNBOzs7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBRkE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXhCQTtBQTBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBQ0E7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUFBOzs7OztBQUVBOzs7OztBQUdBO0FBQUE7QUFBQTtBQUFBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTs7QUFEQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQUE7QUFDQTs7Ozs7QUFHQTtBQUlBO0FBQ0E7QUFDQTs7Ozs7QUFFQTtBQUNBO0FBQUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7Ozs7OztBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFHQTtBQUVBOzs7O0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUVBO0FBTUE7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQS8xQkE7QUFDQTtBQUNBO0FBZzJCQTs7Ozs7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakJBO0FBaUJBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBOztBQUNBO0FBQ0E7O0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDQTs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBWkE7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTs7O0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTs7O0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBOzs7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7OztBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFwT0E7QUFDQTtBQXFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFRQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBREE7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///23\n")}]);