"use strict"; /* * ATTENTION: An "eval-source-map" devtool has been used. * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ exports.id = "vendor-chunks/uvu"; exports.ids = ["vendor-chunks/uvu"]; exports.modules = { /***/ "(ssr)/./node_modules/uvu/assert/index.mjs": /*!*******************************************!*\ !*** ./node_modules/uvu/assert/index.mjs ***! \*******************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Assertion: () => (/* binding */ Assertion),\n/* harmony export */ equal: () => (/* binding */ equal),\n/* harmony export */ fixture: () => (/* binding */ fixture),\n/* harmony export */ instance: () => (/* binding */ instance),\n/* harmony export */ is: () => (/* binding */ is),\n/* harmony export */ match: () => (/* binding */ match),\n/* harmony export */ not: () => (/* binding */ not),\n/* harmony export */ ok: () => (/* binding */ ok),\n/* harmony export */ snapshot: () => (/* binding */ snapshot),\n/* harmony export */ throws: () => (/* binding */ throws),\n/* harmony export */ type: () => (/* binding */ type),\n/* harmony export */ unreachable: () => (/* binding */ unreachable)\n/* harmony export */ });\n/* harmony import */ var dequal__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dequal */ \"(ssr)/./node_modules/dequal/dist/index.mjs\");\n/* harmony import */ var uvu_diff__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! uvu/diff */ \"(ssr)/./node_modules/uvu/diff/index.mjs\");\n\n\nfunction dedent(str) {\n str = str.replace(/\\r?\\n/g, \"\\n\");\n let arr = str.match(/^[ \\t]*(?=\\S)/gm);\n let i = 0, min = 1 / 0, len = (arr || []).length;\n for(; i < len; i++)min = Math.min(min, arr[i].length);\n return len && min ? str.replace(new RegExp(`^[ \\\\t]{${min}}`, \"gm\"), \"\") : str;\n}\nclass Assertion extends Error {\n constructor(opts = {}){\n super(opts.message);\n this.name = \"Assertion\";\n this.code = \"ERR_ASSERTION\";\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.details = opts.details || false;\n this.generated = !!opts.generated;\n this.operator = opts.operator;\n this.expects = opts.expects;\n this.actual = opts.actual;\n }\n}\nfunction assert(bool, actual, expects, operator, detailer, backup, msg) {\n if (bool) return;\n let message = msg || backup;\n if (msg instanceof Error) throw msg;\n let details = detailer && detailer(actual, expects);\n throw new Assertion({\n actual,\n expects,\n operator,\n message,\n details,\n generated: !msg\n });\n}\nfunction ok(val, msg) {\n assert(!!val, false, true, \"ok\", false, \"Expected value to be truthy\", msg);\n}\nfunction is(val, exp, msg) {\n assert(val === exp, val, exp, \"is\", uvu_diff__WEBPACK_IMPORTED_MODULE_1__.compare, \"Expected values to be strictly equal:\", msg);\n}\nfunction equal(val, exp, msg) {\n assert((0,dequal__WEBPACK_IMPORTED_MODULE_0__.dequal)(val, exp), val, exp, \"equal\", uvu_diff__WEBPACK_IMPORTED_MODULE_1__.compare, \"Expected values to be deeply equal:\", msg);\n}\nfunction unreachable(msg) {\n assert(false, true, false, \"unreachable\", false, \"Expected not to be reached!\", msg);\n}\nfunction type(val, exp, msg) {\n let tmp = typeof val;\n assert(tmp === exp, tmp, exp, \"type\", false, `Expected \"${tmp}\" to be \"${exp}\"`, msg);\n}\nfunction instance(val, exp, msg) {\n let name = \"`\" + (exp.name || exp.constructor.name) + \"`\";\n assert(val instanceof exp, val, exp, \"instance\", false, `Expected value to be an instance of ${name}`, msg);\n}\nfunction match(val, exp, msg) {\n if (typeof exp === \"string\") {\n assert(val.includes(exp), val, exp, \"match\", false, `Expected value to include \"${exp}\" substring`, msg);\n } else {\n assert(exp.test(val), val, exp, \"match\", false, `Expected value to match \\`${String(exp)}\\` pattern`, msg);\n }\n}\nfunction snapshot(val, exp, msg) {\n val = dedent(val);\n exp = dedent(exp);\n assert(val === exp, val, exp, \"snapshot\", uvu_diff__WEBPACK_IMPORTED_MODULE_1__.lines, \"Expected value to match snapshot:\", msg);\n}\nconst lineNums = (x, y)=>(0,uvu_diff__WEBPACK_IMPORTED_MODULE_1__.lines)(x, y, 1);\nfunction fixture(val, exp, msg) {\n val = dedent(val);\n exp = dedent(exp);\n assert(val === exp, val, exp, \"fixture\", lineNums, \"Expected value to match fixture:\", msg);\n}\nfunction throws(blk, exp, msg) {\n if (!msg && typeof exp === \"string\") {\n msg = exp;\n exp = null;\n }\n try {\n blk();\n assert(false, false, true, \"throws\", false, \"Expected function to throw\", msg);\n } catch (err) {\n if (err instanceof Assertion) throw err;\n if (typeof exp === \"function\") {\n assert(exp(err), false, true, \"throws\", false, \"Expected function to throw matching exception\", msg);\n } else if (exp instanceof RegExp) {\n assert(exp.test(err.message), false, true, \"throws\", false, `Expected function to throw exception matching \\`${String(exp)}\\` pattern`, msg);\n }\n }\n}\n// ---\nfunction not(val, msg) {\n assert(!val, true, false, \"not\", false, \"Expected value to be falsey\", msg);\n}\nnot.ok = not;\nis.not = function(val, exp, msg) {\n assert(val !== exp, val, exp, \"is.not\", false, \"Expected values not to be strictly equal\", msg);\n};\nnot.equal = function(val, exp, msg) {\n assert(!(0,dequal__WEBPACK_IMPORTED_MODULE_0__.dequal)(val, exp), val, exp, \"not.equal\", false, \"Expected values not to be deeply equal\", msg);\n};\nnot.type = function(val, exp, msg) {\n let tmp = typeof val;\n assert(tmp !== exp, tmp, exp, \"not.type\", false, `Expected \"${tmp}\" not to be \"${exp}\"`, msg);\n};\nnot.instance = function(val, exp, msg) {\n let name = \"`\" + (exp.name || exp.constructor.name) + \"`\";\n assert(!(val instanceof exp), val, exp, \"not.instance\", false, `Expected value not to be an instance of ${name}`, msg);\n};\nnot.snapshot = function(val, exp, msg) {\n val = dedent(val);\n exp = dedent(exp);\n assert(val !== exp, val, exp, \"not.snapshot\", false, \"Expected value not to match snapshot\", msg);\n};\nnot.fixture = function(val, exp, msg) {\n val = dedent(val);\n exp = dedent(exp);\n assert(val !== exp, val, exp, \"not.fixture\", false, \"Expected value not to match fixture\", msg);\n};\nnot.match = function(val, exp, msg) {\n if (typeof exp === \"string\") {\n assert(!val.includes(exp), val, exp, \"not.match\", false, `Expected value not to include \"${exp}\" substring`, msg);\n } else {\n assert(!exp.test(val), val, exp, \"not.match\", false, `Expected value not to match \\`${String(exp)}\\` pattern`, msg);\n }\n};\nnot.throws = function(blk, exp, msg) {\n if (!msg && typeof exp === \"string\") {\n msg = exp;\n exp = null;\n }\n try {\n blk();\n } catch (err) {\n if (typeof exp === \"function\") {\n assert(!exp(err), true, false, \"not.throws\", false, \"Expected function not to throw matching exception\", msg);\n } else if (exp instanceof RegExp) {\n assert(!exp.test(err.message), true, false, \"not.throws\", false, `Expected function not to throw exception matching \\`${String(exp)}\\` pattern`, msg);\n } else if (!exp) {\n assert(false, true, false, \"not.throws\", false, \"Expected function not to throw\", msg);\n }\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvdXZ1L2Fzc2VydC9pbmRleC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBZ0M7QUFDVTtBQUUxQyxTQUFTRyxPQUFPQyxHQUFHO0lBQ2xCQSxNQUFNQSxJQUFJQyxPQUFPLENBQUMsVUFBVTtJQUMzQixJQUFJQyxNQUFNRixJQUFJRyxLQUFLLENBQUM7SUFDcEIsSUFBSUMsSUFBSSxHQUFHQyxNQUFNLElBQUUsR0FBR0MsTUFBTSxDQUFDSixPQUFLLEVBQUUsRUFBRUssTUFBTTtJQUM1QyxNQUFPSCxJQUFJRSxLQUFLRixJQUFLQyxNQUFNRyxLQUFLSCxHQUFHLENBQUNBLEtBQUtILEdBQUcsQ0FBQ0UsRUFBRSxDQUFDRyxNQUFNO0lBQ3RELE9BQU9ELE9BQU9ELE1BQU1MLElBQUlDLE9BQU8sQ0FBQyxJQUFJUSxPQUFPLENBQUMsUUFBUSxFQUFFSixJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sTUFBTUw7QUFDN0U7QUFFTyxNQUFNVSxrQkFBa0JDO0lBQzlCQyxZQUFZQyxPQUFLLENBQUMsQ0FBQyxDQUFFO1FBQ3BCLEtBQUssQ0FBQ0EsS0FBS0MsT0FBTztRQUNsQixJQUFJLENBQUNDLElBQUksR0FBRztRQUNaLElBQUksQ0FBQ0MsSUFBSSxHQUFHO1FBQ1osSUFBSUwsTUFBTU0saUJBQWlCLEVBQUU7WUFDNUJOLE1BQU1NLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUNMLFdBQVc7UUFDL0M7UUFDQSxJQUFJLENBQUNNLE9BQU8sR0FBR0wsS0FBS0ssT0FBTyxJQUFJO1FBQy9CLElBQUksQ0FBQ0MsU0FBUyxHQUFHLENBQUMsQ0FBQ04sS0FBS00sU0FBUztRQUNqQyxJQUFJLENBQUNDLFFBQVEsR0FBR1AsS0FBS08sUUFBUTtRQUM3QixJQUFJLENBQUNDLE9BQU8sR0FBR1IsS0FBS1EsT0FBTztRQUMzQixJQUFJLENBQUNDLE1BQU0sR0FBR1QsS0FBS1MsTUFBTTtJQUMxQjtBQUNEO0FBRUEsU0FBU0MsT0FBT0MsSUFBSSxFQUFFRixNQUFNLEVBQUVELE9BQU8sRUFBRUQsUUFBUSxFQUFFSyxRQUFRLEVBQUVDLE1BQU0sRUFBRUMsR0FBRztJQUNyRSxJQUFJSCxNQUFNO0lBQ1YsSUFBSVYsVUFBVWEsT0FBT0Q7SUFDckIsSUFBSUMsZUFBZWhCLE9BQU8sTUFBTWdCO0lBQ2hDLElBQUlULFVBQVVPLFlBQVlBLFNBQVNILFFBQVFEO0lBQzNDLE1BQU0sSUFBSVgsVUFBVTtRQUFFWTtRQUFRRDtRQUFTRDtRQUFVTjtRQUFTSTtRQUFTQyxXQUFXLENBQUNRO0lBQUk7QUFDcEY7QUFFTyxTQUFTQyxHQUFHQyxHQUFHLEVBQUVGLEdBQUc7SUFDMUJKLE9BQU8sQ0FBQyxDQUFDTSxLQUFLLE9BQU8sTUFBTSxNQUFNLE9BQU8sK0JBQStCRjtBQUN4RTtBQUVPLFNBQVNHLEdBQUdELEdBQUcsRUFBRUUsR0FBRyxFQUFFSixHQUFHO0lBQy9CSixPQUFPTSxRQUFRRSxLQUFLRixLQUFLRSxLQUFLLE1BQU1sQyw2Q0FBT0EsRUFBRSx5Q0FBeUM4QjtBQUN2RjtBQUVPLFNBQVNLLE1BQU1ILEdBQUcsRUFBRUUsR0FBRyxFQUFFSixHQUFHO0lBQ2xDSixPQUFPM0IsOENBQU1BLENBQUNpQyxLQUFLRSxNQUFNRixLQUFLRSxLQUFLLFNBQVNsQyw2Q0FBT0EsRUFBRSx1Q0FBdUM4QjtBQUM3RjtBQUVPLFNBQVNNLFlBQVlOLEdBQUc7SUFDOUJKLE9BQU8sT0FBTyxNQUFNLE9BQU8sZUFBZSxPQUFPLCtCQUErQkk7QUFDakY7QUFFTyxTQUFTTyxLQUFLTCxHQUFHLEVBQUVFLEdBQUcsRUFBRUosR0FBRztJQUNqQyxJQUFJUSxNQUFNLE9BQU9OO0lBQ2pCTixPQUFPWSxRQUFRSixLQUFLSSxLQUFLSixLQUFLLFFBQVEsT0FBTyxDQUFDLFVBQVUsRUFBRUksSUFBSSxTQUFTLEVBQUVKLElBQUksQ0FBQyxDQUFDLEVBQUVKO0FBQ2xGO0FBRU8sU0FBU1MsU0FBU1AsR0FBRyxFQUFFRSxHQUFHLEVBQUVKLEdBQUc7SUFDckMsSUFBSVosT0FBTyxNQUFPZ0IsQ0FBQUEsSUFBSWhCLElBQUksSUFBSWdCLElBQUluQixXQUFXLENBQUNHLElBQUksSUFBSTtJQUN0RFEsT0FBT00sZUFBZUUsS0FBS0YsS0FBS0UsS0FBSyxZQUFZLE9BQU8sQ0FBQyxvQ0FBb0MsRUFBRWhCLEtBQUssQ0FBQyxFQUFFWTtBQUN4RztBQUVPLFNBQVN4QixNQUFNMEIsR0FBRyxFQUFFRSxHQUFHLEVBQUVKLEdBQUc7SUFDbEMsSUFBSSxPQUFPSSxRQUFRLFVBQVU7UUFDNUJSLE9BQU9NLElBQUlRLFFBQVEsQ0FBQ04sTUFBTUYsS0FBS0UsS0FBSyxTQUFTLE9BQU8sQ0FBQywyQkFBMkIsRUFBRUEsSUFBSSxXQUFXLENBQUMsRUFBRUo7SUFDckcsT0FBTztRQUNOSixPQUFPUSxJQUFJTyxJQUFJLENBQUNULE1BQU1BLEtBQUtFLEtBQUssU0FBUyxPQUFPLENBQUMsMEJBQTBCLEVBQUVRLE9BQU9SLEtBQUssVUFBVSxDQUFDLEVBQUVKO0lBQ3ZHO0FBQ0Q7QUFFTyxTQUFTYSxTQUFTWCxHQUFHLEVBQUVFLEdBQUcsRUFBRUosR0FBRztJQUNyQ0UsTUFBSTlCLE9BQU84QjtJQUFNRSxNQUFJaEMsT0FBT2dDO0lBQzVCUixPQUFPTSxRQUFRRSxLQUFLRixLQUFLRSxLQUFLLFlBQVlqQywyQ0FBS0EsRUFBRSxxQ0FBcUM2QjtBQUN2RjtBQUVBLE1BQU1jLFdBQVcsQ0FBQ0MsR0FBR0MsSUFBTTdDLCtDQUFLQSxDQUFDNEMsR0FBR0MsR0FBRztBQUNoQyxTQUFTQyxRQUFRZixHQUFHLEVBQUVFLEdBQUcsRUFBRUosR0FBRztJQUNwQ0UsTUFBSTlCLE9BQU84QjtJQUFNRSxNQUFJaEMsT0FBT2dDO0lBQzVCUixPQUFPTSxRQUFRRSxLQUFLRixLQUFLRSxLQUFLLFdBQVdVLFVBQVUsb0NBQW9DZDtBQUN4RjtBQUVPLFNBQVNrQixPQUFPQyxHQUFHLEVBQUVmLEdBQUcsRUFBRUosR0FBRztJQUNuQyxJQUFJLENBQUNBLE9BQU8sT0FBT0ksUUFBUSxVQUFVO1FBQ3BDSixNQUFNSTtRQUFLQSxNQUFNO0lBQ2xCO0lBRUEsSUFBSTtRQUNIZTtRQUNBdkIsT0FBTyxPQUFPLE9BQU8sTUFBTSxVQUFVLE9BQU8sOEJBQThCSTtJQUMzRSxFQUFFLE9BQU9vQixLQUFLO1FBQ2IsSUFBSUEsZUFBZXJDLFdBQVcsTUFBTXFDO1FBRXBDLElBQUksT0FBT2hCLFFBQVEsWUFBWTtZQUM5QlIsT0FBT1EsSUFBSWdCLE1BQU0sT0FBTyxNQUFNLFVBQVUsT0FBTyxpREFBaURwQjtRQUNqRyxPQUFPLElBQUlJLGVBQWV0QixRQUFRO1lBQ2pDYyxPQUFPUSxJQUFJTyxJQUFJLENBQUNTLElBQUlqQyxPQUFPLEdBQUcsT0FBTyxNQUFNLFVBQVUsT0FBTyxDQUFDLGdEQUFnRCxFQUFFeUIsT0FBT1IsS0FBSyxVQUFVLENBQUMsRUFBRUo7UUFDekk7SUFDRDtBQUNEO0FBRUEsTUFBTTtBQUVDLFNBQVNxQixJQUFJbkIsR0FBRyxFQUFFRixHQUFHO0lBQzNCSixPQUFPLENBQUNNLEtBQUssTUFBTSxPQUFPLE9BQU8sT0FBTywrQkFBK0JGO0FBQ3hFO0FBRUFxQixJQUFJcEIsRUFBRSxHQUFHb0I7QUFFVGxCLEdBQUdrQixHQUFHLEdBQUcsU0FBVW5CLEdBQUcsRUFBRUUsR0FBRyxFQUFFSixHQUFHO0lBQy9CSixPQUFPTSxRQUFRRSxLQUFLRixLQUFLRSxLQUFLLFVBQVUsT0FBTyw0Q0FBNENKO0FBQzVGO0FBRUFxQixJQUFJaEIsS0FBSyxHQUFHLFNBQVVILEdBQUcsRUFBRUUsR0FBRyxFQUFFSixHQUFHO0lBQ2xDSixPQUFPLENBQUMzQiw4Q0FBTUEsQ0FBQ2lDLEtBQUtFLE1BQU1GLEtBQUtFLEtBQUssYUFBYSxPQUFPLDBDQUEwQ0o7QUFDbkc7QUFFQXFCLElBQUlkLElBQUksR0FBRyxTQUFVTCxHQUFHLEVBQUVFLEdBQUcsRUFBRUosR0FBRztJQUNqQyxJQUFJUSxNQUFNLE9BQU9OO0lBQ2pCTixPQUFPWSxRQUFRSixLQUFLSSxLQUFLSixLQUFLLFlBQVksT0FBTyxDQUFDLFVBQVUsRUFBRUksSUFBSSxhQUFhLEVBQUVKLElBQUksQ0FBQyxDQUFDLEVBQUVKO0FBQzFGO0FBRUFxQixJQUFJWixRQUFRLEdBQUcsU0FBVVAsR0FBRyxFQUFFRSxHQUFHLEVBQUVKLEdBQUc7SUFDckMsSUFBSVosT0FBTyxNQUFPZ0IsQ0FBQUEsSUFBSWhCLElBQUksSUFBSWdCLElBQUluQixXQUFXLENBQUNHLElBQUksSUFBSTtJQUN0RFEsT0FBTyxDQUFFTSxDQUFBQSxlQUFlRSxHQUFFLEdBQUlGLEtBQUtFLEtBQUssZ0JBQWdCLE9BQU8sQ0FBQyx3Q0FBd0MsRUFBRWhCLEtBQUssQ0FBQyxFQUFFWTtBQUNuSDtBQUVBcUIsSUFBSVIsUUFBUSxHQUFHLFNBQVVYLEdBQUcsRUFBRUUsR0FBRyxFQUFFSixHQUFHO0lBQ3JDRSxNQUFJOUIsT0FBTzhCO0lBQU1FLE1BQUloQyxPQUFPZ0M7SUFDNUJSLE9BQU9NLFFBQVFFLEtBQUtGLEtBQUtFLEtBQUssZ0JBQWdCLE9BQU8sd0NBQXdDSjtBQUM5RjtBQUVBcUIsSUFBSUosT0FBTyxHQUFHLFNBQVVmLEdBQUcsRUFBRUUsR0FBRyxFQUFFSixHQUFHO0lBQ3BDRSxNQUFJOUIsT0FBTzhCO0lBQU1FLE1BQUloQyxPQUFPZ0M7SUFDNUJSLE9BQU9NLFFBQVFFLEtBQUtGLEtBQUtFLEtBQUssZUFBZSxPQUFPLHVDQUF1Q0o7QUFDNUY7QUFFQXFCLElBQUk3QyxLQUFLLEdBQUcsU0FBVTBCLEdBQUcsRUFBRUUsR0FBRyxFQUFFSixHQUFHO0lBQ2xDLElBQUksT0FBT0ksUUFBUSxVQUFVO1FBQzVCUixPQUFPLENBQUNNLElBQUlRLFFBQVEsQ0FBQ04sTUFBTUYsS0FBS0UsS0FBSyxhQUFhLE9BQU8sQ0FBQywrQkFBK0IsRUFBRUEsSUFBSSxXQUFXLENBQUMsRUFBRUo7SUFDOUcsT0FBTztRQUNOSixPQUFPLENBQUNRLElBQUlPLElBQUksQ0FBQ1QsTUFBTUEsS0FBS0UsS0FBSyxhQUFhLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRVEsT0FBT1IsS0FBSyxVQUFVLENBQUMsRUFBRUo7SUFDaEg7QUFDRDtBQUVBcUIsSUFBSUgsTUFBTSxHQUFHLFNBQVVDLEdBQUcsRUFBRWYsR0FBRyxFQUFFSixHQUFHO0lBQ25DLElBQUksQ0FBQ0EsT0FBTyxPQUFPSSxRQUFRLFVBQVU7UUFDcENKLE1BQU1JO1FBQUtBLE1BQU07SUFDbEI7SUFFQSxJQUFJO1FBQ0hlO0lBQ0QsRUFBRSxPQUFPQyxLQUFLO1FBQ2IsSUFBSSxPQUFPaEIsUUFBUSxZQUFZO1lBQzlCUixPQUFPLENBQUNRLElBQUlnQixNQUFNLE1BQU0sT0FBTyxjQUFjLE9BQU8scURBQXFEcEI7UUFDMUcsT0FBTyxJQUFJSSxlQUFldEIsUUFBUTtZQUNqQ2MsT0FBTyxDQUFDUSxJQUFJTyxJQUFJLENBQUNTLElBQUlqQyxPQUFPLEdBQUcsTUFBTSxPQUFPLGNBQWMsT0FBTyxDQUFDLG9EQUFvRCxFQUFFeUIsT0FBT1IsS0FBSyxVQUFVLENBQUMsRUFBRUo7UUFDbEosT0FBTyxJQUFJLENBQUNJLEtBQUs7WUFDaEJSLE9BQU8sT0FBTyxNQUFNLE9BQU8sY0FBYyxPQUFPLGtDQUFrQ0k7UUFDbkY7SUFDRDtBQUNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMvdXZ1L2Fzc2VydC9pbmRleC5tanM/MjA1OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXF1YWzCoH0gZnJvbSAnZGVxdWFsJztcbmltcG9ydCB7IGNvbXBhcmUsIGxpbmVzIH0gZnJvbSAndXZ1L2RpZmYnO1xuXG5mdW5jdGlvbiBkZWRlbnQoc3RyKSB7XG5cdHN0ciA9IHN0ci5yZXBsYWNlKC9cXHI/XFxuL2csICdcXG4nKTtcbiAgbGV0IGFyciA9IHN0ci5tYXRjaCgvXlsgXFx0XSooPz1cXFMpL2dtKTtcbiAgbGV0IGkgPSAwLCBtaW4gPSAxLzAsIGxlbiA9IChhcnJ8fFtdKS5sZW5ndGg7XG4gIGZvciAoOyBpIDwgbGVuOyBpKyspIG1pbiA9IE1hdGgubWluKG1pbiwgYXJyW2ldLmxlbmd0aCk7XG4gIHJldHVybiBsZW4gJiYgbWluID8gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cChgXlsgXFxcXHRdeyR7bWlufX1gLCAnZ20nKSwgJycpIDogc3RyO1xufVxuXG5leHBvcnQgY2xhc3MgQXNzZXJ0aW9uIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG5cdFx0c3VwZXIob3B0cy5tZXNzYWdlKTtcblx0XHR0aGlzLm5hbWUgPSAnQXNzZXJ0aW9uJztcblx0XHR0aGlzLmNvZGUgPSAnRVJSX0FTU0VSVElPTic7XG5cdFx0aWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG5cdFx0XHRFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcblx0XHR9XG5cdFx0dGhpcy5kZXRhaWxzID0gb3B0cy5kZXRhaWxzIHx8IGZhbHNlO1xuXHRcdHRoaXMuZ2VuZXJhdGVkID0gISFvcHRzLmdlbmVyYXRlZDtcblx0XHR0aGlzLm9wZXJhdG9yID0gb3B0cy5vcGVyYXRvcjtcblx0XHR0aGlzLmV4cGVjdHMgPSBvcHRzLmV4cGVjdHM7XG5cdFx0dGhpcy5hY3R1YWwgPSBvcHRzLmFjdHVhbDtcblx0fVxufVxuXG5mdW5jdGlvbiBhc3NlcnQoYm9vbCwgYWN0dWFsLCBleHBlY3RzLCBvcGVyYXRvciwgZGV0YWlsZXIsIGJhY2t1cCwgbXNnKSB7XG5cdGlmIChib29sKSByZXR1cm47XG5cdGxldCBtZXNzYWdlID0gbXNnIHx8IGJhY2t1cDtcblx0aWYgKG1zZyBpbnN0YW5jZW9mIEVycm9yKSB0aHJvdyBtc2c7XG5cdGxldCBkZXRhaWxzID0gZGV0YWlsZXIgJiYgZGV0YWlsZXIoYWN0dWFsLCBleHBlY3RzKTtcblx0dGhyb3cgbmV3IEFzc2VydGlvbih7IGFjdHVhbCwgZXhwZWN0cywgb3BlcmF0b3IsIG1lc3NhZ2UsIGRldGFpbHMsIGdlbmVyYXRlZDogIW1zZyB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9rKHZhbCwgbXNnKSB7XG5cdGFzc2VydCghIXZhbCwgZmFsc2UsIHRydWUsICdvaycsIGZhbHNlLCAnRXhwZWN0ZWQgdmFsdWUgdG8gYmUgdHJ1dGh5JywgbXNnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzKHZhbCwgZXhwLCBtc2cpIHtcblx0YXNzZXJ0KHZhbCA9PT0gZXhwLCB2YWwsIGV4cCwgJ2lzJywgY29tcGFyZSwgJ0V4cGVjdGVkIHZhbHVlcyB0byBiZSBzdHJpY3RseSBlcXVhbDonLCBtc2cpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWwodmFsLCBleHAsIG1zZykge1xuXHRhc3NlcnQoZGVxdWFsKHZhbCwgZXhwKSwgdmFsLCBleHAsICdlcXVhbCcsIGNvbXBhcmUsICdFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgZGVlcGx5IGVxdWFsOicsIG1zZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnJlYWNoYWJsZShtc2cpIHtcblx0YXNzZXJ0KGZhbHNlLCB0cnVlLCBmYWxzZSwgJ3VucmVhY2hhYmxlJywgZmFsc2UsICdFeHBlY3RlZCBub3QgdG8gYmUgcmVhY2hlZCEnLCBtc2cpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZSh2YWwsIGV4cCwgbXNnKSB7XG5cdGxldCB0bXAgPSB0eXBlb2YgdmFsO1xuXHRhc3NlcnQodG1wID09PSBleHAsIHRtcCwgZXhwLCAndHlwZScsIGZhbHNlLCBgRXhwZWN0ZWQgXCIke3RtcH1cIiB0byBiZSBcIiR7ZXhwfVwiYCwgbXNnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbmNlKHZhbCwgZXhwLCBtc2cpIHtcblx0bGV0IG5hbWUgPSAnYCcgKyAoZXhwLm5hbWUgfHwgZXhwLmNvbnN0cnVjdG9yLm5hbWUpICsgJ2AnO1xuXHRhc3NlcnQodmFsIGluc3RhbmNlb2YgZXhwLCB2YWwsIGV4cCwgJ2luc3RhbmNlJywgZmFsc2UsIGBFeHBlY3RlZCB2YWx1ZSB0byBiZSBhbiBpbnN0YW5jZSBvZiAke25hbWV9YCwgbXNnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoKHZhbCwgZXhwLCBtc2cpIHtcblx0aWYgKHR5cGVvZiBleHAgPT09ICdzdHJpbmcnKSB7XG5cdFx0YXNzZXJ0KHZhbC5pbmNsdWRlcyhleHApLCB2YWwsIGV4cCwgJ21hdGNoJywgZmFsc2UsIGBFeHBlY3RlZCB2YWx1ZSB0byBpbmNsdWRlIFwiJHtleHB9XCIgc3Vic3RyaW5nYCwgbXNnKTtcblx0fSBlbHNlIHtcblx0XHRhc3NlcnQoZXhwLnRlc3QodmFsKSwgdmFsLCBleHAsICdtYXRjaCcsIGZhbHNlLCBgRXhwZWN0ZWQgdmFsdWUgdG8gbWF0Y2ggXFxgJHtTdHJpbmcoZXhwKX1cXGAgcGF0dGVybmAsIG1zZyk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNuYXBzaG90KHZhbCwgZXhwLCBtc2cpIHtcblx0dmFsPWRlZGVudCh2YWwpOyBleHA9ZGVkZW50KGV4cCk7XG5cdGFzc2VydCh2YWwgPT09IGV4cCwgdmFsLCBleHAsICdzbmFwc2hvdCcsIGxpbmVzLCAnRXhwZWN0ZWQgdmFsdWUgdG8gbWF0Y2ggc25hcHNob3Q6JywgbXNnKTtcbn1cblxuY29uc3QgbGluZU51bXMgPSAoeCwgeSkgPT4gbGluZXMoeCwgeSwgMSk7XG5leHBvcnQgZnVuY3Rpb24gZml4dHVyZSh2YWwsIGV4cCwgbXNnKSB7XG5cdHZhbD1kZWRlbnQodmFsKTsgZXhwPWRlZGVudChleHApO1xuXHRhc3NlcnQodmFsID09PSBleHAsIHZhbCwgZXhwLCAnZml4dHVyZScsIGxpbmVOdW1zLCAnRXhwZWN0ZWQgdmFsdWUgdG8gbWF0Y2ggZml4dHVyZTonLCBtc2cpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dzKGJsaywgZXhwLCBtc2cpIHtcblx0aWYgKCFtc2cgJiYgdHlwZW9mIGV4cCA9PT0gJ3N0cmluZycpIHtcblx0XHRtc2cgPSBleHA7IGV4cCA9IG51bGw7XG5cdH1cblxuXHR0cnkge1xuXHRcdGJsaygpO1xuXHRcdGFzc2VydChmYWxzZSwgZmFsc2UsIHRydWUsICd0aHJvd3MnLCBmYWxzZSwgJ0V4cGVjdGVkIGZ1bmN0aW9uIHRvIHRocm93JywgbXNnKTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKGVyciBpbnN0YW5jZW9mIEFzc2VydGlvbikgdGhyb3cgZXJyO1xuXG5cdFx0aWYgKHR5cGVvZiBleHAgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGFzc2VydChleHAoZXJyKSwgZmFsc2UsIHRydWUsICd0aHJvd3MnLCBmYWxzZSwgJ0V4cGVjdGVkIGZ1bmN0aW9uIHRvIHRocm93IG1hdGNoaW5nIGV4Y2VwdGlvbicsIG1zZyk7XG5cdFx0fSBlbHNlIGlmIChleHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcblx0XHRcdGFzc2VydChleHAudGVzdChlcnIubWVzc2FnZSksIGZhbHNlLCB0cnVlLCAndGhyb3dzJywgZmFsc2UsIGBFeHBlY3RlZCBmdW5jdGlvbiB0byB0aHJvdyBleGNlcHRpb24gbWF0Y2hpbmcgXFxgJHtTdHJpbmcoZXhwKX1cXGAgcGF0dGVybmAsIG1zZyk7XG5cdFx0fVxuXHR9XG59XG5cbi8vIC0tLVxuXG5leHBvcnQgZnVuY3Rpb24gbm90KHZhbCwgbXNnKSB7XG5cdGFzc2VydCghdmFsLCB0cnVlLCBmYWxzZSwgJ25vdCcsIGZhbHNlLCAnRXhwZWN0ZWQgdmFsdWUgdG8gYmUgZmFsc2V5JywgbXNnKTtcbn1cblxubm90Lm9rID0gbm90O1xuXG5pcy5ub3QgPSBmdW5jdGlvbiAodmFsLCBleHAsIG1zZykge1xuXHRhc3NlcnQodmFsICE9PSBleHAsIHZhbCwgZXhwLCAnaXMubm90JywgZmFsc2UsICdFeHBlY3RlZCB2YWx1ZXMgbm90IHRvIGJlIHN0cmljdGx5IGVxdWFsJywgbXNnKTtcbn1cblxubm90LmVxdWFsID0gZnVuY3Rpb24gKHZhbCwgZXhwLCBtc2cpIHtcblx0YXNzZXJ0KCFkZXF1YWwodmFsLCBleHApLCB2YWwsIGV4cCwgJ25vdC5lcXVhbCcsIGZhbHNlLCAnRXhwZWN0ZWQgdmFsdWVzIG5vdCB0byBiZSBkZWVwbHkgZXF1YWwnLCBtc2cpO1xufVxuXG5ub3QudHlwZSA9IGZ1bmN0aW9uICh2YWwsIGV4cCwgbXNnKSB7XG5cdGxldCB0bXAgPSB0eXBlb2YgdmFsO1xuXHRhc3NlcnQodG1wICE9PSBleHAsIHRtcCwgZXhwLCAnbm90LnR5cGUnLCBmYWxzZSwgYEV4cGVjdGVkIFwiJHt0bXB9XCIgbm90IHRvIGJlIFwiJHtleHB9XCJgLCBtc2cpO1xufVxuXG5ub3QuaW5zdGFuY2UgPSBmdW5jdGlvbiAodmFsLCBleHAsIG1zZykge1xuXHRsZXQgbmFtZSA9ICdgJyArIChleHAubmFtZSB8fCBleHAuY29uc3RydWN0b3IubmFtZSkgKyAnYCc7XG5cdGFzc2VydCghKHZhbCBpbnN0YW5jZW9mIGV4cCksIHZhbCwgZXhwLCAnbm90Lmluc3RhbmNlJywgZmFsc2UsIGBFeHBlY3RlZCB2YWx1ZSBub3QgdG8gYmUgYW4gaW5zdGFuY2Ugb2YgJHtuYW1lfWAsIG1zZyk7XG59XG5cbm5vdC5zbmFwc2hvdCA9IGZ1bmN0aW9uICh2YWwsIGV4cCwgbXNnKSB7XG5cdHZhbD1kZWRlbnQodmFsKTsgZXhwPWRlZGVudChleHApO1xuXHRhc3NlcnQodmFsICE9PSBleHAsIHZhbCwgZXhwLCAnbm90LnNuYXBzaG90JywgZmFsc2UsICdFeHBlY3RlZCB2YWx1ZSBub3QgdG8gbWF0Y2ggc25hcHNob3QnLCBtc2cpO1xufVxuXG5ub3QuZml4dHVyZSA9IGZ1bmN0aW9uICh2YWwsIGV4cCwgbXNnKSB7XG5cdHZhbD1kZWRlbnQodmFsKTsgZXhwPWRlZGVudChleHApO1xuXHRhc3NlcnQodmFsICE9PSBleHAsIHZhbCwgZXhwLCAnbm90LmZpeHR1cmUnLCBmYWxzZSwgJ0V4cGVjdGVkIHZhbHVlIG5vdCB0byBtYXRjaCBmaXh0dXJlJywgbXNnKTtcbn1cblxubm90Lm1hdGNoID0gZnVuY3Rpb24gKHZhbCwgZXhwLCBtc2cpIHtcblx0aWYgKHR5cGVvZiBleHAgPT09ICdzdHJpbmcnKSB7XG5cdFx0YXNzZXJ0KCF2YWwuaW5jbHVkZXMoZXhwKSwgdmFsLCBleHAsICdub3QubWF0Y2gnLCBmYWxzZSwgYEV4cGVjdGVkIHZhbHVlIG5vdCB0byBpbmNsdWRlIFwiJHtleHB9XCIgc3Vic3RyaW5nYCwgbXNnKTtcblx0fSBlbHNlIHtcblx0XHRhc3NlcnQoIWV4cC50ZXN0KHZhbCksIHZhbCwgZXhwLCAnbm90Lm1hdGNoJywgZmFsc2UsIGBFeHBlY3RlZCB2YWx1ZSBub3QgdG8gbWF0Y2ggXFxgJHtTdHJpbmcoZXhwKX1cXGAgcGF0dGVybmAsIG1zZyk7XG5cdH1cbn1cblxubm90LnRocm93cyA9IGZ1bmN0aW9uIChibGssIGV4cCwgbXNnKSB7XG5cdGlmICghbXNnICYmIHR5cGVvZiBleHAgPT09ICdzdHJpbmcnKSB7XG5cdFx0bXNnID0gZXhwOyBleHAgPSBudWxsO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRibGsoKTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKHR5cGVvZiBleHAgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGFzc2VydCghZXhwKGVyciksIHRydWUsIGZhbHNlLCAnbm90LnRocm93cycsIGZhbHNlLCAnRXhwZWN0ZWQgZnVuY3Rpb24gbm90IHRvIHRocm93IG1hdGNoaW5nIGV4Y2VwdGlvbicsIG1zZyk7XG5cdFx0fSBlbHNlIGlmIChleHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcblx0XHRcdGFzc2VydCghZXhwLnRlc3QoZXJyLm1lc3NhZ2UpLCB0cnVlLCBmYWxzZSwgJ25vdC50aHJvd3MnLCBmYWxzZSwgYEV4cGVjdGVkIGZ1bmN0aW9uIG5vdCB0byB0aHJvdyBleGNlcHRpb24gbWF0Y2hpbmcgXFxgJHtTdHJpbmcoZXhwKX1cXGAgcGF0dGVybmAsIG1zZyk7XG5cdFx0fSBlbHNlIGlmICghZXhwKSB7XG5cdFx0XHRhc3NlcnQoZmFsc2UsIHRydWUsIGZhbHNlLCAnbm90LnRocm93cycsIGZhbHNlLCAnRXhwZWN0ZWQgZnVuY3Rpb24gbm90IHRvIHRocm93JywgbXNnKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJkZXF1YWwiLCJjb21wYXJlIiwibGluZXMiLCJkZWRlbnQiLCJzdHIiLCJyZXBsYWNlIiwiYXJyIiwibWF0Y2giLCJpIiwibWluIiwibGVuIiwibGVuZ3RoIiwiTWF0aCIsIlJlZ0V4cCIsIkFzc2VydGlvbiIsIkVycm9yIiwiY29uc3RydWN0b3IiLCJvcHRzIiwibWVzc2FnZSIsIm5hbWUiLCJjb2RlIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJkZXRhaWxzIiwiZ2VuZXJhdGVkIiwib3BlcmF0b3IiLCJleHBlY3RzIiwiYWN0dWFsIiwiYXNzZXJ0IiwiYm9vbCIsImRldGFpbGVyIiwiYmFja3VwIiwibXNnIiwib2siLCJ2YWwiLCJpcyIsImV4cCIsImVxdWFsIiwidW5yZWFjaGFibGUiLCJ0eXBlIiwidG1wIiwiaW5zdGFuY2UiLCJpbmNsdWRlcyIsInRlc3QiLCJTdHJpbmciLCJzbmFwc2hvdCIsImxpbmVOdW1zIiwieCIsInkiLCJmaXh0dXJlIiwidGhyb3dzIiwiYmxrIiwiZXJyIiwibm90Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/uvu/assert/index.mjs\n"); /***/ }), /***/ "(ssr)/./node_modules/uvu/diff/index.mjs": /*!*****************************************!*\ !*** ./node_modules/uvu/diff/index.mjs ***! \*****************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ arrays: () => (/* binding */ arrays),\n/* harmony export */ chars: () => (/* binding */ chars),\n/* harmony export */ circular: () => (/* binding */ circular),\n/* harmony export */ compare: () => (/* binding */ compare),\n/* harmony export */ direct: () => (/* binding */ direct),\n/* harmony export */ lines: () => (/* binding */ lines),\n/* harmony export */ sort: () => (/* binding */ sort),\n/* harmony export */ stringify: () => (/* binding */ stringify)\n/* harmony export */ });\n/* harmony import */ var kleur__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! kleur */ \"(ssr)/./node_modules/kleur/index.mjs\");\n/* harmony import */ var diff__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! diff */ \"(ssr)/./node_modules/uvu/node_modules/diff/lib/index.mjs\");\n\n\nconst colors = {\n \"--\": kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].red,\n \"\\xb7\\xb7\": kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].grey,\n \"++\": kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].green\n};\nconst TITLE = kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dim().italic;\nconst TAB = kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dim(\"→\"), SPACE = kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dim(\"\\xb7\"), NL = kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dim(\"↵\");\nconst LOG = (sym, str)=>colors[sym](sym + PRETTY(str)) + \"\\n\";\nconst LINE = (num, x)=>kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dim(\"L\" + String(num).padStart(x, \"0\") + \" \");\nconst PRETTY = (str)=>str.replace(/[ ]/g, SPACE).replace(/\\t/g, TAB).replace(/(\\r?\\n)/g, NL);\nfunction line(obj, prev, pad) {\n let char = obj.removed ? \"--\" : obj.added ? \"++\" : \"\\xb7\\xb7\";\n let arr = obj.value.replace(/\\r?\\n$/, \"\").split(\"\\n\");\n let i = 0, tmp, out = \"\";\n if (obj.added) out += colors[char]().underline(TITLE(\"Expected:\")) + \"\\n\";\n else if (obj.removed) out += colors[char]().underline(TITLE(\"Actual:\")) + \"\\n\";\n for(; i < arr.length; i++){\n tmp = arr[i];\n if (tmp != null) {\n if (prev) out += LINE(prev + i, pad);\n out += LOG(char, tmp || \"\\n\");\n }\n }\n return out;\n}\n// TODO: want better diffing\n//~> complex items bail outright\nfunction arrays(input, expect) {\n let arr = diff__WEBPACK_IMPORTED_MODULE_1__.diffArrays(input, expect);\n let i = 0, j = 0, k = 0, tmp, val, char, isObj, str;\n let out = LOG(\"\\xb7\\xb7\", \"[\");\n for(; i < arr.length; i++){\n char = (tmp = arr[i]).removed ? \"--\" : tmp.added ? \"++\" : \"\\xb7\\xb7\";\n if (tmp.added) {\n out += colors[char]().underline(TITLE(\"Expected:\")) + \"\\n\";\n } else if (tmp.removed) {\n out += colors[char]().underline(TITLE(\"Actual:\")) + \"\\n\";\n }\n for(j = 0; j < tmp.value.length; j++){\n isObj = tmp.value[j] && typeof tmp.value[j] === \"object\";\n val = stringify(tmp.value[j]).split(/\\r?\\n/g);\n for(k = 0; k < val.length;){\n str = \" \" + val[k++] + (isObj ? \"\" : \",\");\n if (isObj && k === val.length && j + 1 < tmp.value.length) str += \",\";\n out += LOG(char, str);\n }\n }\n }\n return out + LOG(\"\\xb7\\xb7\", \"]\");\n}\nfunction lines(input, expect, linenum = 0) {\n let i = 0, tmp, output = \"\";\n let arr = diff__WEBPACK_IMPORTED_MODULE_1__.diffLines(input, expect);\n let pad = String(expect.split(/\\r?\\n/g).length - linenum).length;\n for(; i < arr.length; i++){\n output += line(tmp = arr[i], linenum, pad);\n if (linenum && !tmp.removed) linenum += tmp.count;\n }\n return output;\n}\nfunction chars(input, expect) {\n let arr = diff__WEBPACK_IMPORTED_MODULE_1__.diffChars(input, expect);\n let i = 0, output = \"\", tmp;\n let l1 = input.length;\n let l2 = expect.length;\n let p1 = PRETTY(input);\n let p2 = PRETTY(expect);\n tmp = arr[i];\n if (l1 === l2) {\n // no length offsets\n } else if (tmp.removed && arr[i + 1]) {\n let del = tmp.count - arr[i + 1].count;\n if (del == 0) {\n // wash~\n } else if (del > 0) {\n expect = \" \".repeat(del) + expect;\n p2 = \" \".repeat(del) + p2;\n l2 += del;\n } else if (del < 0) {\n input = \" \".repeat(-del) + input;\n p1 = \" \".repeat(-del) + p1;\n l1 += -del;\n }\n }\n output += direct(p1, p2, l1, l2);\n if (l1 === l2) {\n for(tmp = \" \"; i < l1; i++){\n tmp += input[i] === expect[i] ? \" \" : \"^\";\n }\n } else {\n for(tmp = \" \"; i < arr.length; i++){\n tmp += (arr[i].added || arr[i].removed ? \"^\" : \" \").repeat(Math.max(arr[i].count, 0));\n if (i + 1 < arr.length && (arr[i].added && arr[i + 1].removed || arr[i].removed && arr[i + 1].added)) {\n arr[i + 1].count -= arr[i].count;\n }\n }\n }\n return output + kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].red(tmp);\n}\nfunction direct(input, expect, lenA = String(input).length, lenB = String(expect).length) {\n let gutter = 4;\n let lenC = Math.max(lenA, lenB);\n let typeA = typeof input, typeB = typeof expect;\n if (typeA !== typeB) {\n gutter = 2;\n let delA = gutter + lenC - lenA;\n let delB = gutter + lenC - lenB;\n input += \" \".repeat(delA) + kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dim(`[${typeA}]`);\n expect += \" \".repeat(delB) + kleur__WEBPACK_IMPORTED_MODULE_0__[\"default\"].dim(`[${typeB}]`);\n lenA += delA + typeA.length + 2;\n lenB += delB + typeB.length + 2;\n lenC = Math.max(lenA, lenB);\n }\n let output = colors[\"++\"](\"++\" + expect + \" \".repeat(gutter + lenC - lenB) + TITLE(\"(Expected)\")) + \"\\n\";\n return output + colors[\"--\"](\"--\" + input + \" \".repeat(gutter + lenC - lenA) + TITLE(\"(Actual)\")) + \"\\n\";\n}\nfunction sort(input, expect) {\n var k, i = 0, tmp, isArr = Array.isArray(input);\n var keys = [], out = isArr ? Array(input.length) : {};\n if (isArr) {\n for(i = 0; i < out.length; i++){\n tmp = input[i];\n if (!tmp || typeof tmp !== \"object\") out[i] = tmp;\n else out[i] = sort(tmp, expect[i]); // might not be right\n }\n } else {\n for(k in expect)keys.push(k);\n for(; i < keys.length; i++){\n if (Object.prototype.hasOwnProperty.call(input, k = keys[i])) {\n if (!(tmp = input[k]) || typeof tmp !== \"object\") out[k] = tmp;\n else out[k] = sort(tmp, expect[k]);\n }\n }\n for(k in input){\n if (!out.hasOwnProperty(k)) {\n out[k] = input[k]; // expect didnt have\n }\n }\n }\n return out;\n}\nfunction circular() {\n var cache = new Set;\n return function print(key, val) {\n if (val === void 0) return \"[__VOID__]\";\n if (typeof val === \"number\" && val !== val) return \"[__NAN__]\";\n if (typeof val === \"bigint\") return val.toString();\n if (!val || typeof val !== \"object\") return val;\n if (cache.has(val)) return \"[Circular]\";\n cache.add(val);\n return val;\n };\n}\nfunction stringify(input) {\n return JSON.stringify(input, circular(), 2).replace(/\"\\[__NAN__\\]\"/g, \"NaN\").replace(/\"\\[__VOID__\\]\"/g, \"undefined\");\n}\nfunction compare(input, expect) {\n if (Array.isArray(expect) && Array.isArray(input)) return arrays(input, expect);\n if (expect instanceof RegExp) return chars(\"\" + input, \"\" + expect);\n let isA = input && typeof input == \"object\";\n let isB = expect && typeof expect == \"object\";\n if (isA && isB) input = sort(input, expect);\n if (isB) expect = stringify(expect);\n if (isA) input = stringify(input);\n if (expect && typeof expect == \"object\") {\n input = stringify(sort(input, expect));\n expect = stringify(expect);\n }\n isA = typeof input == \"string\";\n isB = typeof expect == \"string\";\n if (isA && /\\r?\\n/.test(input)) return lines(input, \"\" + expect);\n if (isB && /\\r?\\n/.test(expect)) return lines(\"\" + input, expect);\n if (isA && isB) return chars(input, expect);\n return direct(input, expect);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFTO0lBQ25DLElBQUlzRCxNQUFNckQsVUFBVSxPQUFPQSxVQUFVO0lBRXJDLElBQUlvRCxPQUFPQyxLQUFLdEQsUUFBUWdDLEtBQUtoQyxPQUFPQztJQUNwQyxJQUFJcUQsS0FBS3JELFNBQVNNLFVBQVVOO0lBQzVCLElBQUlvRCxLQUFLckQsUUFBUU8sVUFBVVA7SUFFM0IsSUFBSUMsVUFBVSxPQUFPQSxVQUFVLFVBQVU7UUFDeENELFFBQVFPLFVBQVV5QixLQUFLaEMsT0FBT0M7UUFDOUJBLFNBQVNNLFVBQVVOO0lBQ3BCO0lBRUFvRCxNQUFNLE9BQU9yRCxTQUFTO0lBQ3RCc0QsTUFBTSxPQUFPckQsVUFBVTtJQUV2QixJQUFJb0QsT0FBTyxRQUFRRSxJQUFJLENBQUN2RCxRQUFRLE9BQU9RLE1BQU1SLE9BQU8sS0FBR0M7SUFDdkQsSUFBSXFELE9BQU8sUUFBUUMsSUFBSSxDQUFDdEQsU0FBUyxPQUFPTyxNQUFNLEtBQUdSLE9BQU9DO0lBQ3hELElBQUlvRCxPQUFPQyxLQUFLLE9BQU96QyxNQUFNYixPQUFPQztJQUVwQyxPQUFPb0IsT0FBT3JCLE9BQU9DO0FBQ3RCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbmV4dGNoYXQvLi9ub2RlX21vZHVsZXMvdXZ1L2RpZmYvaW5kZXgubWpzP2I5MDYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGtsZXVyIGZyb20gJ2tsZXVyJztcbmltcG9ydCAqIGFzIGRpZmYgZnJvbSAnZGlmZic7XG5cbmNvbnN0IGNvbG9ycyA9IHtcblx0Jy0tJzoga2xldXIucmVkLFxuXHQnwrfCtyc6IGtsZXVyLmdyZXksXG5cdCcrKyc6IGtsZXVyLmdyZWVuLFxufTtcblxuY29uc3QgVElUTEUgPSBrbGV1ci5kaW0oKS5pdGFsaWM7XG5jb25zdCBUQUI9a2xldXIuZGltKCfihpInKSwgU1BBQ0U9a2xldXIuZGltKCfCtycpLCBOTD1rbGV1ci5kaW0oJ+KGtScpO1xuY29uc3QgTE9HID0gKHN5bSwgc3RyKSA9PiBjb2xvcnNbc3ltXShzeW0gKyBQUkVUVFkoc3RyKSkgKyAnXFxuJztcbmNvbnN0IExJTkUgPSAobnVtLCB4KSA9PiBrbGV1ci5kaW0oJ0wnICsgU3RyaW5nKG51bSkucGFkU3RhcnQoeCwgJzAnKSArICcgJyk7XG5jb25zdCBQUkVUVFkgPSBzdHIgPT4gc3RyLnJlcGxhY2UoL1sgXS9nLCBTUEFDRSkucmVwbGFjZSgvXFx0L2csIFRBQikucmVwbGFjZSgvKFxccj9cXG4pL2csIE5MKTtcblxuZnVuY3Rpb24gbGluZShvYmosIHByZXYsIHBhZCkge1xuXHRsZXQgY2hhciA9IG9iai5yZW1vdmVkID8gJy0tJyA6IG9iai5hZGRlZCA/ICcrKycgOiAnwrfCtyc7XG5cdGxldCBhcnIgPSBvYmoudmFsdWUucmVwbGFjZSgvXFxyP1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpO1xuXHRsZXQgaT0wLCB0bXAsIG91dD0nJztcblxuXHRpZiAob2JqLmFkZGVkKSBvdXQgKz0gY29sb3JzW2NoYXJdKCkudW5kZXJsaW5lKFRJVExFKCdFeHBlY3RlZDonKSkgKyAnXFxuJztcblx0ZWxzZSBpZiAob2JqLnJlbW92ZWQpIG91dCArPSBjb2xvcnNbY2hhcl0oKS51bmRlcmxpbmUoVElUTEUoJ0FjdHVhbDonKSkgKyAnXFxuJztcblxuXHRmb3IgKDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdHRtcCA9IGFycltpXTtcblx0XHRpZiAodG1wICE9IG51bGwpIHtcblx0XHRcdGlmIChwcmV2KSBvdXQgKz0gTElORShwcmV2ICsgaSwgcGFkKTtcblx0XHRcdG91dCArPSBMT0coY2hhciwgdG1wIHx8ICdcXG4nKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3V0O1xufVxuXG4vLyBUT0RPOiB3YW50IGJldHRlciBkaWZmaW5nXG4vL34+IGNvbXBsZXggaXRlbXMgYmFpbCBvdXRyaWdodFxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5cyhpbnB1dCwgZXhwZWN0KSB7XG5cdGxldCBhcnIgPSBkaWZmLmRpZmZBcnJheXMoaW5wdXQsIGV4cGVjdCk7XG5cdGxldCBpPTAsIGo9MCwgaz0wLCB0bXAsIHZhbCwgY2hhciwgaXNPYmosIHN0cjtcblx0bGV0IG91dCA9IExPRygnwrfCtycsICdbJyk7XG5cblx0Zm9yICg7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcblx0XHRjaGFyID0gKHRtcCA9IGFycltpXSkucmVtb3ZlZCA/ICctLScgOiB0bXAuYWRkZWQgPyAnKysnIDogJ8K3wrcnO1xuXG5cdFx0aWYgKHRtcC5hZGRlZCkge1xuXHRcdFx0b3V0ICs9IGNvbG9yc1tjaGFyXSgpLnVuZGVybGluZShUSVRMRSgnRXhwZWN0ZWQ6JykpICsgJ1xcbic7XG5cdFx0fSBlbHNlIGlmICh0bXAucmVtb3ZlZCkge1xuXHRcdFx0b3V0ICs9IGNvbG9yc1tjaGFyXSgpLnVuZGVybGluZShUSVRMRSgnQWN0dWFsOicpKSArICdcXG4nO1xuXHRcdH1cblxuXHRcdGZvciAoaj0wOyBqIDwgdG1wLnZhbHVlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRpc09iaiA9ICh0bXAudmFsdWVbal0gJiYgdHlwZW9mIHRtcC52YWx1ZVtqXSA9PT0gJ29iamVjdCcpO1xuXHRcdFx0dmFsID0gc3RyaW5naWZ5KHRtcC52YWx1ZVtqXSkuc3BsaXQoL1xccj9cXG4vZyk7XG5cdFx0XHRmb3IgKGs9MDsgayA8IHZhbC5sZW5ndGg7KSB7XG5cdFx0XHRcdHN0ciA9ICcgICcgKyB2YWxbaysrXSArIChpc09iaiA/ICcnIDogJywnKTtcblx0XHRcdFx0aWYgKGlzT2JqICYmIGsgPT09IHZhbC5sZW5ndGggJiYgKGogKyAxKSA8IHRtcC52YWx1ZS5sZW5ndGgpIHN0ciArPSAnLCc7XG5cdFx0XHRcdG91dCArPSBMT0coY2hhciwgc3RyKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3V0ICsgTE9HKCfCt8K3JywgJ10nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVzKGlucHV0LCBleHBlY3QsIGxpbmVudW0gPSAwKSB7XG5cdGxldCBpPTAsIHRtcCwgb3V0cHV0PScnO1xuXHRsZXQgYXJyID0gZGlmZi5kaWZmTGluZXMoaW5wdXQsIGV4cGVjdCk7XG5cdGxldCBwYWQgPSBTdHJpbmcoZXhwZWN0LnNwbGl0KC9cXHI/XFxuL2cpLmxlbmd0aCAtIGxpbmVudW0pLmxlbmd0aDtcblxuXHRmb3IgKDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdG91dHB1dCArPSBsaW5lKHRtcCA9IGFycltpXSwgbGluZW51bSwgcGFkKTtcblx0XHRpZiAobGluZW51bSAmJiAhdG1wLnJlbW92ZWQpIGxpbmVudW0gKz0gdG1wLmNvdW50O1xuXHR9XG5cblx0cmV0dXJuIG91dHB1dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJzKGlucHV0LCBleHBlY3QpIHtcblx0bGV0IGFyciA9IGRpZmYuZGlmZkNoYXJzKGlucHV0LCBleHBlY3QpO1xuXHRsZXQgaT0wLCBvdXRwdXQ9JycsIHRtcDtcblxuXHRsZXQgbDEgPSBpbnB1dC5sZW5ndGg7XG5cdGxldCBsMiA9IGV4cGVjdC5sZW5ndGg7XG5cblx0bGV0IHAxID0gUFJFVFRZKGlucHV0KTtcblx0bGV0IHAyID0gUFJFVFRZKGV4cGVjdCk7XG5cblx0dG1wID0gYXJyW2ldO1xuXG5cdGlmIChsMSA9PT0gbDIpIHtcblx0XHQvLyBubyBsZW5ndGggb2Zmc2V0c1xuXHR9IGVsc2UgaWYgKHRtcC5yZW1vdmVkICYmIGFycltpICsgMV0pIHtcblx0XHRsZXQgZGVsID0gdG1wLmNvdW50IC0gYXJyW2kgKyAxXS5jb3VudDtcblx0XHRpZiAoZGVsID09IDApIHtcblx0XHRcdC8vIHdhc2h+XG5cdFx0fSBlbHNlIGlmIChkZWwgPiAwKSB7XG5cdFx0XHRleHBlY3QgPSAnICcucmVwZWF0KGRlbCkgKyBleHBlY3Q7XG5cdFx0XHRwMiA9ICcgJy5yZXBlYXQoZGVsKSArIHAyO1xuXHRcdFx0bDIgKz0gZGVsO1xuXHRcdH0gZWxzZSBpZiAoZGVsIDwgMCkge1xuXHRcdFx0aW5wdXQgPSAnICcucmVwZWF0KC1kZWwpICsgaW5wdXQ7XG5cdFx0XHRwMSA9ICcgJy5yZXBlYXQoLWRlbCkgKyBwMTtcblx0XHRcdGwxICs9IC1kZWw7XG5cdFx0fVxuXHR9XG5cblx0b3V0cHV0ICs9IGRpcmVjdChwMSwgcDIsIGwxLCBsMik7XG5cblx0aWYgKGwxID09PSBsMikge1xuXHRcdGZvciAodG1wPScgICc7IGkgPCBsMTsgaSsrKSB7XG5cdFx0XHR0bXAgKz0gaW5wdXRbaV0gPT09IGV4cGVjdFtpXSA/ICcgJyA6ICdeJztcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Zm9yICh0bXA9JyAgJzsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdFx0dG1wICs9ICgoYXJyW2ldLmFkZGVkIHx8IGFycltpXS5yZW1vdmVkKSA/ICdeJyA6ICcgJykucmVwZWF0KE1hdGgubWF4KGFycltpXS5jb3VudCwgMCkpO1xuXHRcdFx0aWYgKGkgKyAxIDwgYXJyLmxlbmd0aCAmJiAoKGFycltpXS5hZGRlZCAmJiBhcnJbaSsxXS5yZW1vdmVkKSB8fCAoYXJyW2ldLnJlbW92ZWQgJiYgYXJyW2krMV0uYWRkZWQpKSkge1xuXHRcdFx0XHRhcnJbaSArIDFdLmNvdW50IC09IGFycltpXS5jb3VudDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3V0cHV0ICsga2xldXIucmVkKHRtcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3QoaW5wdXQsIGV4cGVjdCwgbGVuQSA9IFN0cmluZyhpbnB1dCkubGVuZ3RoLCBsZW5CID0gU3RyaW5nKGV4cGVjdCkubGVuZ3RoKSB7XG5cdGxldCBndXR0ZXIgPSA0O1xuXHRsZXQgbGVuQyA9IE1hdGgubWF4KGxlbkEsIGxlbkIpO1xuXHRsZXQgdHlwZUE9dHlwZW9mIGlucHV0LCB0eXBlQj10eXBlb2YgZXhwZWN0O1xuXG5cdGlmICh0eXBlQSAhPT0gdHlwZUIpIHtcblx0XHRndXR0ZXIgPSAyO1xuXG5cdFx0bGV0IGRlbEEgPSBndXR0ZXIgKyBsZW5DIC0gbGVuQTtcblx0XHRsZXQgZGVsQiA9IGd1dHRlciArIGxlbkMgLSBsZW5CO1xuXG5cdFx0aW5wdXQgKz0gJyAnLnJlcGVhdChkZWxBKSArIGtsZXVyLmRpbShgWyR7dHlwZUF9XWApO1xuXHRcdGV4cGVjdCArPSAnICcucmVwZWF0KGRlbEIpICsga2xldXIuZGltKGBbJHt0eXBlQn1dYCk7XG5cblx0XHRsZW5BICs9IGRlbEEgKyB0eXBlQS5sZW5ndGggKyAyO1xuXHRcdGxlbkIgKz0gZGVsQiArIHR5cGVCLmxlbmd0aCArIDI7XG5cdFx0bGVuQyA9IE1hdGgubWF4KGxlbkEsIGxlbkIpO1xuXHR9XG5cblx0bGV0IG91dHB1dCA9IGNvbG9yc1snKysnXSgnKysnICsgZXhwZWN0ICsgJyAnLnJlcGVhdChndXR0ZXIgKyBsZW5DIC0gbGVuQikgKyBUSVRMRSgnKEV4cGVjdGVkKScpKSArICdcXG4nO1xuXHRyZXR1cm4gb3V0cHV0ICsgY29sb3JzWyctLSddKCctLScgKyBpbnB1dCArICcgJy5yZXBlYXQoZ3V0dGVyICsgbGVuQyAtIGxlbkEpICsgVElUTEUoJyhBY3R1YWwpJykpICsgJ1xcbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0KGlucHV0LCBleHBlY3QpIHtcblx0dmFyIGssIGk9MCwgdG1wLCBpc0FyciA9IEFycmF5LmlzQXJyYXkoaW5wdXQpO1xuXHR2YXIga2V5cz1bXSwgb3V0PWlzQXJyID8gQXJyYXkoaW5wdXQubGVuZ3RoKSA6IHt9O1xuXG5cdGlmIChpc0Fycikge1xuXHRcdGZvciAoaT0wOyBpIDwgb3V0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0bXAgPSBpbnB1dFtpXTtcblx0XHRcdGlmICghdG1wIHx8IHR5cGVvZiB0bXAgIT09ICdvYmplY3QnKSBvdXRbaV0gPSB0bXA7XG5cdFx0XHRlbHNlIG91dFtpXSA9IHNvcnQodG1wLCBleHBlY3RbaV0pOyAvLyBtaWdodCBub3QgYmUgcmlnaHRcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Zm9yIChrIGluIGV4cGVjdClcblx0XHRcdGtleXMucHVzaChrKTtcblxuXHRcdGZvciAoOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnB1dCwgayA9IGtleXNbaV0pKSB7XG5cdFx0XHRcdGlmICghKHRtcCA9IGlucHV0W2tdKSB8fCB0eXBlb2YgdG1wICE9PSAnb2JqZWN0Jykgb3V0W2tdID0gdG1wO1xuXHRcdFx0XHRlbHNlIG91dFtrXSA9IHNvcnQodG1wLCBleHBlY3Rba10pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoayBpbiBpbnB1dCkge1xuXHRcdFx0aWYgKCFvdXQuaGFzT3duUHJvcGVydHkoaykpIHtcblx0XHRcdFx0b3V0W2tdID0gaW5wdXRba107IC8vIGV4cGVjdCBkaWRudCBoYXZlXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNpcmN1bGFyKCkge1xuXHR2YXIgY2FjaGUgPSBuZXcgU2V0O1xuXHRyZXR1cm4gZnVuY3Rpb24gcHJpbnQoa2V5LCB2YWwpIHtcblx0XHRpZiAodmFsID09PSB2b2lkIDApIHJldHVybiAnW19fVk9JRF9fXSc7XG5cdFx0aWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmIHZhbCAhPT0gdmFsKSByZXR1cm4gJ1tfX05BTl9fXSc7XG5cdFx0aWYgKHR5cGVvZiB2YWwgPT09ICdiaWdpbnQnKSByZXR1cm4gdmFsLnRvU3RyaW5nKCk7XG5cdFx0aWYgKCF2YWwgfHwgdHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpIHJldHVybiB2YWw7XG5cdFx0aWYgKGNhY2hlLmhhcyh2YWwpKSByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuXHRcdGNhY2hlLmFkZCh2YWwpOyByZXR1cm4gdmFsO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkoaW5wdXQpIHtcblx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KGlucHV0LCBjaXJjdWxhcigpLCAyKS5yZXBsYWNlKC9cIlxcW19fTkFOX19cXF1cIi9nLCAnTmFOJykucmVwbGFjZSgvXCJcXFtfX1ZPSURfX1xcXVwiL2csICd1bmRlZmluZWQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmUoaW5wdXQsIGV4cGVjdCkge1xuXHRpZiAoQXJyYXkuaXNBcnJheShleHBlY3QpICYmIEFycmF5LmlzQXJyYXkoaW5wdXQpKSByZXR1cm4gYXJyYXlzKGlucHV0LCBleHBlY3QpO1xuXHRpZiAoZXhwZWN0IGluc3RhbmNlb2YgUmVnRXhwKSByZXR1cm4gY2hhcnMoJycraW5wdXQsICcnK2V4cGVjdCk7XG5cblx0bGV0IGlzQSA9IGlucHV0ICYmIHR5cGVvZiBpbnB1dCA9PSAnb2JqZWN0Jztcblx0bGV0IGlzQiA9IGV4cGVjdCAmJiB0eXBlb2YgZXhwZWN0ID09ICdvYmplY3QnO1xuXG5cdGlmIChpc0EgJiYgaXNCKSBpbnB1dCA9IHNvcnQoaW5wdXQsIGV4cGVjdCk7XG5cdGlmIChpc0IpIGV4cGVjdCA9IHN0cmluZ2lmeShleHBlY3QpO1xuXHRpZiAoaXNBKSBpbnB1dCA9IHN0cmluZ2lmeShpbnB1dCk7XG5cblx0aWYgKGV4cGVjdCAmJiB0eXBlb2YgZXhwZWN0ID09ICdvYmplY3QnKSB7XG5cdFx0aW5wdXQgPSBzdHJpbmdpZnkoc29ydChpbnB1dCwgZXhwZWN0KSk7XG5cdFx0ZXhwZWN0ID0gc3RyaW5naWZ5KGV4cGVjdCk7XG5cdH1cblxuXHRpc0EgPSB0eXBlb2YgaW5wdXQgPT0gJ3N0cmluZyc7XG5cdGlzQiA9IHR5cGVvZiBleHBlY3QgPT0gJ3N0cmluZyc7XG5cblx0aWYgKGlzQSAmJiAvXFxyP1xcbi8udGVzdChpbnB1dCkpIHJldHVybiBsaW5lcyhpbnB1dCwgJycrZXhwZWN0KTtcblx0aWYgKGlzQiAmJiAvXFxyP1xcbi8udGVzdChleHBlY3QpKSByZXR1cm4gbGluZXMoJycraW5wdXQsIGV4cGVjdCk7XG5cdGlmIChpc0EgJiYgaXNCKSByZXR1cm4gY2hhcnMoaW5wdXQsIGV4cGVjdCk7XG5cblx0cmV0dXJuIGRpcmVjdChpbnB1dCwgZXhwZWN0KTtcbn1cbiJdLCJuYW1lcyI6WyJrbGV1ciIsImRpZmYiLCJjb2xvcnMiLCJyZWQiLCJncmV5IiwiZ3JlZW4iLCJUSVRMRSIsImRpbSIsIml0YWxpYyIsIlRBQiIsIlNQQUNFIiwiTkwiLCJMT0ciLCJzeW0iLCJzdHIiLCJQUkVUVFkiLCJMSU5FIiwibnVtIiwieCIsIlN0cmluZyIsInBhZFN0YXJ0IiwicmVwbGFjZSIsImxpbmUiLCJvYmoiLCJwcmV2IiwicGFkIiwiY2hhciIsInJlbW92ZWQiLCJhZGRlZCIsImFyciIsInZhbHVlIiwic3BsaXQiLCJpIiwidG1wIiwib3V0IiwidW5kZXJsaW5lIiwibGVuZ3RoIiwiYXJyYXlzIiwiaW5wdXQiLCJleHBlY3QiLCJkaWZmQXJyYXlzIiwiaiIsImsiLCJ2YWwiLCJpc09iaiIsInN0cmluZ2lmeSIsImxpbmVzIiwibGluZW51bSIsIm91dHB1dCIsImRpZmZMaW5lcyIsImNvdW50IiwiY2hhcnMiLCJkaWZmQ2hhcnMiLCJsMSIsImwyIiwicDEiLCJwMiIsImRlbCIsInJlcGVhdCIsImRpcmVjdCIsIk1hdGgiLCJtYXgiLCJsZW5BIiwibGVuQiIsImd1dHRlciIsImxlbkMiLCJ0eXBlQSIsInR5cGVCIiwiZGVsQSIsImRlbEIiLCJzb3J0IiwiaXNBcnIiLCJBcnJheSIsImlzQXJyYXkiLCJrZXlzIiwicHVzaCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImNpcmN1bGFyIiwiY2FjaGUiLCJTZXQiLCJwcmludCIsImtleSIsInRvU3RyaW5nIiwiaGFzIiwiYWRkIiwiSlNPTiIsImNvbXBhcmUiLCJSZWdFeHAiLCJpc0EiLCJpc0IiLCJ0ZXN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/uvu/diff/index.mjs\n"); /***/ }), /***/ "(ssr)/./node_modules/uvu/node_modules/diff/lib/index.mjs": /*!**********************************************************!*\ !*** ./node_modules/uvu/node_modules/diff/lib/index.mjs ***! \**********************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Diff: () => (/* binding */ Diff),\n/* harmony export */ applyPatch: () => (/* binding */ applyPatch),\n/* harmony export */ applyPatches: () => (/* binding */ applyPatches),\n/* harmony export */ canonicalize: () => (/* binding */ canonicalize),\n/* harmony export */ convertChangesToDMP: () => (/* binding */ convertChangesToDMP),\n/* harmony export */ convertChangesToXML: () => (/* binding */ convertChangesToXML),\n/* harmony export */ createPatch: () => (/* binding */ createPatch),\n/* harmony export */ createTwoFilesPatch: () => (/* binding */ createTwoFilesPatch),\n/* harmony export */ diffArrays: () => (/* binding */ diffArrays),\n/* harmony export */ diffChars: () => (/* binding */ diffChars),\n/* harmony export */ diffCss: () => (/* binding */ diffCss),\n/* harmony export */ diffJson: () => (/* binding */ diffJson),\n/* harmony export */ diffLines: () => (/* binding */ diffLines),\n/* harmony export */ diffSentences: () => (/* binding */ diffSentences),\n/* harmony export */ diffTrimmedLines: () => (/* binding */ diffTrimmedLines),\n/* harmony export */ diffWords: () => (/* binding */ diffWords),\n/* harmony export */ diffWordsWithSpace: () => (/* binding */ diffWordsWithSpace),\n/* harmony export */ merge: () => (/* binding */ merge),\n/* harmony export */ parsePatch: () => (/* binding */ parsePatch),\n/* harmony export */ structuredPatch: () => (/* binding */ structuredPatch)\n/* harmony export */ });\nfunction Diff() {}\nDiff.prototype = {\n diff: function diff(oldString, newString) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = options.callback;\n if (typeof options === \"function\") {\n callback = options;\n options = {};\n }\n this.options = options;\n var self = this;\n function done(value) {\n if (callback) {\n setTimeout(function() {\n callback(undefined, value);\n }, 0);\n return true;\n } else {\n return value;\n }\n } // Allow subclasses to massage the input prior to running\n oldString = this.castInput(oldString);\n newString = this.castInput(newString);\n oldString = this.removeEmpty(this.tokenize(oldString));\n newString = this.removeEmpty(this.tokenize(newString));\n var newLen = newString.length, oldLen = oldString.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n if (options.maxEditLength) {\n maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n }\n var bestPath = [\n {\n newPos: -1,\n components: []\n }\n ]; // Seed editLength = 0, i.e. the content starts with the same values\n var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);\n if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n // Identity per the equality and tokenizer\n return done([\n {\n value: this.join(newString),\n count: newString.length\n }\n ]);\n } // Main worker method. checks all permutations of a given edit length for acceptance.\n function execEditLength() {\n for(var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2){\n var basePath = void 0;\n var addPath = bestPath[diagonalPath - 1], removePath = bestPath[diagonalPath + 1], _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n if (addPath) {\n // No one else is going to attempt to use this value, clear it\n bestPath[diagonalPath - 1] = undefined;\n }\n var canAdd = addPath && addPath.newPos + 1 < newLen, canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n } // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the new string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {\n basePath = clonePath(removePath);\n self.pushComponent(basePath.components, undefined, true);\n } else {\n basePath = addPath; // No need to clone, we've pulled it from the list\n basePath.newPos++;\n self.pushComponent(basePath.components, true, undefined);\n }\n _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done\n if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {\n return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));\n } else {\n // Otherwise track this path as a potential candidate and continue.\n bestPath[diagonalPath] = basePath;\n }\n }\n editLength++;\n } // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced, or until the edit length exceeds options.maxEditLength (if given),\n // in which case it will return undefined.\n if (callback) {\n (function exec() {\n setTimeout(function() {\n if (editLength > maxEditLength) {\n return callback();\n }\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n })();\n } else {\n while(editLength <= maxEditLength){\n var ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n }\n },\n pushComponent: function pushComponent(components, added, removed) {\n var last = components[components.length - 1];\n if (last && last.added === added && last.removed === removed) {\n // We need to clone here as the component clone operation is just\n // as shallow array clone\n components[components.length - 1] = {\n count: last.count + 1,\n added: added,\n removed: removed\n };\n } else {\n components.push({\n count: 1,\n added: added,\n removed: removed\n });\n }\n },\n extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {\n var newLen = newString.length, oldLen = oldString.length, newPos = basePath.newPos, oldPos = newPos - diagonalPath, commonCount = 0;\n while(newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])){\n newPos++;\n oldPos++;\n commonCount++;\n }\n if (commonCount) {\n basePath.components.push({\n count: commonCount\n });\n }\n basePath.newPos = newPos;\n return oldPos;\n },\n equals: function equals(left, right) {\n if (this.options.comparator) {\n return this.options.comparator(left, right);\n } else {\n return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase();\n }\n },\n removeEmpty: function removeEmpty(array) {\n var ret = [];\n for(var i = 0; i < array.length; i++){\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n },\n castInput: function castInput(value) {\n return value;\n },\n tokenize: function tokenize(value) {\n return value.split(\"\");\n },\n join: function join(chars) {\n return chars.join(\"\");\n }\n};\nfunction buildValues(diff, components, newString, oldString, useLongestToken) {\n var componentPos = 0, componentLen = components.length, newPos = 0, oldPos = 0;\n for(; componentPos < componentLen; componentPos++){\n var component = components[componentPos];\n if (!component.removed) {\n if (!component.added && useLongestToken) {\n var value = newString.slice(newPos, newPos + component.count);\n value = value.map(function(value, i) {\n var oldValue = oldString[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = diff.join(value);\n } else {\n component.value = diff.join(newString.slice(newPos, newPos + component.count));\n }\n newPos += component.count; // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n } else {\n component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));\n oldPos += component.count; // Reverse add and remove so removes are output first to match common convention\n // The diffing algorithm is tied to add then remove output and this is the simplest\n // route to get the desired output with minimal overhead.\n if (componentPos && components[componentPos - 1].added) {\n var tmp = components[componentPos - 1];\n components[componentPos - 1] = components[componentPos];\n components[componentPos] = tmp;\n }\n }\n } // Special case handle for when one terminal is ignored (i.e. whitespace).\n // For this case we merge the terminal into the prior string and drop the change.\n // This is only available for string mode.\n var lastComponent = components[componentLen - 1];\n if (componentLen > 1 && typeof lastComponent.value === \"string\" && (lastComponent.added || lastComponent.removed) && diff.equals(\"\", lastComponent.value)) {\n components[componentLen - 2].value += lastComponent.value;\n components.pop();\n }\n return components;\n}\nfunction clonePath(path) {\n return {\n newPos: path.newPos,\n components: path.components.slice(0)\n };\n}\nvar characterDiff = new Diff();\nfunction diffChars(oldStr, newStr, options) {\n return characterDiff.diff(oldStr, newStr, options);\n}\nfunction generateOptions(options, defaults) {\n if (typeof options === \"function\") {\n defaults.callback = options;\n } else if (options) {\n for(var name in options){\n /* istanbul ignore else */ if (options.hasOwnProperty(name)) {\n defaults[name] = options[name];\n }\n }\n }\n return defaults;\n}\n//\n// Ranges and exceptions:\n// Latin-1 Supplement, 0080–00FF\n// - U+00D7 × Multiplication sign\n// - U+00F7 ÷ Division sign\n// Latin Extended-A, 0100–017F\n// Latin Extended-B, 0180–024F\n// IPA Extensions, 0250–02AF\n// Spacing Modifier Letters, 02B0–02FF\n// - U+02C7 ˇ ˇ Caron\n// - U+02D8 ˘ ˘ Breve\n// - U+02D9 ˙ ˙ Dot Above\n// - U+02DA ˚ ˚ Ring Above\n// - U+02DB ˛ ˛ Ogonek\n// - U+02DC ˜ ˜ Small Tilde\n// - U+02DD ˝ ˝ Double Acute Accent\n// Latin Extended Additional, 1E00–1EFF\nvar extendedWordChars = /^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/;\nvar reWhitespace = /\\S/;\nvar wordDiff = new Diff();\nwordDiff.equals = function(left, right) {\n if (this.options.ignoreCase) {\n left = left.toLowerCase();\n right = right.toLowerCase();\n }\n return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right);\n};\nwordDiff.tokenize = function(value) {\n // All whitespace symbols except newline group into one token, each newline - in separate token\n var tokens = value.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set.\n for(var i = 0; i < tokens.length - 1; i++){\n // If we have an empty string in the next field and we have only word chars before and after, merge\n if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) {\n tokens[i] += tokens[i + 2];\n tokens.splice(i + 1, 2);\n i--;\n }\n }\n return tokens;\n};\nfunction diffWords(oldStr, newStr, options) {\n options = generateOptions(options, {\n ignoreWhitespace: true\n });\n return wordDiff.diff(oldStr, newStr, options);\n}\nfunction diffWordsWithSpace(oldStr, newStr, options) {\n return wordDiff.diff(oldStr, newStr, options);\n}\nvar lineDiff = new Diff();\nlineDiff.tokenize = function(value) {\n var retLines = [], linesAndNewlines = value.split(/(\\n|\\r\\n)/); // Ignore the final empty token that occurs if the string ends with a new line\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n } // Merge the content and line separators into single tokens\n for(var i = 0; i < linesAndNewlines.length; i++){\n var line = linesAndNewlines[i];\n if (i % 2 && !this.options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n } else {\n if (this.options.ignoreWhitespace) {\n line = line.trim();\n }\n retLines.push(line);\n }\n }\n return retLines;\n};\nfunction diffLines(oldStr, newStr, callback) {\n return lineDiff.diff(oldStr, newStr, callback);\n}\nfunction diffTrimmedLines(oldStr, newStr, callback) {\n var options = generateOptions(callback, {\n ignoreWhitespace: true\n });\n return lineDiff.diff(oldStr, newStr, options);\n}\nvar sentenceDiff = new Diff();\nsentenceDiff.tokenize = function(value) {\n return value.split(/(\\S.+?[.!?])(?=\\s+|$)/);\n};\nfunction diffSentences(oldStr, newStr, callback) {\n return sentenceDiff.diff(oldStr, newStr, callback);\n}\nvar cssDiff = new Diff();\ncssDiff.tokenize = function(value) {\n return value.split(/([{}:;,]|\\s+)/);\n};\nfunction diffCss(oldStr, newStr, callback) {\n return cssDiff.diff(oldStr, newStr, callback);\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\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}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\nfunction _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}\nvar objectPrototypeToString = Object.prototype.toString;\nvar jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\njsonDiff.useLongestToken = true;\njsonDiff.tokenize = lineDiff.tokenize;\njsonDiff.castInput = function(value) {\n var _this$options = this.options, undefinedReplacement = _this$options.undefinedReplacement, _this$options$stringi = _this$options.stringifyReplacer, stringifyReplacer = _this$options$stringi === void 0 ? function(k, v) {\n return typeof v === \"undefined\" ? undefinedReplacement : v;\n } : _this$options$stringi;\n return typeof value === \"string\" ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, \" \");\n};\njsonDiff.equals = function(left, right) {\n return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\\r\\n])/g, \"$1\"), right.replace(/,([\\r\\n])/g, \"$1\"));\n};\nfunction diffJson(oldObj, newObj, options) {\n return jsonDiff.diff(oldObj, newObj, options);\n} // This function handles the presence of circular references by bailing out when encountering an\n// object that is already on the \"stack\" of items being processed. Accepts an optional replacer\nfunction canonicalize(obj, stack, replacementStack, replacer, key) {\n stack = stack || [];\n replacementStack = replacementStack || [];\n if (replacer) {\n obj = replacer(key, obj);\n }\n var i;\n for(i = 0; i < stack.length; i += 1){\n if (stack[i] === obj) {\n return replacementStack[i];\n }\n }\n var canonicalizedObj;\n if (\"[object Array]\" === objectPrototypeToString.call(obj)) {\n stack.push(obj);\n canonicalizedObj = new Array(obj.length);\n replacementStack.push(canonicalizedObj);\n for(i = 0; i < obj.length; i += 1){\n canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);\n }\n stack.pop();\n replacementStack.pop();\n return canonicalizedObj;\n }\n if (obj && obj.toJSON) {\n obj = obj.toJSON();\n }\n if (_typeof(obj) === \"object\" && obj !== null) {\n stack.push(obj);\n canonicalizedObj = {};\n replacementStack.push(canonicalizedObj);\n var sortedKeys = [], _key;\n for(_key in obj){\n /* istanbul ignore else */ if (obj.hasOwnProperty(_key)) {\n sortedKeys.push(_key);\n }\n }\n sortedKeys.sort();\n for(i = 0; i < sortedKeys.length; i += 1){\n _key = sortedKeys[i];\n canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);\n }\n stack.pop();\n replacementStack.pop();\n } else {\n canonicalizedObj = obj;\n }\n return canonicalizedObj;\n}\nvar arrayDiff = new Diff();\narrayDiff.tokenize = function(value) {\n return value.slice();\n};\narrayDiff.join = arrayDiff.removeEmpty = function(value) {\n return value;\n};\nfunction diffArrays(oldArr, newArr, callback) {\n return arrayDiff.diff(oldArr, newArr, callback);\n}\nfunction parsePatch(uniDiff) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var diffstr = uniDiff.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/), delimiters = uniDiff.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [], list = [], i = 0;\n function parseIndex() {\n var index = {};\n list.push(index); // Parse diff metadata\n while(i < diffstr.length){\n var line = diffstr[i]; // File header found, end parsing diff metadata\n if (/^(\\-\\-\\-|\\+\\+\\+|@@)\\s/.test(line)) {\n break;\n } // Diff index\n var header = /^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/.exec(line);\n if (header) {\n index.index = header[1];\n }\n i++;\n } // Parse file headers if they are defined. Unified diff requires them, but\n // there's no technical issues to have an isolated hunk without file header\n parseFileHeader(index);\n parseFileHeader(index); // Parse hunks\n index.hunks = [];\n while(i < diffstr.length){\n var _line = diffstr[i];\n if (/^(Index:|diff|\\-\\-\\-|\\+\\+\\+)\\s/.test(_line)) {\n break;\n } else if (/^@@/.test(_line)) {\n index.hunks.push(parseHunk());\n } else if (_line && options.strict) {\n // Ignore unexpected content unless in strict mode\n throw new Error(\"Unknown line \" + (i + 1) + \" \" + JSON.stringify(_line));\n } else {\n i++;\n }\n }\n } // Parses the --- and +++ headers, if none are found, no lines\n // are consumed.\n function parseFileHeader(index) {\n var fileHeader = /^(---|\\+\\+\\+)\\s+(.*)$/.exec(diffstr[i]);\n if (fileHeader) {\n var keyPrefix = fileHeader[1] === \"---\" ? \"old\" : \"new\";\n var data = fileHeader[2].split(\"\t\", 2);\n var fileName = data[0].replace(/\\\\\\\\/g, \"\\\\\");\n if (/^\".*\"$/.test(fileName)) {\n fileName = fileName.substr(1, fileName.length - 2);\n }\n index[keyPrefix + \"FileName\"] = fileName;\n index[keyPrefix + \"Header\"] = (data[1] || \"\").trim();\n i++;\n }\n } // Parses a hunk\n // This assumes that we are at the start of a hunk.\n function parseHunk() {\n var chunkHeaderIndex = i, chunkHeaderLine = diffstr[i++], chunkHeader = chunkHeaderLine.split(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n var hunk = {\n oldStart: +chunkHeader[1],\n oldLines: typeof chunkHeader[2] === \"undefined\" ? 1 : +chunkHeader[2],\n newStart: +chunkHeader[3],\n newLines: typeof chunkHeader[4] === \"undefined\" ? 1 : +chunkHeader[4],\n lines: [],\n linedelimiters: []\n }; // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart += 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart += 1;\n }\n var addCount = 0, removeCount = 0;\n for(; i < diffstr.length; i++){\n // Lines starting with '---' could be mistaken for the \"remove line\" operation\n // But they could be the header for the next file. Therefore prune such cases out.\n if (diffstr[i].indexOf(\"--- \") === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf(\"+++ \") === 0 && diffstr[i + 2].indexOf(\"@@\") === 0) {\n break;\n }\n var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? \" \" : diffstr[i][0];\n if (operation === \"+\" || operation === \"-\" || operation === \" \" || operation === \"\\\\\") {\n hunk.lines.push(diffstr[i]);\n hunk.linedelimiters.push(delimiters[i] || \"\\n\");\n if (operation === \"+\") {\n addCount++;\n } else if (operation === \"-\") {\n removeCount++;\n } else if (operation === \" \") {\n addCount++;\n removeCount++;\n }\n } else {\n break;\n }\n } // Handle the empty block count case\n if (!addCount && hunk.newLines === 1) {\n hunk.newLines = 0;\n }\n if (!removeCount && hunk.oldLines === 1) {\n hunk.oldLines = 0;\n } // Perform optional sanity checking\n if (options.strict) {\n if (addCount !== hunk.newLines) {\n throw new Error(\"Added line count did not match for hunk at line \" + (chunkHeaderIndex + 1));\n }\n if (removeCount !== hunk.oldLines) {\n throw new Error(\"Removed line count did not match for hunk at line \" + (chunkHeaderIndex + 1));\n }\n }\n return hunk;\n }\n while(i < diffstr.length){\n parseIndex();\n }\n return list;\n}\n// Iterator that traverses in the range of [min, max], stepping\n// by distance from a given start position. I.e. for [0, 4], with\n// start of 2, this will iterate 2, 3, 1, 4, 0.\nfunction distanceIterator(start, minLine, maxLine) {\n var wantForward = true, backwardExhausted = false, forwardExhausted = false, localOffset = 1;\n return function iterator() {\n if (wantForward && !forwardExhausted) {\n if (backwardExhausted) {\n localOffset++;\n } else {\n wantForward = false;\n } // Check if trying to fit beyond text length, and if not, check it fits\n // after offset location (or desired location on first iteration)\n if (start + localOffset <= maxLine) {\n return localOffset;\n }\n forwardExhausted = true;\n }\n if (!backwardExhausted) {\n if (!forwardExhausted) {\n wantForward = true;\n } // Check if trying to fit before text beginning, and if not, check it fits\n // before offset location\n if (minLine <= start - localOffset) {\n return -localOffset++;\n }\n backwardExhausted = true;\n return iterator();\n } // We tried to fit hunk before text beginning and beyond text length, then\n // hunk can't fit on the text. Return undefined\n };\n}\nfunction applyPatch(source, uniDiff) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (typeof uniDiff === \"string\") {\n uniDiff = parsePatch(uniDiff);\n }\n if (Array.isArray(uniDiff)) {\n if (uniDiff.length > 1) {\n throw new Error(\"applyPatch only works with a single input.\");\n }\n uniDiff = uniDiff[0];\n } // Apply the diff to the input\n var lines = source.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/), delimiters = source.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [], hunks = uniDiff.hunks, compareLine = options.compareLine || function(lineNumber, line, operation, patchContent) {\n return line === patchContent;\n }, errorCount = 0, fuzzFactor = options.fuzzFactor || 0, minLine = 0, offset = 0, removeEOFNL, addEOFNL;\n /**\n * Checks if the hunk exactly fits on the provided location\n */ function hunkFits(hunk, toPos) {\n for(var j = 0; j < hunk.lines.length; j++){\n var line = hunk.lines[j], operation = line.length > 0 ? line[0] : \" \", content = line.length > 0 ? line.substr(1) : line;\n if (operation === \" \" || operation === \"-\") {\n // Context sanity check\n if (!compareLine(toPos + 1, lines[toPos], operation, content)) {\n errorCount++;\n if (errorCount > fuzzFactor) {\n return false;\n }\n }\n toPos++;\n }\n }\n return true;\n } // Search best fit offsets for each hunk based on the previous ones\n for(var i = 0; i < hunks.length; i++){\n var hunk = hunks[i], maxLine = lines.length - hunk.oldLines, localOffset = 0, toPos = offset + hunk.oldStart - 1;\n var iterator = distanceIterator(toPos, minLine, maxLine);\n for(; localOffset !== undefined; localOffset = iterator()){\n if (hunkFits(hunk, toPos + localOffset)) {\n hunk.offset = offset += localOffset;\n break;\n }\n }\n if (localOffset === undefined) {\n return false;\n } // Set lower text limit to end of the current hunk, so next ones don't try\n // to fit over already patched text\n minLine = hunk.offset + hunk.oldStart + hunk.oldLines;\n } // Apply patch hunks\n var diffOffset = 0;\n for(var _i = 0; _i < hunks.length; _i++){\n var _hunk = hunks[_i], _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1;\n diffOffset += _hunk.newLines - _hunk.oldLines;\n for(var j = 0; j < _hunk.lines.length; j++){\n var line = _hunk.lines[j], operation = line.length > 0 ? line[0] : \" \", content = line.length > 0 ? line.substr(1) : line, delimiter = _hunk.linedelimiters[j];\n if (operation === \" \") {\n _toPos++;\n } else if (operation === \"-\") {\n lines.splice(_toPos, 1);\n delimiters.splice(_toPos, 1);\n /* istanbul ignore else */ } else if (operation === \"+\") {\n lines.splice(_toPos, 0, content);\n delimiters.splice(_toPos, 0, delimiter);\n _toPos++;\n } else if (operation === \"\\\\\") {\n var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null;\n if (previousOperation === \"+\") {\n removeEOFNL = true;\n } else if (previousOperation === \"-\") {\n addEOFNL = true;\n }\n }\n }\n } // Handle EOFNL insertion/removal\n if (removeEOFNL) {\n while(!lines[lines.length - 1]){\n lines.pop();\n delimiters.pop();\n }\n } else if (addEOFNL) {\n lines.push(\"\");\n delimiters.push(\"\\n\");\n }\n for(var _k = 0; _k < lines.length - 1; _k++){\n lines[_k] = lines[_k] + delimiters[_k];\n }\n return lines.join(\"\");\n} // Wrapper that supports multiple file patches via callbacks.\nfunction applyPatches(uniDiff, options) {\n if (typeof uniDiff === \"string\") {\n uniDiff = parsePatch(uniDiff);\n }\n var currentIndex = 0;\n function processIndex() {\n var index = uniDiff[currentIndex++];\n if (!index) {\n return options.complete();\n }\n options.loadFile(index, function(err, data) {\n if (err) {\n return options.complete(err);\n }\n var updatedContent = applyPatch(data, index, options);\n options.patched(index, updatedContent, function(err) {\n if (err) {\n return options.complete(err);\n }\n processIndex();\n });\n });\n }\n processIndex();\n}\nfunction structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n if (!options) {\n options = {};\n }\n if (typeof options.context === \"undefined\") {\n options.context = 4;\n }\n var diff = diffLines(oldStr, newStr, options);\n if (!diff) {\n return;\n }\n diff.push({\n value: \"\",\n lines: []\n }); // Append an empty value to make cleanup easier\n function contextLines(lines) {\n return lines.map(function(entry) {\n return \" \" + entry;\n });\n }\n var hunks = [];\n var oldRangeStart = 0, newRangeStart = 0, curRange = [], oldLine = 1, newLine = 1;\n var _loop = function _loop(i) {\n var current = diff[i], lines = current.lines || current.value.replace(/\\n$/, \"\").split(\"\\n\");\n current.lines = lines;\n if (current.added || current.removed) {\n var _curRange;\n // If we have previous context, start with that\n if (!oldRangeStart) {\n var prev = diff[i - 1];\n oldRangeStart = oldLine;\n newRangeStart = newLine;\n if (prev) {\n curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];\n oldRangeStart -= curRange.length;\n newRangeStart -= curRange.length;\n }\n } // Output our changes\n (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function(entry) {\n return (current.added ? \"+\" : \"-\") + entry;\n }))); // Track the updated file position\n if (current.added) {\n newLine += lines.length;\n } else {\n oldLine += lines.length;\n }\n } else {\n // Identical context lines. Track line changes\n if (oldRangeStart) {\n // Close out any changes that have been output (or join overlapping)\n if (lines.length <= options.context * 2 && i < diff.length - 2) {\n var _curRange2;\n // Overlapping\n (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines)));\n } else {\n var _curRange3;\n // end the range and output\n var contextSize = Math.min(lines.length, options.context);\n (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize))));\n var hunk = {\n oldStart: oldRangeStart,\n oldLines: oldLine - oldRangeStart + contextSize,\n newStart: newRangeStart,\n newLines: newLine - newRangeStart + contextSize,\n lines: curRange\n };\n if (i >= diff.length - 2 && lines.length <= options.context) {\n // EOF is inside this hunk\n var oldEOFNewline = /\\n$/.test(oldStr);\n var newEOFNewline = /\\n$/.test(newStr);\n var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines;\n if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) {\n // special case: old has no eol and no trailing context; no-nl can end up before adds\n // however, if the old file is empty, do not output the no-nl line\n curRange.splice(hunk.oldLines, 0, \"\\\\ No newline at end of file\");\n }\n if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) {\n curRange.push(\"\\\\ No newline at end of file\");\n }\n }\n hunks.push(hunk);\n oldRangeStart = 0;\n newRangeStart = 0;\n curRange = [];\n }\n }\n oldLine += lines.length;\n newLine += lines.length;\n }\n };\n for(var i = 0; i < diff.length; i++){\n _loop(i);\n }\n return {\n oldFileName: oldFileName,\n newFileName: newFileName,\n oldHeader: oldHeader,\n newHeader: newHeader,\n hunks: hunks\n };\n}\nfunction formatPatch(diff) {\n var ret = [];\n if (diff.oldFileName == diff.newFileName) {\n ret.push(\"Index: \" + diff.oldFileName);\n }\n ret.push(\"===================================================================\");\n ret.push(\"--- \" + diff.oldFileName + (typeof diff.oldHeader === \"undefined\" ? \"\" : \"\t\" + diff.oldHeader));\n ret.push(\"+++ \" + diff.newFileName + (typeof diff.newHeader === \"undefined\" ? \"\" : \"\t\" + diff.newHeader));\n for(var i = 0; i < diff.hunks.length; i++){\n var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart -= 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart -= 1;\n }\n ret.push(\"@@ -\" + hunk.oldStart + \",\" + hunk.oldLines + \" +\" + hunk.newStart + \",\" + hunk.newLines + \" @@\");\n ret.push.apply(ret, hunk.lines);\n }\n return ret.join(\"\\n\") + \"\\n\";\n}\nfunction createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options));\n}\nfunction createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\nfunction arrayEqual(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n return arrayStartsWith(a, b);\n}\nfunction arrayStartsWith(array, start) {\n if (start.length > array.length) {\n return false;\n }\n for(var i = 0; i < start.length; i++){\n if (start[i] !== array[i]) {\n return false;\n }\n }\n return true;\n}\nfunction calcLineCount(hunk) {\n var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines), oldLines = _calcOldNewLineCount.oldLines, newLines = _calcOldNewLineCount.newLines;\n if (oldLines !== undefined) {\n hunk.oldLines = oldLines;\n } else {\n delete hunk.oldLines;\n }\n if (newLines !== undefined) {\n hunk.newLines = newLines;\n } else {\n delete hunk.newLines;\n }\n}\nfunction merge(mine, theirs, base) {\n mine = loadPatch(mine, base);\n theirs = loadPatch(theirs, base);\n var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning.\n // Leaving sanity checks on this to the API consumer that may know more about the\n // meaning in their own context.\n if (mine.index || theirs.index) {\n ret.index = mine.index || theirs.index;\n }\n if (mine.newFileName || theirs.newFileName) {\n if (!fileNameChanged(mine)) {\n // No header or no change in ours, use theirs (and ours if theirs does not exist)\n ret.oldFileName = theirs.oldFileName || mine.oldFileName;\n ret.newFileName = theirs.newFileName || mine.newFileName;\n ret.oldHeader = theirs.oldHeader || mine.oldHeader;\n ret.newHeader = theirs.newHeader || mine.newHeader;\n } else if (!fileNameChanged(theirs)) {\n // No header or no change in theirs, use ours\n ret.oldFileName = mine.oldFileName;\n ret.newFileName = mine.newFileName;\n ret.oldHeader = mine.oldHeader;\n ret.newHeader = mine.newHeader;\n } else {\n // Both changed... figure it out\n ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);\n ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);\n ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);\n ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);\n }\n }\n ret.hunks = [];\n var mineIndex = 0, theirsIndex = 0, mineOffset = 0, theirsOffset = 0;\n while(mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length){\n var mineCurrent = mine.hunks[mineIndex] || {\n oldStart: Infinity\n }, theirsCurrent = theirs.hunks[theirsIndex] || {\n oldStart: Infinity\n };\n if (hunkBefore(mineCurrent, theirsCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(mineCurrent, mineOffset));\n mineIndex++;\n theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;\n } else if (hunkBefore(theirsCurrent, mineCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));\n theirsIndex++;\n mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;\n } else {\n // Overlap, merge as best we can\n var mergedHunk = {\n oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),\n oldLines: 0,\n newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),\n newLines: 0,\n lines: []\n };\n mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);\n theirsIndex++;\n mineIndex++;\n ret.hunks.push(mergedHunk);\n }\n }\n return ret;\n}\nfunction loadPatch(param, base) {\n if (typeof param === \"string\") {\n if (/^@@/m.test(param) || /^Index:/m.test(param)) {\n return parsePatch(param)[0];\n }\n if (!base) {\n throw new Error(\"Must provide a base reference or pass in a patch\");\n }\n return structuredPatch(undefined, undefined, base, param);\n }\n return param;\n}\nfunction fileNameChanged(patch) {\n return patch.newFileName && patch.newFileName !== patch.oldFileName;\n}\nfunction selectField(index, mine, theirs) {\n if (mine === theirs) {\n return mine;\n } else {\n index.conflict = true;\n return {\n mine: mine,\n theirs: theirs\n };\n }\n}\nfunction hunkBefore(test, check) {\n return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;\n}\nfunction cloneHunk(hunk, offset) {\n return {\n oldStart: hunk.oldStart,\n oldLines: hunk.oldLines,\n newStart: hunk.newStart + offset,\n newLines: hunk.newLines,\n lines: hunk.lines\n };\n}\nfunction mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {\n // This will generally result in a conflicted hunk, but there are cases where the context\n // is the only overlap where we can successfully merge the content here.\n var mine = {\n offset: mineOffset,\n lines: mineLines,\n index: 0\n }, their = {\n offset: theirOffset,\n lines: theirLines,\n index: 0\n }; // Handle any leading content\n insertLeading(hunk, mine, their);\n insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each.\n while(mine.index < mine.lines.length && their.index < their.lines.length){\n var mineCurrent = mine.lines[mine.index], theirCurrent = their.lines[their.index];\n if ((mineCurrent[0] === \"-\" || mineCurrent[0] === \"+\") && (theirCurrent[0] === \"-\" || theirCurrent[0] === \"+\")) {\n // Both modified ...\n mutualChange(hunk, mine, their);\n } else if (mineCurrent[0] === \"+\" && theirCurrent[0] === \" \") {\n var _hunk$lines;\n // Mine inserted\n (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine)));\n } else if (theirCurrent[0] === \"+\" && mineCurrent[0] === \" \") {\n var _hunk$lines2;\n // Theirs inserted\n (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their)));\n } else if (mineCurrent[0] === \"-\" && theirCurrent[0] === \" \") {\n // Mine removed or edited\n removal(hunk, mine, their);\n } else if (theirCurrent[0] === \"-\" && mineCurrent[0] === \" \") {\n // Their removed or edited\n removal(hunk, their, mine, true);\n } else if (mineCurrent === theirCurrent) {\n // Context identity\n hunk.lines.push(mineCurrent);\n mine.index++;\n their.index++;\n } else {\n // Context mismatch\n conflict(hunk, collectChange(mine), collectChange(their));\n }\n } // Now push anything that may be remaining\n insertTrailing(hunk, mine);\n insertTrailing(hunk, their);\n calcLineCount(hunk);\n}\nfunction mutualChange(hunk, mine, their) {\n var myChanges = collectChange(mine), theirChanges = collectChange(their);\n if (allRemoves(myChanges) && allRemoves(theirChanges)) {\n // Special case for remove changes that are supersets of one another\n if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {\n var _hunk$lines3;\n (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges));\n return;\n } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {\n var _hunk$lines4;\n (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges));\n return;\n }\n } else if (arrayEqual(myChanges, theirChanges)) {\n var _hunk$lines5;\n (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges));\n return;\n }\n conflict(hunk, myChanges, theirChanges);\n}\nfunction removal(hunk, mine, their, swap) {\n var myChanges = collectChange(mine), theirChanges = collectContext(their, myChanges);\n if (theirChanges.merged) {\n var _hunk$lines6;\n (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged));\n } else {\n conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);\n }\n}\nfunction conflict(hunk, mine, their) {\n hunk.conflict = true;\n hunk.lines.push({\n conflict: true,\n mine: mine,\n theirs: their\n });\n}\nfunction insertLeading(hunk, insert, their) {\n while(insert.offset < their.offset && insert.index < insert.lines.length){\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n insert.offset++;\n }\n}\nfunction insertTrailing(hunk, insert) {\n while(insert.index < insert.lines.length){\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n }\n}\nfunction collectChange(state) {\n var ret = [], operation = state.lines[state.index][0];\n while(state.index < state.lines.length){\n var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one \"atomic\" modify change.\n if (operation === \"-\" && line[0] === \"+\") {\n operation = \"+\";\n }\n if (operation === line[0]) {\n ret.push(line);\n state.index++;\n } else {\n break;\n }\n }\n return ret;\n}\nfunction collectContext(state, matchChanges) {\n var changes = [], merged = [], matchIndex = 0, contextChanges = false, conflicted = false;\n while(matchIndex < matchChanges.length && state.index < state.lines.length){\n var change = state.lines[state.index], match = matchChanges[matchIndex]; // Once we've hit our add, then we are done\n if (match[0] === \"+\") {\n break;\n }\n contextChanges = contextChanges || change[0] !== \" \";\n merged.push(match);\n matchIndex++; // Consume any additions in the other block as a conflict to attempt\n // to pull in the remaining context after this\n if (change[0] === \"+\") {\n conflicted = true;\n while(change[0] === \"+\"){\n changes.push(change);\n change = state.lines[++state.index];\n }\n }\n if (match.substr(1) === change.substr(1)) {\n changes.push(change);\n state.index++;\n } else {\n conflicted = true;\n }\n }\n if ((matchChanges[matchIndex] || \"\")[0] === \"+\" && contextChanges) {\n conflicted = true;\n }\n if (conflicted) {\n return changes;\n }\n while(matchIndex < matchChanges.length){\n merged.push(matchChanges[matchIndex++]);\n }\n return {\n merged: merged,\n changes: changes\n };\n}\nfunction allRemoves(changes) {\n return changes.reduce(function(prev, change) {\n return prev && change[0] === \"-\";\n }, true);\n}\nfunction skipRemoveSuperset(state, removeChanges, delta) {\n for(var i = 0; i < delta; i++){\n var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);\n if (state.lines[state.index + i] !== \" \" + changeContent) {\n return false;\n }\n }\n state.index += delta;\n return true;\n}\nfunction calcOldNewLineCount(lines) {\n var oldLines = 0;\n var newLines = 0;\n lines.forEach(function(line) {\n if (typeof line !== \"string\") {\n var myCount = calcOldNewLineCount(line.mine);\n var theirCount = calcOldNewLineCount(line.theirs);\n if (oldLines !== undefined) {\n if (myCount.oldLines === theirCount.oldLines) {\n oldLines += myCount.oldLines;\n } else {\n oldLines = undefined;\n }\n }\n if (newLines !== undefined) {\n if (myCount.newLines === theirCount.newLines) {\n newLines += myCount.newLines;\n } else {\n newLines = undefined;\n }\n }\n } else {\n if (newLines !== undefined && (line[0] === \"+\" || line[0] === \" \")) {\n newLines++;\n }\n if (oldLines !== undefined && (line[0] === \"-\" || line[0] === \" \")) {\n oldLines++;\n }\n }\n });\n return {\n oldLines: oldLines,\n newLines: newLines\n };\n}\n// See: http://code.google.com/p/google-diff-match-patch/wiki/API\nfunction convertChangesToDMP(changes) {\n var ret = [], change, operation;\n for(var i = 0; i < changes.length; i++){\n change = changes[i];\n if (change.added) {\n operation = 1;\n } else if (change.removed) {\n operation = -1;\n } else {\n operation = 0;\n }\n ret.push([\n operation,\n change.value\n ]);\n }\n return ret;\n}\nfunction convertChangesToXML(changes) {\n var ret = [];\n for(var i = 0; i < changes.length; i++){\n var change = changes[i];\n if (change.added) {\n ret.push(\"\");\n } else if (change.removed) {\n ret.push(\"\");\n }\n ret.push(escapeHTML(change.value));\n if (change.added) {\n ret.push(\"\");\n } else if (change.removed) {\n ret.push(\"\");\n }\n }\n return ret.join(\"\");\n}\nfunction escapeHTML(s) {\n var n = s;\n n = n.replace(/&/g, \"&\");\n n = n.replace(//g, \">\");\n n = n.replace(/\"/g, \""\");\n return n;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvdXZ1L25vZGVfbW9kdWxlcy9kaWZmL2xpYi9pbmRleC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTQSxRQUFRO0FBQ2pCQSxLQUFLQyxTQUFTLEdBQUc7SUFDZkMsTUFBTSxTQUFTQSxLQUFLQyxTQUFTLEVBQUVDLFNBQVM7UUFDdEMsSUFBSUMsVUFBVUMsVUFBVUMsTUFBTSxHQUFHLEtBQUtELFNBQVMsQ0FBQyxFQUFFLEtBQUtFLFlBQVlGLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUNuRixJQUFJRyxXQUFXSixRQUFRSSxRQUFRO1FBRS9CLElBQUksT0FBT0osWUFBWSxZQUFZO1lBQ2pDSSxXQUFXSjtZQUNYQSxVQUFVLENBQUM7UUFDYjtRQUVBLElBQUksQ0FBQ0EsT0FBTyxHQUFHQTtRQUNmLElBQUlLLE9BQU8sSUFBSTtRQUVmLFNBQVNDLEtBQUtDLEtBQUs7WUFDakIsSUFBSUgsVUFBVTtnQkFDWkksV0FBVztvQkFDVEosU0FBU0QsV0FBV0k7Z0JBQ3RCLEdBQUc7Z0JBQ0gsT0FBTztZQUNULE9BQU87Z0JBQ0wsT0FBT0E7WUFDVDtRQUNGLEVBQUUseURBQXlEO1FBRzNEVCxZQUFZLElBQUksQ0FBQ1csU0FBUyxDQUFDWDtRQUMzQkMsWUFBWSxJQUFJLENBQUNVLFNBQVMsQ0FBQ1Y7UUFDM0JELFlBQVksSUFBSSxDQUFDWSxXQUFXLENBQUMsSUFBSSxDQUFDQyxRQUFRLENBQUNiO1FBQzNDQyxZQUFZLElBQUksQ0FBQ1csV0FBVyxDQUFDLElBQUksQ0FBQ0MsUUFBUSxDQUFDWjtRQUMzQyxJQUFJYSxTQUFTYixVQUFVRyxNQUFNLEVBQ3pCVyxTQUFTZixVQUFVSSxNQUFNO1FBQzdCLElBQUlZLGFBQWE7UUFDakIsSUFBSUMsZ0JBQWdCSCxTQUFTQztRQUU3QixJQUFJYixRQUFRZSxhQUFhLEVBQUU7WUFDekJBLGdCQUFnQkMsS0FBS0MsR0FBRyxDQUFDRixlQUFlZixR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QUNoQkQsSUFBSUksSUFBSSxDQUFDO1FBQ1gsT0FBTyxJQUFJcVEsT0FBT3ZRLE9BQU8sRUFBRTtZQUN6QkYsSUFBSUksSUFBSSxDQUFDO1FBQ1g7SUFDRjtJQUVBLE9BQU9KLElBQUlmLElBQUksQ0FBQztBQUNsQjtBQUVBLFNBQVNrUyxXQUFXQyxDQUFDO0lBQ25CLElBQUkxTSxJQUFJME07SUFDUjFNLElBQUlBLEVBQUVpQixPQUFPLENBQUMsTUFBTTtJQUNwQmpCLElBQUlBLEVBQUVpQixPQUFPLENBQUMsTUFBTTtJQUNwQmpCLElBQUlBLEVBQUVpQixPQUFPLENBQUMsTUFBTTtJQUNwQmpCLElBQUlBLEVBQUVpQixPQUFPLENBQUMsTUFBTTtJQUNwQixPQUFPakI7QUFDVDtBQUU2UiIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRjaGF0Ly4vbm9kZV9tb2R1bGVzL3V2dS9ub2RlX21vZHVsZXMvZGlmZi9saWIvaW5kZXgubWpzPzgxMWMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gRGlmZigpIHt9XG5EaWZmLnByb3RvdHlwZSA9IHtcbiAgZGlmZjogZnVuY3Rpb24gZGlmZihvbGRTdHJpbmcsIG5ld1N0cmluZykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICB2YXIgY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBkb25lKHZhbHVlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkLCB2YWx1ZSk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9IC8vIEFsbG93IHN1YmNsYXNzZXMgdG8gbWFzc2FnZSB0aGUgaW5wdXQgcHJpb3IgdG8gcnVubmluZ1xuXG5cbiAgICBvbGRTdHJpbmcgPSB0aGlzLmNhc3RJbnB1dChvbGRTdHJpbmcpO1xuICAgIG5ld1N0cmluZyA9IHRoaXMuY2FzdElucHV0KG5ld1N0cmluZyk7XG4gICAgb2xkU3RyaW5nID0gdGhpcy5yZW1vdmVFbXB0eSh0aGlzLnRva2VuaXplKG9sZFN0cmluZykpO1xuICAgIG5ld1N0cmluZyA9IHRoaXMucmVtb3ZlRW1wdHkodGhpcy50b2tlbml6ZShuZXdTdHJpbmcpKTtcbiAgICB2YXIgbmV3TGVuID0gbmV3U3RyaW5nLmxlbmd0aCxcbiAgICAgICAgb2xkTGVuID0gb2xkU3RyaW5nLmxlbmd0aDtcbiAgICB2YXIgZWRpdExlbmd0aCA9IDE7XG4gICAgdmFyIG1heEVkaXRMZW5ndGggPSBuZXdMZW4gKyBvbGRMZW47XG5cbiAgICBpZiAob3B0aW9ucy5tYXhFZGl0TGVuZ3RoKSB7XG4gICAgICBtYXhFZGl0TGVuZ3RoID0gTWF0aC5taW4obWF4RWRpdExlbmd0aCwgb3B0aW9ucy5tYXhFZGl0TGVuZ3RoKTtcbiAgICB9XG5cbiAgICB2YXIgYmVzdFBhdGggPSBbe1xuICAgICAgbmV3UG9zOiAtMSxcbiAgICAgIGNvbXBvbmVudHM6IFtdXG4gICAgfV07IC8vIFNlZWQgZWRpdExlbmd0aCA9IDAsIGkuZS4gdGhlIGNvbnRlbnQgc3RhcnRzIHdpdGggdGhlIHNhbWUgdmFsdWVzXG5cbiAgICB2YXIgb2xkUG9zID0gdGhpcy5leHRyYWN0Q29tbW9uKGJlc3RQYXRoWzBdLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgMCk7XG5cbiAgICBpZiAoYmVzdFBhdGhbMF0ubmV3UG9zICsgMSA+PSBuZXdMZW4gJiYgb2xkUG9zICsgMSA+PSBvbGRMZW4pIHtcbiAgICAgIC8vIElkZW50aXR5IHBlciB0aGUgZXF1YWxpdHkgYW5kIHRva2VuaXplclxuICAgICAgcmV0dXJuIGRvbmUoW3tcbiAgICAgICAgdmFsdWU6IHRoaXMuam9pbihuZXdTdHJpbmcpLFxuICAgICAgICBjb3VudDogbmV3U3RyaW5nLmxlbmd0aFxuICAgICAgfV0pO1xuICAgIH0gLy8gTWFpbiB3b3JrZXIgbWV0aG9kLiBjaGVja3MgYWxsIHBlcm11dGF0aW9ucyBvZiBhIGdpdmVuIGVkaXQgbGVuZ3RoIGZvciBhY2NlcHRhbmNlLlxuXG5cbiAgICBmdW5jdGlvbiBleGVjRWRpdExlbmd0aCgpIHtcbiAgICAgIGZvciAodmFyIGRpYWdvbmFsUGF0aCA9IC0xICogZWRpdExlbmd0aDsgZGlhZ29uYWxQYXRoIDw9IGVkaXRMZW5ndGg7IGRpYWdvbmFsUGF0aCArPSAyKSB7XG4gICAgICAgIHZhciBiYXNlUGF0aCA9IHZvaWQgMDtcblxuICAgICAgICB2YXIgYWRkUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCAtIDFdLFxuICAgICAgICAgICAgcmVtb3ZlUGF0aCA9IGJlc3RQYXRoW2RpYWdvbmFsUGF0aCArIDFdLFxuICAgICAgICAgICAgX29sZFBvcyA9IChyZW1vdmVQYXRoID8gcmVtb3ZlUGF0aC5uZXdQb3MgOiAwKSAtIGRpYWdvbmFsUGF0aDtcblxuICAgICAgICBpZiAoYWRkUGF0aCkge1xuICAgICAgICAgIC8vIE5vIG9uZSBlbHNlIGlzIGdvaW5nIHRvIGF0dGVtcHQgdG8gdXNlIHRoaXMgdmFsdWUsIGNsZWFyIGl0XG4gICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2FuQWRkID0gYWRkUGF0aCAmJiBhZGRQYXRoLm5ld1BvcyArIDEgPCBuZXdMZW4sXG4gICAgICAgICAgICBjYW5SZW1vdmUgPSByZW1vdmVQYXRoICYmIDAgPD0gX29sZFBvcyAmJiBfb2xkUG9zIDwgb2xkTGVuO1xuXG4gICAgICAgIGlmICghY2FuQWRkICYmICFjYW5SZW1vdmUpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHBhdGggaXMgYSB0ZXJtaW5hbCB0aGVuIHBydW5lXG4gICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyBTZWxlY3QgdGhlIGRpYWdvbmFsIHRoYXQgd2Ugd2FudCB0byBicmFuY2ggZnJvbS4gV2Ugc2VsZWN0IHRoZSBwcmlvclxuICAgICAgICAvLyBwYXRoIHdob3NlIHBvc2l0aW9uIGluIHRoZSBuZXcgc3RyaW5nIGlzIHRoZSBmYXJ0aGVzdCBmcm9tIHRoZSBvcmlnaW5cbiAgICAgICAgLy8gYW5kIGRvZXMgbm90IHBhc3MgdGhlIGJvdW5kcyBvZiB0aGUgZGlmZiBncmFwaFxuXG5cbiAgICAgICAgaWYgKCFjYW5BZGQgfHwgY2FuUmVtb3ZlICYmIGFkZFBhdGgubmV3UG9zIDwgcmVtb3ZlUGF0aC5uZXdQb3MpIHtcbiAgICAgICAgICBiYXNlUGF0aCA9IGNsb25lUGF0aChyZW1vdmVQYXRoKTtcbiAgICAgICAgICBzZWxmLnB1c2hDb21wb25lbnQoYmFzZVBhdGguY29tcG9uZW50cywgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiYXNlUGF0aCA9IGFkZFBhdGg7IC8vIE5vIG5lZWQgdG8gY2xvbmUsIHdlJ3ZlIHB1bGxlZCBpdCBmcm9tIHRoZSBsaXN0XG5cbiAgICAgICAgICBiYXNlUGF0aC5uZXdQb3MrKztcbiAgICAgICAgICBzZWxmLnB1c2hDb21wb25lbnQoYmFzZVBhdGguY29tcG9uZW50cywgdHJ1ZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF9vbGRQb3MgPSBzZWxmLmV4dHJhY3RDb21tb24oYmFzZVBhdGgsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBkaWFnb25hbFBhdGgpOyAvLyBJZiB3ZSBoYXZlIGhpdCB0aGUgZW5kIG9mIGJvdGggc3RyaW5ncywgdGhlbiB3ZSBhcmUgZG9uZVxuXG4gICAgICAgIGlmIChiYXNlUGF0aC5uZXdQb3MgKyAxID49IG5ld0xlbiAmJiBfb2xkUG9zICsgMSA+PSBvbGRMZW4pIHtcbiAgICAgICAgICByZXR1cm4gZG9uZShidWlsZFZhbHVlcyhzZWxmLCBiYXNlUGF0aC5jb21wb25lbnRzLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgc2VsZi51c2VMb25nZXN0VG9rZW4pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgdHJhY2sgdGhpcyBwYXRoIGFzIGEgcG90ZW50aWFsIGNhbmRpZGF0ZSBhbmQgY29udGludWUuXG4gICAgICAgICAgYmVzdFBhdGhbZGlhZ29uYWxQYXRoXSA9IGJhc2VQYXRoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVkaXRMZW5ndGgrKztcbiAgICB9IC8vIFBlcmZvcm1zIHRoZSBsZW5ndGggb2YgZWRpdCBpdGVyYXRpb24uIElzIGEgYml0IGZ1Z2x5IGFzIHRoaXMgaGFzIHRvIHN1cHBvcnQgdGhlXG4gICAgLy8gc3luYyBhbmQgYXN5bmMgbW9kZSB3aGljaCBpcyBuZXZlciBmdW4uIExvb3BzIG92ZXIgZXhlY0VkaXRMZW5ndGggdW50aWwgYSB2YWx1ZVxuICAgIC8vIGlzIHByb2R1Y2VkLCBvciB1bnRpbCB0aGUgZWRpdCBsZW5ndGggZXhjZWVkcyBvcHRpb25zLm1heEVkaXRMZW5ndGggKGlmIGdpdmVuKSxcbiAgICAvLyBpbiB3aGljaCBjYXNlIGl0IHdpbGwgcmV0dXJuIHVuZGVmaW5lZC5cblxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAoZnVuY3Rpb24gZXhlYygpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGVkaXRMZW5ndGggPiBtYXhFZGl0TGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWV4ZWNFZGl0TGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIGV4ZWMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgICAgfSkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKGVkaXRMZW5ndGggPD0gbWF4RWRpdExlbmd0aCkge1xuICAgICAgICB2YXIgcmV0ID0gZXhlY0VkaXRMZW5ndGgoKTtcblxuICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgcHVzaENvbXBvbmVudDogZnVuY3Rpb24gcHVzaENvbXBvbmVudChjb21wb25lbnRzLCBhZGRlZCwgcmVtb3ZlZCkge1xuICAgIHZhciBsYXN0ID0gY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKGxhc3QgJiYgbGFzdC5hZGRlZCA9PT0gYWRkZWQgJiYgbGFzdC5yZW1vdmVkID09PSByZW1vdmVkKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIGNsb25lIGhlcmUgYXMgdGhlIGNvbXBvbmVudCBjbG9uZSBvcGVyYXRpb24gaXMganVzdFxuICAgICAgLy8gYXMgc2hhbGxvdyBhcnJheSBjbG9uZVxuICAgICAgY29tcG9uZW50c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdID0ge1xuICAgICAgICBjb3VudDogbGFzdC5jb3VudCArIDEsXG4gICAgICAgIGFkZGVkOiBhZGRlZCxcbiAgICAgICAgcmVtb3ZlZDogcmVtb3ZlZFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50cy5wdXNoKHtcbiAgICAgICAgY291bnQ6IDEsXG4gICAgICAgIGFkZGVkOiBhZGRlZCxcbiAgICAgICAgcmVtb3ZlZDogcmVtb3ZlZFxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICBleHRyYWN0Q29tbW9uOiBmdW5jdGlvbiBleHRyYWN0Q29tbW9uKGJhc2VQYXRoLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgZGlhZ29uYWxQYXRoKSB7XG4gICAgdmFyIG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsXG4gICAgICAgIG9sZExlbiA9IG9sZFN0cmluZy5sZW5ndGgsXG4gICAgICAgIG5ld1BvcyA9IGJhc2VQYXRoLm5ld1BvcyxcbiAgICAgICAgb2xkUG9zID0gbmV3UG9zIC0gZGlhZ29uYWxQYXRoLFxuICAgICAgICBjb21tb25Db3VudCA9IDA7XG5cbiAgICB3aGlsZSAobmV3UG9zICsgMSA8IG5ld0xlbiAmJiBvbGRQb3MgKyAxIDwgb2xkTGVuICYmIHRoaXMuZXF1YWxzKG5ld1N0cmluZ1tuZXdQb3MgKyAxXSwgb2xkU3RyaW5nW29sZFBvcyArIDFdKSkge1xuICAgICAgbmV3UG9zKys7XG4gICAgICBvbGRQb3MrKztcbiAgICAgIGNvbW1vbkNvdW50Kys7XG4gICAgfVxuXG4gICAgaWYgKGNvbW1vbkNvdW50KSB7XG4gICAgICBiYXNlUGF0aC5jb21wb25lbnRzLnB1c2goe1xuICAgICAgICBjb3VudDogY29tbW9uQ291bnRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGJhc2VQYXRoLm5ld1BvcyA9IG5ld1BvcztcbiAgICByZXR1cm4gb2xkUG9zO1xuICB9LFxuICBlcXVhbHM6IGZ1bmN0aW9uIGVxdWFscyhsZWZ0LCByaWdodCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGFyYXRvcikge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb21wYXJhdG9yKGxlZnQsIHJpZ2h0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0IHx8IHRoaXMub3B0aW9ucy5pZ25vcmVDYXNlICYmIGxlZnQudG9Mb3dlckNhc2UoKSA9PT0gcmlnaHQudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gIH0sXG4gIHJlbW92ZUVtcHR5OiBmdW5jdGlvbiByZW1vdmVFbXB0eShhcnJheSkge1xuICAgIHZhciByZXQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhcnJheVtpXSkge1xuICAgICAgICByZXQucHVzaChhcnJheVtpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSxcbiAgY2FzdElucHV0OiBmdW5jdGlvbiBjYXN0SW5wdXQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG4gIHRva2VuaXplOiBmdW5jdGlvbiB0b2tlbml6ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnJyk7XG4gIH0sXG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oY2hhcnMpIHtcbiAgICByZXR1cm4gY2hhcnMuam9pbignJyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGJ1aWxkVmFsdWVzKGRpZmYsIGNvbXBvbmVudHMsIG5ld1N0cmluZywgb2xkU3RyaW5nLCB1c2VMb25nZXN0VG9rZW4pIHtcbiAgdmFyIGNvbXBvbmVudFBvcyA9IDAsXG4gICAgICBjb21wb25lbnRMZW4gPSBjb21wb25lbnRzLmxlbmd0aCxcbiAgICAgIG5ld1BvcyA9IDAsXG4gICAgICBvbGRQb3MgPSAwO1xuXG4gIGZvciAoOyBjb21wb25lbnRQb3MgPCBjb21wb25lbnRMZW47IGNvbXBvbmVudFBvcysrKSB7XG4gICAgdmFyIGNvbXBvbmVudCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zXTtcblxuICAgIGlmICghY29tcG9uZW50LnJlbW92ZWQpIHtcbiAgICAgIGlmICghY29tcG9uZW50LmFkZGVkICYmIHVzZUxvbmdlc3RUb2tlbikge1xuICAgICAgICB2YXIgdmFsdWUgPSBuZXdTdHJpbmcuc2xpY2UobmV3UG9zLCBuZXdQb3MgKyBjb21wb25lbnQuY291bnQpO1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChmdW5jdGlvbiAodmFsdWUsIGkpIHtcbiAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBvbGRTdHJpbmdbb2xkUG9zICsgaV07XG4gICAgICAgICAgcmV0dXJuIG9sZFZhbHVlLmxlbmd0aCA+IHZhbHVlLmxlbmd0aCA/IG9sZFZhbHVlIDogdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4odmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG5ld1N0cmluZy5zbGljZShuZXdQb3MsIG5ld1BvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuICAgICAgfVxuXG4gICAgICBuZXdQb3MgKz0gY29tcG9uZW50LmNvdW50OyAvLyBDb21tb24gY2FzZVxuXG4gICAgICBpZiAoIWNvbXBvbmVudC5hZGRlZCkge1xuICAgICAgICBvbGRQb3MgKz0gY29tcG9uZW50LmNvdW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4ob2xkU3RyaW5nLnNsaWNlKG9sZFBvcywgb2xkUG9zICsgY29tcG9uZW50LmNvdW50KSk7XG4gICAgICBvbGRQb3MgKz0gY29tcG9uZW50LmNvdW50OyAvLyBSZXZlcnNlIGFkZCBhbmQgcmVtb3ZlIHNvIHJlbW92ZXMgYXJlIG91dHB1dCBmaXJzdCB0byBtYXRjaCBjb21tb24gY29udmVudGlvblxuICAgICAgLy8gVGhlIGRpZmZpbmcgYWxnb3JpdGhtIGlzIHRpZWQgdG8gYWRkIHRoZW4gcmVtb3ZlIG91dHB1dCBhbmQgdGhpcyBpcyB0aGUgc2ltcGxlc3RcbiAgICAgIC8vIHJvdXRlIHRvIGdldCB0aGUgZGVzaXJlZCBvdXRwdXQgd2l0aCBtaW5pbWFsIG92ZXJoZWFkLlxuXG4gICAgICBpZiAoY29tcG9uZW50UG9zICYmIGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV0uYWRkZWQpIHtcbiAgICAgICAgdmFyIHRtcCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV07XG4gICAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV0gPSBjb21wb25lbnRzW2NvbXBvbmVudFBvc107XG4gICAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50UG9zXSA9IHRtcDtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gU3BlY2lhbCBjYXNlIGhhbmRsZSBmb3Igd2hlbiBvbmUgdGVybWluYWwgaXMgaWdub3JlZCAoaS5lLiB3aGl0ZXNwYWNlKS5cbiAgLy8gRm9yIHRoaXMgY2FzZSB3ZSBtZXJnZSB0aGUgdGVybWluYWwgaW50byB0aGUgcHJpb3Igc3RyaW5nIGFuZCBkcm9wIHRoZSBjaGFuZ2UuXG4gIC8vIFRoaXMgaXMgb25seSBhdmFpbGFibGUgZm9yIHN0cmluZyBtb2RlLlxuXG5cbiAgdmFyIGxhc3RDb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudExlbiAtIDFdO1xuXG4gIGlmIChjb21wb25lbnRMZW4gPiAxICYmIHR5cGVvZiBsYXN0Q29tcG9uZW50LnZhbHVlID09PSAnc3RyaW5nJyAmJiAobGFzdENvbXBvbmVudC5hZGRlZCB8fCBsYXN0Q29tcG9uZW50LnJlbW92ZWQpICYmIGRpZmYuZXF1YWxzKCcnLCBsYXN0Q29tcG9uZW50LnZhbHVlKSkge1xuICAgIGNvbXBvbmVudHNbY29tcG9uZW50TGVuIC0gMl0udmFsdWUgKz0gbGFzdENvbXBvbmVudC52YWx1ZTtcbiAgICBjb21wb25lbnRzLnBvcCgpO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudHM7XG59XG5cbmZ1bmN0aW9uIGNsb25lUGF0aChwYXRoKSB7XG4gIHJldHVybiB7XG4gICAgbmV3UG9zOiBwYXRoLm5ld1BvcyxcbiAgICBjb21wb25lbnRzOiBwYXRoLmNvbXBvbmVudHMuc2xpY2UoMClcbiAgfTtcbn1cblxudmFyIGNoYXJhY3RlckRpZmYgPSBuZXcgRGlmZigpO1xuZnVuY3Rpb24gZGlmZkNoYXJzKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKSB7XG4gIHJldHVybiBjaGFyYWN0ZXJEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZU9wdGlvbnMob3B0aW9ucywgZGVmYXVsdHMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZGVmYXVsdHMuY2FsbGJhY2sgPSBvcHRpb25zO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBkZWZhdWx0c1tuYW1lXSA9IG9wdGlvbnNbbmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRzO1xufVxuXG4vL1xuLy8gUmFuZ2VzIGFuZCBleGNlcHRpb25zOlxuLy8gTGF0aW4tMSBTdXBwbGVtZW50LCAwMDgw4oCTMDBGRlxuLy8gIC0gVSswMEQ3ICDDlyBNdWx0aXBsaWNhdGlvbiBzaWduXG4vLyAgLSBVKzAwRjcgIMO3IERpdmlzaW9uIHNpZ25cbi8vIExhdGluIEV4dGVuZGVkLUEsIDAxMDDigJMwMTdGXG4vLyBMYXRpbiBFeHRlbmRlZC1CLCAwMTgw4oCTMDI0RlxuLy8gSVBBIEV4dGVuc2lvbnMsIDAyNTDigJMwMkFGXG4vLyBTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMsIDAyQjDigJMwMkZGXG4vLyAgLSBVKzAyQzcgIMuHICYjNzExOyAgQ2Fyb25cbi8vICAtIFUrMDJEOCAgy5ggJiM3Mjg7ICBCcmV2ZVxuLy8gIC0gVSswMkQ5ICDLmSAmIzcyOTsgIERvdCBBYm92ZVxuLy8gIC0gVSswMkRBICDLmiAmIzczMDsgIFJpbmcgQWJvdmVcbi8vICAtIFUrMDJEQiAgy5sgJiM3MzE7ICBPZ29uZWtcbi8vICAtIFUrMDJEQyAgy5wgJiM3MzI7ICBTbWFsbCBUaWxkZVxuLy8gIC0gVSswMkREICDLnSAmIzczMzsgIERvdWJsZSBBY3V0ZSBBY2NlbnRcbi8vIExhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwsIDFFMDDigJMxRUZGXG5cbnZhciBleHRlbmRlZFdvcmRDaGFycyA9IC9eW0EtWmEtelxceEMwLVxcdTAyQzZcXHUwMkM4LVxcdTAyRDdcXHUwMkRFLVxcdTAyRkZcXHUxRTAwLVxcdTFFRkZdKyQvO1xudmFyIHJlV2hpdGVzcGFjZSA9IC9cXFMvO1xudmFyIHdvcmREaWZmID0gbmV3IERpZmYoKTtcblxud29yZERpZmYuZXF1YWxzID0gZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlQ2FzZSkge1xuICAgIGxlZnQgPSBsZWZ0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmlnaHQgPSByaWdodC50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0IHx8IHRoaXMub3B0aW9ucy5pZ25vcmVXaGl0ZXNwYWNlICYmICFyZVdoaXRlc3BhY2UudGVzdChsZWZ0KSAmJiAhcmVXaGl0ZXNwYWNlLnRlc3QocmlnaHQpO1xufTtcblxud29yZERpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgLy8gQWxsIHdoaXRlc3BhY2Ugc3ltYm9scyBleGNlcHQgbmV3bGluZSBncm91cCBpbnRvIG9uZSB0b2tlbiwgZWFjaCBuZXdsaW5lIC0gaW4gc2VwYXJhdGUgdG9rZW5cbiAgdmFyIHRva2VucyA9IHZhbHVlLnNwbGl0KC8oW15cXFNcXHJcXG5dK3xbKClbXFxde30nXCJcXHJcXG5dfFxcYikvKTsgLy8gSm9pbiB0aGUgYm91bmRhcnkgc3BsaXRzIHRoYXQgd2UgZG8gbm90IGNvbnNpZGVyIHRvIGJlIGJvdW5kYXJpZXMuIFRoaXMgaXMgcHJpbWFyaWx5IHRoZSBleHRlbmRlZCBMYXRpbiBjaGFyYWN0ZXIgc2V0LlxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIC8vIElmIHdlIGhhdmUgYW4gZW1wdHkgc3RyaW5nIGluIHRoZSBuZXh0IGZpZWxkIGFuZCB3ZSBoYXZlIG9ubHkgd29yZCBjaGFycyBiZWZvcmUgYW5kIGFmdGVyLCBtZXJnZVxuICAgIGlmICghdG9rZW5zW2kgKyAxXSAmJiB0b2tlbnNbaSArIDJdICYmIGV4dGVuZGVkV29yZENoYXJzLnRlc3QodG9rZW5zW2ldKSAmJiBleHRlbmRlZFdvcmRDaGFycy50ZXN0KHRva2Vuc1tpICsgMl0pKSB7XG4gICAgICB0b2tlbnNbaV0gKz0gdG9rZW5zW2kgKyAyXTtcbiAgICAgIHRva2Vucy5zcGxpY2UoaSArIDEsIDIpO1xuICAgICAgaS0tO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59O1xuXG5mdW5jdGlvbiBkaWZmV29yZHMob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IGdlbmVyYXRlT3B0aW9ucyhvcHRpb25zLCB7XG4gICAgaWdub3JlV2hpdGVzcGFjZTogdHJ1ZVxuICB9KTtcbiAgcmV0dXJuIHdvcmREaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gZGlmZldvcmRzV2l0aFNwYWNlKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKSB7XG4gIHJldHVybiB3b3JkRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbn1cblxudmFyIGxpbmVEaWZmID0gbmV3IERpZmYoKTtcblxubGluZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHJldExpbmVzID0gW10sXG4gICAgICBsaW5lc0FuZE5ld2xpbmVzID0gdmFsdWUuc3BsaXQoLyhcXG58XFxyXFxuKS8pOyAvLyBJZ25vcmUgdGhlIGZpbmFsIGVtcHR5IHRva2VuIHRoYXQgb2NjdXJzIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGEgbmV3IGxpbmVcblxuICBpZiAoIWxpbmVzQW5kTmV3bGluZXNbbGluZXNBbmROZXdsaW5lcy5sZW5ndGggLSAxXSkge1xuICAgIGxpbmVzQW5kTmV3bGluZXMucG9wKCk7XG4gIH0gLy8gTWVyZ2UgdGhlIGNvbnRlbnQgYW5kIGxpbmUgc2VwYXJhdG9ycyBpbnRvIHNpbmdsZSB0b2tlbnNcblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXNBbmROZXdsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBsaW5lID0gbGluZXNBbmROZXdsaW5lc1tpXTtcblxuICAgIGlmIChpICUgMiAmJiAhdGhpcy5vcHRpb25zLm5ld2xpbmVJc1Rva2VuKSB7XG4gICAgICByZXRMaW5lc1tyZXRMaW5lcy5sZW5ndGggLSAxXSArPSBsaW5lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UpIHtcbiAgICAgICAgbGluZSA9IGxpbmUudHJpbSgpO1xuICAgICAgfVxuXG4gICAgICByZXRMaW5lcy5wdXNoKGxpbmUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXRMaW5lcztcbn07XG5cbmZ1bmN0aW9uIGRpZmZMaW5lcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGxpbmVEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIGRpZmZUcmltbWVkTGluZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG4gIHZhciBvcHRpb25zID0gZ2VuZXJhdGVPcHRpb25zKGNhbGxiYWNrLCB7XG4gICAgaWdub3JlV2hpdGVzcGFjZTogdHJ1ZVxuICB9KTtcbiAgcmV0dXJuIGxpbmVEaWZmLmRpZmYob2xkU3RyLCBuZXdTdHIsIG9wdGlvbnMpO1xufVxuXG52YXIgc2VudGVuY2VEaWZmID0gbmV3IERpZmYoKTtcblxuc2VudGVuY2VEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5zcGxpdCgvKFxcUy4rP1suIT9dKSg/PVxccyt8JCkvKTtcbn07XG5cbmZ1bmN0aW9uIGRpZmZTZW50ZW5jZXMob2xkU3RyLCBuZXdTdHIsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBzZW50ZW5jZURpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spO1xufVxuXG52YXIgY3NzRGlmZiA9IG5ldyBEaWZmKCk7XG5cbmNzc0RpZmYudG9rZW5pemUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnNwbGl0KC8oW3t9OjssXXxcXHMrKS8pO1xufTtcblxuZnVuY3Rpb24gZGlmZkNzcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGNzc0RpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7XG4gIHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgcmV0dXJuIGFycjI7XG59XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbnZhciBvYmplY3RQcm90b3R5cGVUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIganNvbkRpZmYgPSBuZXcgRGlmZigpOyAvLyBEaXNjcmltaW5hdGUgYmV0d2VlbiB0d28gbGluZXMgb2YgcHJldHR5LXByaW50ZWQsIHNlcmlhbGl6ZWQgSlNPTiB3aGVyZSBvbmUgb2YgdGhlbSBoYXMgYVxuLy8gZGFuZ2xpbmcgY29tbWEgYW5kIHRoZSBvdGhlciBkb2Vzbid0LiBUdXJucyBvdXQgaW5jbHVkaW5nIHRoZSBkYW5nbGluZyBjb21tYSB5aWVsZHMgdGhlIG5pY2VzdCBvdXRwdXQ6XG5cbmpzb25EaWZmLnVzZUxvbmdlc3RUb2tlbiA9IHRydWU7XG5qc29uRGlmZi50b2tlbml6ZSA9IGxpbmVEaWZmLnRva2VuaXplO1xuXG5qc29uRGlmZi5jYXN0SW5wdXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICB1bmRlZmluZWRSZXBsYWNlbWVudCA9IF90aGlzJG9wdGlvbnMudW5kZWZpbmVkUmVwbGFjZW1lbnQsXG4gICAgICBfdGhpcyRvcHRpb25zJHN0cmluZ2kgPSBfdGhpcyRvcHRpb25zLnN0cmluZ2lmeVJlcGxhY2VyLFxuICAgICAgc3RyaW5naWZ5UmVwbGFjZXIgPSBfdGhpcyRvcHRpb25zJHN0cmluZ2kgPT09IHZvaWQgMCA/IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZFJlcGxhY2VtZW50IDogdjtcbiAgfSA6IF90aGlzJG9wdGlvbnMkc3RyaW5naTtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KGNhbm9uaWNhbGl6ZSh2YWx1ZSwgbnVsbCwgbnVsbCwgc3RyaW5naWZ5UmVwbGFjZXIpLCBzdHJpbmdpZnlSZXBsYWNlciwgJyAgJyk7XG59O1xuXG5qc29uRGlmZi5lcXVhbHMgPSBmdW5jdGlvbiAobGVmdCwgcmlnaHQpIHtcbiAgcmV0dXJuIERpZmYucHJvdG90eXBlLmVxdWFscy5jYWxsKGpzb25EaWZmLCBsZWZ0LnJlcGxhY2UoLywoW1xcclxcbl0pL2csICckMScpLCByaWdodC5yZXBsYWNlKC8sKFtcXHJcXG5dKS9nLCAnJDEnKSk7XG59O1xuXG5mdW5jdGlvbiBkaWZmSnNvbihvbGRPYmosIG5ld09iaiwgb3B0aW9ucykge1xuICByZXR1cm4ganNvbkRpZmYuZGlmZihvbGRPYmosIG5ld09iaiwgb3B0aW9ucyk7XG59IC8vIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgcHJlc2VuY2Ugb2YgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBiYWlsaW5nIG91dCB3aGVuIGVuY291bnRlcmluZyBhblxuLy8gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgXCJzdGFja1wiIG9mIGl0ZW1zIGJlaW5nIHByb2Nlc3NlZC4gQWNjZXB0cyBhbiBvcHRpb25hbCByZXBsYWNlclxuXG5mdW5jdGlvbiBjYW5vbmljYWxpemUob2JqLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjaywgcmVwbGFjZXIsIGtleSkge1xuICBzdGFjayA9IHN0YWNrIHx8IFtdO1xuICByZXBsYWNlbWVudFN0YWNrID0gcmVwbGFjZW1lbnRTdGFjayB8fCBbXTtcblxuICBpZiAocmVwbGFjZXIpIHtcbiAgICBvYmogPSByZXBsYWNlcihrZXksIG9iaik7XG4gIH1cblxuICB2YXIgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoc3RhY2tbaV0gPT09IG9iaikge1xuICAgICAgcmV0dXJuIHJlcGxhY2VtZW50U3RhY2tbaV07XG4gICAgfVxuICB9XG5cbiAgdmFyIGNhbm9uaWNhbGl6ZWRPYmo7XG5cbiAgaWYgKCdbb2JqZWN0IEFycmF5XScgPT09IG9iamVjdFByb3RvdHlwZVRvU3RyaW5nLmNhbGwob2JqKSkge1xuICAgIHN0YWNrLnB1c2gob2JqKTtcbiAgICBjYW5vbmljYWxpemVkT2JqID0gbmV3IEFycmF5KG9iai5sZW5ndGgpO1xuICAgIHJlcGxhY2VtZW50U3RhY2sucHVzaChjYW5vbmljYWxpemVkT2JqKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGNhbm9uaWNhbGl6ZWRPYmpbaV0gPSBjYW5vbmljYWxpemUob2JqW2ldLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjaywgcmVwbGFjZXIsIGtleSk7XG4gICAgfVxuXG4gICAgc3RhY2sucG9wKCk7XG4gICAgcmVwbGFjZW1lbnRTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gY2Fub25pY2FsaXplZE9iajtcbiAgfVxuXG4gIGlmIChvYmogJiYgb2JqLnRvSlNPTikge1xuICAgIG9iaiA9IG9iai50b0pTT04oKTtcbiAgfVxuXG4gIGlmIChfdHlwZW9mKG9iaikgPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkge1xuICAgIHN0YWNrLnB1c2gob2JqKTtcbiAgICBjYW5vbmljYWxpemVkT2JqID0ge307XG4gICAgcmVwbGFjZW1lbnRTdGFjay5wdXNoKGNhbm9uaWNhbGl6ZWRPYmopO1xuXG4gICAgdmFyIHNvcnRlZEtleXMgPSBbXSxcbiAgICAgICAgX2tleTtcblxuICAgIGZvciAoX2tleSBpbiBvYmopIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KF9rZXkpKSB7XG4gICAgICAgIHNvcnRlZEtleXMucHVzaChfa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzb3J0ZWRLZXlzLnNvcnQoKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3J0ZWRLZXlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBfa2V5ID0gc29ydGVkS2V5c1tpXTtcbiAgICAgIGNhbm9uaWNhbGl6ZWRPYmpbX2tleV0gPSBjYW5vbmljYWxpemUob2JqW19rZXldLCBzdGFjaywgcmVwbGFjZW1lbnRTdGFjaywgcmVwbGFjZXIsIF9rZXkpO1xuICAgIH1cblxuICAgIHN0YWNrLnBvcCgpO1xuICAgIHJlcGxhY2VtZW50U3RhY2sucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgY2Fub25pY2FsaXplZE9iaiA9IG9iajtcbiAgfVxuXG4gIHJldHVybiBjYW5vbmljYWxpemVkT2JqO1xufVxuXG52YXIgYXJyYXlEaWZmID0gbmV3IERpZmYoKTtcblxuYXJyYXlEaWZmLnRva2VuaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5zbGljZSgpO1xufTtcblxuYXJyYXlEaWZmLmpvaW4gPSBhcnJheURpZmYucmVtb3ZlRW1wdHkgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuZnVuY3Rpb24gZGlmZkFycmF5cyhvbGRBcnIsIG5ld0FyciwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGFycmF5RGlmZi5kaWZmKG9sZEFyciwgbmV3QXJyLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGF0Y2godW5pRGlmZikge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhciBkaWZmc3RyID0gdW5pRGlmZi5zcGxpdCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vKSxcbiAgICAgIGRlbGltaXRlcnMgPSB1bmlEaWZmLm1hdGNoKC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS9nKSB8fCBbXSxcbiAgICAgIGxpc3QgPSBbXSxcbiAgICAgIGkgPSAwO1xuXG4gIGZ1bmN0aW9uIHBhcnNlSW5kZXgoKSB7XG4gICAgdmFyIGluZGV4ID0ge307XG4gICAgbGlzdC5wdXNoKGluZGV4KTsgLy8gUGFyc2UgZGlmZiBtZXRhZGF0YVxuXG4gICAgd2hpbGUgKGkgPCBkaWZmc3RyLmxlbmd0aCkge1xuICAgICAgdmFyIGxpbmUgPSBkaWZmc3RyW2ldOyAvLyBGaWxlIGhlYWRlciBmb3VuZCwgZW5kIHBhcnNpbmcgZGlmZiBtZXRhZGF0YVxuXG4gICAgICBpZiAoL14oXFwtXFwtXFwtfFxcK1xcK1xcK3xAQClcXHMvLnRlc3QobGluZSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIERpZmYgaW5kZXhcblxuXG4gICAgICB2YXIgaGVhZGVyID0gL14oPzpJbmRleDp8ZGlmZig/OiAtciBcXHcrKSspXFxzKyguKz8pXFxzKiQvLmV4ZWMobGluZSk7XG5cbiAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgaW5kZXguaW5kZXggPSBoZWFkZXJbMV07XG4gICAgICB9XG5cbiAgICAgIGkrKztcbiAgICB9IC8vIFBhcnNlIGZpbGUgaGVhZGVycyBpZiB0aGV5IGFyZSBkZWZpbmVkLiBVbmlmaWVkIGRpZmYgcmVxdWlyZXMgdGhlbSwgYnV0XG4gICAgLy8gdGhlcmUncyBubyB0ZWNobmljYWwgaXNzdWVzIHRvIGhhdmUgYW4gaXNvbGF0ZWQgaHVuayB3aXRob3V0IGZpbGUgaGVhZGVyXG5cblxuICAgIHBhcnNlRmlsZUhlYWRlcihpbmRleCk7XG4gICAgcGFyc2VGaWxlSGVhZGVyKGluZGV4KTsgLy8gUGFyc2UgaHVua3NcblxuICAgIGluZGV4Lmh1bmtzID0gW107XG5cbiAgICB3aGlsZSAoaSA8IGRpZmZzdHIubGVuZ3RoKSB7XG4gICAgICB2YXIgX2xpbmUgPSBkaWZmc3RyW2ldO1xuXG4gICAgICBpZiAoL14oSW5kZXg6fGRpZmZ8XFwtXFwtXFwtfFxcK1xcK1xcKylcXHMvLnRlc3QoX2xpbmUpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICgvXkBALy50ZXN0KF9saW5lKSkge1xuICAgICAgICBpbmRleC5odW5rcy5wdXNoKHBhcnNlSHVuaygpKTtcbiAgICAgIH0gZWxzZSBpZiAoX2xpbmUgJiYgb3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgICAgLy8gSWdub3JlIHVuZXhwZWN0ZWQgY29udGVudCB1bmxlc3MgaW4gc3RyaWN0IG1vZGVcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxpbmUgJyArIChpICsgMSkgKyAnICcgKyBKU09OLnN0cmluZ2lmeShfbGluZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBQYXJzZXMgdGhlIC0tLSBhbmQgKysrIGhlYWRlcnMsIGlmIG5vbmUgYXJlIGZvdW5kLCBubyBsaW5lc1xuICAvLyBhcmUgY29uc3VtZWQuXG5cblxuICBmdW5jdGlvbiBwYXJzZUZpbGVIZWFkZXIoaW5kZXgpIHtcbiAgICB2YXIgZmlsZUhlYWRlciA9IC9eKC0tLXxcXCtcXCtcXCspXFxzKyguKikkLy5leGVjKGRpZmZzdHJbaV0pO1xuXG4gICAgaWYgKGZpbGVIZWFkZXIpIHtcbiAgICAgIHZhciBrZXlQcmVmaXggPSBmaWxlSGVhZGVyWzFdID09PSAnLS0tJyA/ICdvbGQnIDogJ25ldyc7XG4gICAgICB2YXIgZGF0YSA9IGZpbGVIZWFkZXJbMl0uc3BsaXQoJ1xcdCcsIDIpO1xuICAgICAgdmFyIGZpbGVOYW1lID0gZGF0YVswXS5yZXBsYWNlKC9cXFxcXFxcXC9nLCAnXFxcXCcpO1xuXG4gICAgICBpZiAoL15cIi4qXCIkLy50ZXN0KGZpbGVOYW1lKSkge1xuICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnN1YnN0cigxLCBmaWxlTmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIH1cblxuICAgICAgaW5kZXhba2V5UHJlZml4ICsgJ0ZpbGVOYW1lJ10gPSBmaWxlTmFtZTtcbiAgICAgIGluZGV4W2tleVByZWZpeCArICdIZWFkZXInXSA9IChkYXRhWzFdIHx8ICcnKS50cmltKCk7XG4gICAgICBpKys7XG4gICAgfVxuICB9IC8vIFBhcnNlcyBhIGh1bmtcbiAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgd2UgYXJlIGF0IHRoZSBzdGFydCBvZiBhIGh1bmsuXG5cblxuICBmdW5jdGlvbiBwYXJzZUh1bmsoKSB7XG4gICAgdmFyIGNodW5rSGVhZGVySW5kZXggPSBpLFxuICAgICAgICBjaHVua0hlYWRlckxpbmUgPSBkaWZmc3RyW2krK10sXG4gICAgICAgIGNodW5rSGVhZGVyID0gY2h1bmtIZWFkZXJMaW5lLnNwbGl0KC9AQCAtKFxcZCspKD86LChcXGQrKSk/IFxcKyhcXGQrKSg/OiwoXFxkKykpPyBAQC8pO1xuICAgIHZhciBodW5rID0ge1xuICAgICAgb2xkU3RhcnQ6ICtjaHVua0hlYWRlclsxXSxcbiAgICAgIG9sZExpbmVzOiB0eXBlb2YgY2h1bmtIZWFkZXJbMl0gPT09ICd1bmRlZmluZWQnID8gMSA6ICtjaHVua0hlYWRlclsyXSxcbiAgICAgIG5ld1N0YXJ0OiArY2h1bmtIZWFkZXJbM10sXG4gICAgICBuZXdMaW5lczogdHlwZW9mIGNodW5rSGVhZGVyWzRdID09PSAndW5kZWZpbmVkJyA/IDEgOiArY2h1bmtIZWFkZXJbNF0sXG4gICAgICBsaW5lczogW10sXG4gICAgICBsaW5lZGVsaW1pdGVyczogW11cbiAgICB9OyAvLyBVbmlmaWVkIERpZmYgRm9ybWF0IHF1aXJrOiBJZiB0aGUgY2h1bmsgc2l6ZSBpcyAwLFxuICAgIC8vIHRoZSBmaXJzdCBudW1iZXIgaXMgb25lIGxvd2VyIHRoYW4gb25lIHdvdWxkIGV4cGVjdC5cbiAgICAvLyBodHRwczovL3d3dy5hcnRpbWEuY29tL3dlYmxvZ3Mvdmlld3Bvc3QuanNwP3RocmVhZD0xNjQyOTNcblxuICAgIGlmIChodW5rLm9sZExpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm9sZFN0YXJ0ICs9IDE7XG4gICAgfVxuXG4gICAgaWYgKGh1bmsubmV3TGluZXMgPT09IDApIHtcbiAgICAgIGh1bmsubmV3U3RhcnQgKz0gMTtcbiAgICB9XG5cbiAgICB2YXIgYWRkQ291bnQgPSAwLFxuICAgICAgICByZW1vdmVDb3VudCA9IDA7XG5cbiAgICBmb3IgKDsgaSA8IGRpZmZzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIExpbmVzIHN0YXJ0aW5nIHdpdGggJy0tLScgY291bGQgYmUgbWlzdGFrZW4gZm9yIHRoZSBcInJlbW92ZSBsaW5lXCIgb3BlcmF0aW9uXG4gICAgICAvLyBCdXQgdGhleSBjb3VsZCBiZSB0aGUgaGVhZGVyIGZvciB0aGUgbmV4dCBmaWxlLiBUaGVyZWZvcmUgcHJ1bmUgc3VjaCBjYXNlcyBvdXQuXG4gICAgICBpZiAoZGlmZnN0cltpXS5pbmRleE9mKCctLS0gJykgPT09IDAgJiYgaSArIDIgPCBkaWZmc3RyLmxlbmd0aCAmJiBkaWZmc3RyW2kgKyAxXS5pbmRleE9mKCcrKysgJykgPT09IDAgJiYgZGlmZnN0cltpICsgMl0uaW5kZXhPZignQEAnKSA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmFyIG9wZXJhdGlvbiA9IGRpZmZzdHJbaV0ubGVuZ3RoID09IDAgJiYgaSAhPSBkaWZmc3RyLmxlbmd0aCAtIDEgPyAnICcgOiBkaWZmc3RyW2ldWzBdO1xuXG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnKycgfHwgb3BlcmF0aW9uID09PSAnLScgfHwgb3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnXFxcXCcpIHtcbiAgICAgICAgaHVuay5saW5lcy5wdXNoKGRpZmZzdHJbaV0pO1xuICAgICAgICBodW5rLmxpbmVkZWxpbWl0ZXJzLnB1c2goZGVsaW1pdGVyc1tpXSB8fCAnXFxuJyk7XG5cbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgICAgYWRkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnICcpIHtcbiAgICAgICAgICBhZGRDb3VudCsrO1xuICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gLy8gSGFuZGxlIHRoZSBlbXB0eSBibG9jayBjb3VudCBjYXNlXG5cblxuICAgIGlmICghYWRkQ291bnQgJiYgaHVuay5uZXdMaW5lcyA9PT0gMSkge1xuICAgICAgaHVuay5uZXdMaW5lcyA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCFyZW1vdmVDb3VudCAmJiBodW5rLm9sZExpbmVzID09PSAxKSB7XG4gICAgICBodW5rLm9sZExpbmVzID0gMDtcbiAgICB9IC8vIFBlcmZvcm0gb3B0aW9uYWwgc2FuaXR5IGNoZWNraW5nXG5cblxuICAgIGlmIChvcHRpb25zLnN0cmljdCkge1xuICAgICAgaWYgKGFkZENvdW50ICE9PSBodW5rLm5ld0xpbmVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQWRkZWQgbGluZSBjb3VudCBkaWQgbm90IG1hdGNoIGZvciBodW5rIGF0IGxpbmUgJyArIChjaHVua0hlYWRlckluZGV4ICsgMSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVtb3ZlQ291bnQgIT09IGh1bmsub2xkTGluZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZW1vdmVkIGxpbmUgY291bnQgZGlkIG5vdCBtYXRjaCBmb3IgaHVuayBhdCBsaW5lICcgKyAoY2h1bmtIZWFkZXJJbmRleCArIDEpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaHVuaztcbiAgfVxuXG4gIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICBwYXJzZUluZGV4KCk7XG4gIH1cblxuICByZXR1cm4gbGlzdDtcbn1cblxuLy8gSXRlcmF0b3IgdGhhdCB0cmF2ZXJzZXMgaW4gdGhlIHJhbmdlIG9mIFttaW4sIG1heF0sIHN0ZXBwaW5nXG4vLyBieSBkaXN0YW5jZSBmcm9tIGEgZ2l2ZW4gc3RhcnQgcG9zaXRpb24uIEkuZS4gZm9yIFswLCA0XSwgd2l0aFxuLy8gc3RhcnQgb2YgMiwgdGhpcyB3aWxsIGl0ZXJhdGUgMiwgMywgMSwgNCwgMC5cbmZ1bmN0aW9uIGRpc3RhbmNlSXRlcmF0b3IgKHN0YXJ0LCBtaW5MaW5lLCBtYXhMaW5lKSB7XG4gIHZhciB3YW50Rm9yd2FyZCA9IHRydWUsXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgbG9jYWxPZmZzZXQgPSAxO1xuICByZXR1cm4gZnVuY3Rpb24gaXRlcmF0b3IoKSB7XG4gICAgaWYgKHdhbnRGb3J3YXJkICYmICFmb3J3YXJkRXhoYXVzdGVkKSB7XG4gICAgICBpZiAoYmFja3dhcmRFeGhhdXN0ZWQpIHtcbiAgICAgICAgbG9jYWxPZmZzZXQrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhbnRGb3J3YXJkID0gZmFsc2U7XG4gICAgICB9IC8vIENoZWNrIGlmIHRyeWluZyB0byBmaXQgYmV5b25kIHRleHQgbGVuZ3RoLCBhbmQgaWYgbm90LCBjaGVjayBpdCBmaXRzXG4gICAgICAvLyBhZnRlciBvZmZzZXQgbG9jYXRpb24gKG9yIGRlc2lyZWQgbG9jYXRpb24gb24gZmlyc3QgaXRlcmF0aW9uKVxuXG5cbiAgICAgIGlmIChzdGFydCArIGxvY2FsT2Zmc2V0IDw9IG1heExpbmUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBmb3J3YXJkRXhoYXVzdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWJhY2t3YXJkRXhoYXVzdGVkKSB7XG4gICAgICBpZiAoIWZvcndhcmRFeGhhdXN0ZWQpIHtcbiAgICAgICAgd2FudEZvcndhcmQgPSB0cnVlO1xuICAgICAgfSAvLyBDaGVjayBpZiB0cnlpbmcgdG8gZml0IGJlZm9yZSB0ZXh0IGJlZ2lubmluZywgYW5kIGlmIG5vdCwgY2hlY2sgaXQgZml0c1xuICAgICAgLy8gYmVmb3JlIG9mZnNldCBsb2NhdGlvblxuXG5cbiAgICAgIGlmIChtaW5MaW5lIDw9IHN0YXJ0IC0gbG9jYWxPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIC1sb2NhbE9mZnNldCsrO1xuICAgICAgfVxuXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IHRydWU7XG4gICAgICByZXR1cm4gaXRlcmF0b3IoKTtcbiAgICB9IC8vIFdlIHRyaWVkIHRvIGZpdCBodW5rIGJlZm9yZSB0ZXh0IGJlZ2lubmluZyBhbmQgYmV5b25kIHRleHQgbGVuZ3RoLCB0aGVuXG4gICAgLy8gaHVuayBjYW4ndCBmaXQgb24gdGhlIHRleHQuIFJldHVybiB1bmRlZmluZWRcblxuICB9O1xufVxuXG5mdW5jdGlvbiBhcHBseVBhdGNoKHNvdXJjZSwgdW5pRGlmZikge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG5cbiAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuICAgIHVuaURpZmYgPSBwYXJzZVBhdGNoKHVuaURpZmYpO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodW5pRGlmZikpIHtcbiAgICBpZiAodW5pRGlmZi5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FwcGx5UGF0Y2ggb25seSB3b3JrcyB3aXRoIGEgc2luZ2xlIGlucHV0LicpO1xuICAgIH1cblxuICAgIHVuaURpZmYgPSB1bmlEaWZmWzBdO1xuICB9IC8vIEFwcGx5IHRoZSBkaWZmIHRvIHRoZSBpbnB1dFxuXG5cbiAgdmFyIGxpbmVzID0gc291cmNlLnNwbGl0KC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS8pLFxuICAgICAgZGVsaW1pdGVycyA9IHNvdXJjZS5tYXRjaCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vZykgfHwgW10sXG4gICAgICBodW5rcyA9IHVuaURpZmYuaHVua3MsXG4gICAgICBjb21wYXJlTGluZSA9IG9wdGlvbnMuY29tcGFyZUxpbmUgfHwgZnVuY3Rpb24gKGxpbmVOdW1iZXIsIGxpbmUsIG9wZXJhdGlvbiwgcGF0Y2hDb250ZW50KSB7XG4gICAgcmV0dXJuIGxpbmUgPT09IHBhdGNoQ29udGVudDtcbiAgfSxcbiAgICAgIGVycm9yQ291bnQgPSAwLFxuICAgICAgZnV6ekZhY3RvciA9IG9wdGlvbnMuZnV6ekZhY3RvciB8fCAwLFxuICAgICAgbWluTGluZSA9IDAsXG4gICAgICBvZmZzZXQgPSAwLFxuICAgICAgcmVtb3ZlRU9GTkwsXG4gICAgICBhZGRFT0ZOTDtcbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgaHVuayBleGFjdGx5IGZpdHMgb24gdGhlIHByb3ZpZGVkIGxvY2F0aW9uXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gaHVua0ZpdHMoaHVuaywgdG9Qb3MpIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGh1bmsubGluZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBsaW5lID0gaHVuay5saW5lc1tqXSxcbiAgICAgICAgICBvcGVyYXRpb24gPSBsaW5lLmxlbmd0aCA+IDAgPyBsaW5lWzBdIDogJyAnLFxuICAgICAgICAgIGNvbnRlbnQgPSBsaW5lLmxlbmd0aCA+IDAgPyBsaW5lLnN1YnN0cigxKSA6IGxpbmU7XG5cbiAgICAgIGlmIChvcGVyYXRpb24gPT09ICcgJyB8fCBvcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAvLyBDb250ZXh0IHNhbml0eSBjaGVja1xuICAgICAgICBpZiAoIWNvbXBhcmVMaW5lKHRvUG9zICsgMSwgbGluZXNbdG9Qb3NdLCBvcGVyYXRpb24sIGNvbnRlbnQpKSB7XG4gICAgICAgICAgZXJyb3JDb3VudCsrO1xuXG4gICAgICAgICAgaWYgKGVycm9yQ291bnQgPiBmdXp6RmFjdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdG9Qb3MrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBTZWFyY2ggYmVzdCBmaXQgb2Zmc2V0cyBmb3IgZWFjaCBodW5rIGJhc2VkIG9uIHRoZSBwcmV2aW91cyBvbmVzXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGh1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGh1bmsgPSBodW5rc1tpXSxcbiAgICAgICAgbWF4TGluZSA9IGxpbmVzLmxlbmd0aCAtIGh1bmsub2xkTGluZXMsXG4gICAgICAgIGxvY2FsT2Zmc2V0ID0gMCxcbiAgICAgICAgdG9Qb3MgPSBvZmZzZXQgKyBodW5rLm9sZFN0YXJ0IC0gMTtcbiAgICB2YXIgaXRlcmF0b3IgPSBkaXN0YW5jZUl0ZXJhdG9yKHRvUG9zLCBtaW5MaW5lLCBtYXhMaW5lKTtcblxuICAgIGZvciAoOyBsb2NhbE9mZnNldCAhPT0gdW5kZWZpbmVkOyBsb2NhbE9mZnNldCA9IGl0ZXJhdG9yKCkpIHtcbiAgICAgIGlmIChodW5rRml0cyhodW5rLCB0b1BvcyArIGxvY2FsT2Zmc2V0KSkge1xuICAgICAgICBodW5rLm9mZnNldCA9IG9mZnNldCArPSBsb2NhbE9mZnNldDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxvY2FsT2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIFNldCBsb3dlciB0ZXh0IGxpbWl0IHRvIGVuZCBvZiB0aGUgY3VycmVudCBodW5rLCBzbyBuZXh0IG9uZXMgZG9uJ3QgdHJ5XG4gICAgLy8gdG8gZml0IG92ZXIgYWxyZWFkeSBwYXRjaGVkIHRleHRcblxuXG4gICAgbWluTGluZSA9IGh1bmsub2Zmc2V0ICsgaHVuay5vbGRTdGFydCArIGh1bmsub2xkTGluZXM7XG4gIH0gLy8gQXBwbHkgcGF0Y2ggaHVua3NcblxuXG4gIHZhciBkaWZmT2Zmc2V0ID0gMDtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgaHVua3MubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIF9odW5rID0gaHVua3NbX2ldLFxuICAgICAgICBfdG9Qb3MgPSBfaHVuay5vbGRTdGFydCArIF9odW5rLm9mZnNldCArIGRpZmZPZmZzZXQgLSAxO1xuXG4gICAgZGlmZk9mZnNldCArPSBfaHVuay5uZXdMaW5lcyAtIF9odW5rLm9sZExpbmVzO1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBfaHVuay5saW5lcy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIGxpbmUgPSBfaHVuay5saW5lc1tqXSxcbiAgICAgICAgICBvcGVyYXRpb24gPSBsaW5lLmxlbmd0aCA+IDAgPyBsaW5lWzBdIDogJyAnLFxuICAgICAgICAgIGNvbnRlbnQgPSBsaW5lLmxlbmd0aCA+IDAgPyBsaW5lLnN1YnN0cigxKSA6IGxpbmUsXG4gICAgICAgICAgZGVsaW1pdGVyID0gX2h1bmsubGluZWRlbGltaXRlcnNbal07XG5cbiAgICAgIGlmIChvcGVyYXRpb24gPT09ICcgJykge1xuICAgICAgICBfdG9Qb3MrKztcbiAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgbGluZXMuc3BsaWNlKF90b1BvcywgMSk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKF90b1BvcywgMSk7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZShfdG9Qb3MsIDAsIGNvbnRlbnQpO1xuICAgICAgICBkZWxpbWl0ZXJzLnNwbGljZShfdG9Qb3MsIDAsIGRlbGltaXRlcik7XG4gICAgICAgIF90b1BvcysrO1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICdcXFxcJykge1xuICAgICAgICB2YXIgcHJldmlvdXNPcGVyYXRpb24gPSBfaHVuay5saW5lc1tqIC0gMV0gPyBfaHVuay5saW5lc1tqIC0gMV1bMF0gOiBudWxsO1xuXG4gICAgICAgIGlmIChwcmV2aW91c09wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgICAgcmVtb3ZlRU9GTkwgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzT3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgICBhZGRFT0ZOTCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gSGFuZGxlIEVPRk5MIGluc2VydGlvbi9yZW1vdmFsXG5cblxuICBpZiAocmVtb3ZlRU9GTkwpIHtcbiAgICB3aGlsZSAoIWxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKSB7XG4gICAgICBsaW5lcy5wb3AoKTtcbiAgICAgIGRlbGltaXRlcnMucG9wKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFkZEVPRk5MKSB7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgZGVsaW1pdGVycy5wdXNoKCdcXG4nKTtcbiAgfVxuXG4gIGZvciAodmFyIF9rID0gMDsgX2sgPCBsaW5lcy5sZW5ndGggLSAxOyBfaysrKSB7XG4gICAgbGluZXNbX2tdID0gbGluZXNbX2tdICsgZGVsaW1pdGVyc1tfa107XG4gIH1cblxuICByZXR1cm4gbGluZXMuam9pbignJyk7XG59IC8vIFdyYXBwZXIgdGhhdCBzdXBwb3J0cyBtdWx0aXBsZSBmaWxlIHBhdGNoZXMgdmlhIGNhbGxiYWNrcy5cblxuZnVuY3Rpb24gYXBwbHlQYXRjaGVzKHVuaURpZmYsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuICAgIHVuaURpZmYgPSBwYXJzZVBhdGNoKHVuaURpZmYpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRJbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc0luZGV4KCkge1xuICAgIHZhciBpbmRleCA9IHVuaURpZmZbY3VycmVudEluZGV4KytdO1xuXG4gICAgaWYgKCFpbmRleCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBvcHRpb25zLmxvYWRGaWxlKGluZGV4LCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG4gICAgICB9XG5cbiAgICAgIHZhciB1cGRhdGVkQ29udGVudCA9IGFwcGx5UGF0Y2goZGF0YSwgaW5kZXgsIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5wYXRjaGVkKGluZGV4LCB1cGRhdGVkQ29udGVudCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2Nlc3NJbmRleCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcm9jZXNzSW5kZXgoKTtcbn1cblxuZnVuY3Rpb24gc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMuY29udGV4dCA9IDQ7XG4gIH1cblxuICB2YXIgZGlmZiA9IGRpZmZMaW5lcyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG5cbiAgaWYgKCFkaWZmKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGlmZi5wdXNoKHtcbiAgICB2YWx1ZTogJycsXG4gICAgbGluZXM6IFtdXG4gIH0pOyAvLyBBcHBlbmQgYW4gZW1wdHkgdmFsdWUgdG8gbWFrZSBjbGVhbnVwIGVhc2llclxuXG4gIGZ1bmN0aW9uIGNvbnRleHRMaW5lcyhsaW5lcykge1xuICAgIHJldHVybiBsaW5lcy5tYXAoZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICByZXR1cm4gJyAnICsgZW50cnk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgaHVua3MgPSBbXTtcbiAgdmFyIG9sZFJhbmdlU3RhcnQgPSAwLFxuICAgICAgbmV3UmFuZ2VTdGFydCA9IDAsXG4gICAgICBjdXJSYW5nZSA9IFtdLFxuICAgICAgb2xkTGluZSA9IDEsXG4gICAgICBuZXdMaW5lID0gMTtcblxuICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBkaWZmW2ldLFxuICAgICAgICBsaW5lcyA9IGN1cnJlbnQubGluZXMgfHwgY3VycmVudC52YWx1ZS5yZXBsYWNlKC9cXG4kLywgJycpLnNwbGl0KCdcXG4nKTtcbiAgICBjdXJyZW50LmxpbmVzID0gbGluZXM7XG5cbiAgICBpZiAoY3VycmVudC5hZGRlZCB8fCBjdXJyZW50LnJlbW92ZWQpIHtcbiAgICAgIHZhciBfY3VyUmFuZ2U7XG5cbiAgICAgIC8vIElmIHdlIGhhdmUgcHJldmlvdXMgY29udGV4dCwgc3RhcnQgd2l0aCB0aGF0XG4gICAgICBpZiAoIW9sZFJhbmdlU3RhcnQpIHtcbiAgICAgICAgdmFyIHByZXYgPSBkaWZmW2kgLSAxXTtcbiAgICAgICAgb2xkUmFuZ2VTdGFydCA9IG9sZExpbmU7XG4gICAgICAgIG5ld1JhbmdlU3RhcnQgPSBuZXdMaW5lO1xuXG4gICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgY3VyUmFuZ2UgPSBvcHRpb25zLmNvbnRleHQgPiAwID8gY29udGV4dExpbmVzKHByZXYubGluZXMuc2xpY2UoLW9wdGlvbnMuY29udGV4dCkpIDogW107XG4gICAgICAgICAgb2xkUmFuZ2VTdGFydCAtPSBjdXJSYW5nZS5sZW5ndGg7XG4gICAgICAgICAgbmV3UmFuZ2VTdGFydCAtPSBjdXJSYW5nZS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gT3V0cHV0IG91ciBjaGFuZ2VzXG5cblxuICAgICAgKF9jdXJSYW5nZSA9IGN1clJhbmdlKS5wdXNoLmFwcGx5KF9jdXJSYW5nZSwgX3RvQ29uc3VtYWJsZUFycmF5KGxpbmVzLm1hcChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgcmV0dXJuIChjdXJyZW50LmFkZGVkID8gJysnIDogJy0nKSArIGVudHJ5O1xuICAgICAgfSkpKTsgLy8gVHJhY2sgdGhlIHVwZGF0ZWQgZmlsZSBwb3NpdGlvblxuXG5cbiAgICAgIGlmIChjdXJyZW50LmFkZGVkKSB7XG4gICAgICAgIG5ld0xpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2xkTGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElkZW50aWNhbCBjb250ZXh0IGxpbmVzLiBUcmFjayBsaW5lIGNoYW5nZXNcbiAgICAgIGlmIChvbGRSYW5nZVN0YXJ0KSB7XG4gICAgICAgIC8vIENsb3NlIG91dCBhbnkgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBvdXRwdXQgKG9yIGpvaW4gb3ZlcmxhcHBpbmcpXG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGggPD0gb3B0aW9ucy5jb250ZXh0ICogMiAmJiBpIDwgZGlmZi5sZW5ndGggLSAyKSB7XG4gICAgICAgICAgdmFyIF9jdXJSYW5nZTI7XG5cbiAgICAgICAgICAvLyBPdmVybGFwcGluZ1xuICAgICAgICAgIChfY3VyUmFuZ2UyID0gY3VyUmFuZ2UpLnB1c2guYXBwbHkoX2N1clJhbmdlMiwgX3RvQ29uc3VtYWJsZUFycmF5KGNvbnRleHRMaW5lcyhsaW5lcykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX2N1clJhbmdlMztcblxuICAgICAgICAgIC8vIGVuZCB0aGUgcmFuZ2UgYW5kIG91dHB1dFxuICAgICAgICAgIHZhciBjb250ZXh0U2l6ZSA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgb3B0aW9ucy5jb250ZXh0KTtcblxuICAgICAgICAgIChfY3VyUmFuZ2UzID0gY3VyUmFuZ2UpLnB1c2guYXBwbHkoX2N1clJhbmdlMywgX3RvQ29uc3VtYWJsZUFycmF5KGNvbnRleHRMaW5lcyhsaW5lcy5zbGljZSgwLCBjb250ZXh0U2l6ZSkpKSk7XG5cbiAgICAgICAgICB2YXIgaHVuayA9IHtcbiAgICAgICAgICAgIG9sZFN0YXJ0OiBvbGRSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgb2xkTGluZXM6IG9sZExpbmUgLSBvbGRSYW5nZVN0YXJ0ICsgY29udGV4dFNpemUsXG4gICAgICAgICAgICBuZXdTdGFydDogbmV3UmFuZ2VTdGFydCxcbiAgICAgICAgICAgIG5ld0xpbmVzOiBuZXdMaW5lIC0gbmV3UmFuZ2VTdGFydCArIGNvbnRleHRTaXplLFxuICAgICAgICAgICAgbGluZXM6IGN1clJhbmdlXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChpID49IGRpZmYubGVuZ3RoIC0gMiAmJiBsaW5lcy5sZW5ndGggPD0gb3B0aW9ucy5jb250ZXh0KSB7XG4gICAgICAgICAgICAvLyBFT0YgaXMgaW5zaWRlIHRoaXMgaHVua1xuICAgICAgICAgICAgdmFyIG9sZEVPRk5ld2xpbmUgPSAvXFxuJC8udGVzdChvbGRTdHIpO1xuICAgICAgICAgICAgdmFyIG5ld0VPRk5ld2xpbmUgPSAvXFxuJC8udGVzdChuZXdTdHIpO1xuICAgICAgICAgICAgdmFyIG5vTmxCZWZvcmVBZGRzID0gbGluZXMubGVuZ3RoID09IDAgJiYgY3VyUmFuZ2UubGVuZ3RoID4gaHVuay5vbGRMaW5lcztcblxuICAgICAgICAgICAgaWYgKCFvbGRFT0ZOZXdsaW5lICYmIG5vTmxCZWZvcmVBZGRzICYmIG9sZFN0ci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogb2xkIGhhcyBubyBlb2wgYW5kIG5vIHRyYWlsaW5nIGNvbnRleHQ7IG5vLW5sIGNhbiBlbmQgdXAgYmVmb3JlIGFkZHNcbiAgICAgICAgICAgICAgLy8gaG93ZXZlciwgaWYgdGhlIG9sZCBmaWxlIGlzIGVtcHR5LCBkbyBub3Qgb3V0cHV0IHRoZSBuby1ubCBsaW5lXG4gICAgICAgICAgICAgIGN1clJhbmdlLnNwbGljZShodW5rLm9sZExpbmVzLCAwLCAnXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghb2xkRU9GTmV3bGluZSAmJiAhbm9ObEJlZm9yZUFkZHMgfHwgIW5ld0VPRk5ld2xpbmUpIHtcbiAgICAgICAgICAgICAgY3VyUmFuZ2UucHVzaCgnXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaHVua3MucHVzaChodW5rKTtcbiAgICAgICAgICBvbGRSYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICBjdXJSYW5nZSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG9sZExpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgfVxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGlmZi5sZW5ndGg7IGkrKykge1xuICAgIF9sb29wKGkpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvbGRGaWxlTmFtZTogb2xkRmlsZU5hbWUsXG4gICAgbmV3RmlsZU5hbWU6IG5ld0ZpbGVOYW1lLFxuICAgIG9sZEhlYWRlcjogb2xkSGVhZGVyLFxuICAgIG5ld0hlYWRlcjogbmV3SGVhZGVyLFxuICAgIGh1bmtzOiBodW5rc1xuICB9O1xufVxuZnVuY3Rpb24gZm9ybWF0UGF0Y2goZGlmZikge1xuICB2YXIgcmV0ID0gW107XG5cbiAgaWYgKGRpZmYub2xkRmlsZU5hbWUgPT0gZGlmZi5uZXdGaWxlTmFtZSkge1xuICAgIHJldC5wdXNoKCdJbmRleDogJyArIGRpZmYub2xkRmlsZU5hbWUpO1xuICB9XG5cbiAgcmV0LnB1c2goJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcbiAgcmV0LnB1c2goJy0tLSAnICsgZGlmZi5vbGRGaWxlTmFtZSArICh0eXBlb2YgZGlmZi5vbGRIZWFkZXIgPT09ICd1bmRlZmluZWQnID8gJycgOiAnXFx0JyArIGRpZmYub2xkSGVhZGVyKSk7XG4gIHJldC5wdXNoKCcrKysgJyArIGRpZmYubmV3RmlsZU5hbWUgKyAodHlwZW9mIGRpZmYubmV3SGVhZGVyID09PSAndW5kZWZpbmVkJyA/ICcnIDogJ1xcdCcgKyBkaWZmLm5ld0hlYWRlcikpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGlmZi5odW5rcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBodW5rID0gZGlmZi5odW5rc1tpXTsgLy8gVW5pZmllZCBEaWZmIEZvcm1hdCBxdWlyazogSWYgdGhlIGNodW5rIHNpemUgaXMgMCxcbiAgICAvLyB0aGUgZmlyc3QgbnVtYmVyIGlzIG9uZSBsb3dlciB0aGFuIG9uZSB3b3VsZCBleHBlY3QuXG4gICAgLy8gaHR0cHM6Ly93d3cuYXJ0aW1hLmNvbS93ZWJsb2dzL3ZpZXdwb3N0LmpzcD90aHJlYWQ9MTY0MjkzXG5cbiAgICBpZiAoaHVuay5vbGRMaW5lcyA9PT0gMCkge1xuICAgICAgaHVuay5vbGRTdGFydCAtPSAxO1xuICAgIH1cblxuICAgIGlmIChodW5rLm5ld0xpbmVzID09PSAwKSB7XG4gICAgICBodW5rLm5ld1N0YXJ0IC09IDE7XG4gICAgfVxuXG4gICAgcmV0LnB1c2goJ0BAIC0nICsgaHVuay5vbGRTdGFydCArICcsJyArIGh1bmsub2xkTGluZXMgKyAnICsnICsgaHVuay5uZXdTdGFydCArICcsJyArIGh1bmsubmV3TGluZXMgKyAnIEBAJyk7XG4gICAgcmV0LnB1c2guYXBwbHkocmV0LCBodW5rLmxpbmVzKTtcbiAgfVxuXG4gIHJldHVybiByZXQuam9pbignXFxuJykgKyAnXFxuJztcbn1cbmZ1bmN0aW9uIGNyZWF0ZVR3b0ZpbGVzUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZvcm1hdFBhdGNoKHN0cnVjdHVyZWRQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykpO1xufVxuZnVuY3Rpb24gY3JlYXRlUGF0Y2goZmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuICByZXR1cm4gY3JlYXRlVHdvRmlsZXNQYXRjaChmaWxlTmFtZSwgZmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGFycmF5RXF1YWwoYSwgYikge1xuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5U3RhcnRzV2l0aChhLCBiKTtcbn1cbmZ1bmN0aW9uIGFycmF5U3RhcnRzV2l0aChhcnJheSwgc3RhcnQpIHtcbiAgaWYgKHN0YXJ0Lmxlbmd0aCA+IGFycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhcnQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3RhcnRbaV0gIT09IGFycmF5W2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNhbGNMaW5lQ291bnQoaHVuaykge1xuICB2YXIgX2NhbGNPbGROZXdMaW5lQ291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGh1bmsubGluZXMpLFxuICAgICAgb2xkTGluZXMgPSBfY2FsY09sZE5ld0xpbmVDb3VudC5vbGRMaW5lcyxcbiAgICAgIG5ld0xpbmVzID0gX2NhbGNPbGROZXdMaW5lQ291bnQubmV3TGluZXM7XG5cbiAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBodW5rLm9sZExpbmVzID0gb2xkTGluZXM7XG4gIH0gZWxzZSB7XG4gICAgZGVsZXRlIGh1bmsub2xkTGluZXM7XG4gIH1cblxuICBpZiAobmV3TGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGh1bmsubmV3TGluZXMgPSBuZXdMaW5lcztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgaHVuay5uZXdMaW5lcztcbiAgfVxufVxuZnVuY3Rpb24gbWVyZ2UobWluZSwgdGhlaXJzLCBiYXNlKSB7XG4gIG1pbmUgPSBsb2FkUGF0Y2gobWluZSwgYmFzZSk7XG4gIHRoZWlycyA9IGxvYWRQYXRjaCh0aGVpcnMsIGJhc2UpO1xuICB2YXIgcmV0ID0ge307IC8vIEZvciBpbmRleCB3ZSBqdXN0IGxldCBpdCBwYXNzIHRocm91Z2ggYXMgaXQgZG9lc24ndCBoYXZlIGFueSBuZWNlc3NhcnkgbWVhbmluZy5cbiAgLy8gTGVhdmluZyBzYW5pdHkgY2hlY2tzIG9uIHRoaXMgdG8gdGhlIEFQSSBjb25zdW1lciB0aGF0IG1heSBrbm93IG1vcmUgYWJvdXQgdGhlXG4gIC8vIG1lYW5pbmcgaW4gdGhlaXIgb3duIGNvbnRleHQuXG5cbiAgaWYgKG1pbmUuaW5kZXggfHwgdGhlaXJzLmluZGV4KSB7XG4gICAgcmV0LmluZGV4ID0gbWluZS5pbmRleCB8fCB0aGVpcnMuaW5kZXg7XG4gIH1cblxuICBpZiAobWluZS5uZXdGaWxlTmFtZSB8fCB0aGVpcnMubmV3RmlsZU5hbWUpIHtcbiAgICBpZiAoIWZpbGVOYW1lQ2hhbmdlZChtaW5lKSkge1xuICAgICAgLy8gTm8gaGVhZGVyIG9yIG5vIGNoYW5nZSBpbiBvdXJzLCB1c2UgdGhlaXJzIChhbmQgb3VycyBpZiB0aGVpcnMgZG9lcyBub3QgZXhpc3QpXG4gICAgICByZXQub2xkRmlsZU5hbWUgPSB0aGVpcnMub2xkRmlsZU5hbWUgfHwgbWluZS5vbGRGaWxlTmFtZTtcbiAgICAgIHJldC5uZXdGaWxlTmFtZSA9IHRoZWlycy5uZXdGaWxlTmFtZSB8fCBtaW5lLm5ld0ZpbGVOYW1lO1xuICAgICAgcmV0Lm9sZEhlYWRlciA9IHRoZWlycy5vbGRIZWFkZXIgfHwgbWluZS5vbGRIZWFkZXI7XG4gICAgICByZXQubmV3SGVhZGVyID0gdGhlaXJzLm5ld0hlYWRlciB8fCBtaW5lLm5ld0hlYWRlcjtcbiAgICB9IGVsc2UgaWYgKCFmaWxlTmFtZUNoYW5nZWQodGhlaXJzKSkge1xuICAgICAgLy8gTm8gaGVhZGVyIG9yIG5vIGNoYW5nZSBpbiB0aGVpcnMsIHVzZSBvdXJzXG4gICAgICByZXQub2xkRmlsZU5hbWUgPSBtaW5lLm9sZEZpbGVOYW1lO1xuICAgICAgcmV0Lm5ld0ZpbGVOYW1lID0gbWluZS5uZXdGaWxlTmFtZTtcbiAgICAgIHJldC5vbGRIZWFkZXIgPSBtaW5lLm9sZEhlYWRlcjtcbiAgICAgIHJldC5uZXdIZWFkZXIgPSBtaW5lLm5ld0hlYWRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQm90aCBjaGFuZ2VkLi4uIGZpZ3VyZSBpdCBvdXRcbiAgICAgIHJldC5vbGRGaWxlTmFtZSA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5vbGRGaWxlTmFtZSwgdGhlaXJzLm9sZEZpbGVOYW1lKTtcbiAgICAgIHJldC5uZXdGaWxlTmFtZSA9IHNlbGVjdEZpZWxkKHJldCwgbWluZS5uZXdGaWxlTmFtZSwgdGhlaXJzLm5ld0ZpbGVOYW1lKTtcbiAgICAgIHJldC5vbGRIZWFkZXIgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUub2xkSGVhZGVyLCB0aGVpcnMub2xkSGVhZGVyKTtcbiAgICAgIHJldC5uZXdIZWFkZXIgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUubmV3SGVhZGVyLCB0aGVpcnMubmV3SGVhZGVyKTtcbiAgICB9XG4gIH1cblxuICByZXQuaHVua3MgPSBbXTtcbiAgdmFyIG1pbmVJbmRleCA9IDAsXG4gICAgICB0aGVpcnNJbmRleCA9IDAsXG4gICAgICBtaW5lT2Zmc2V0ID0gMCxcbiAgICAgIHRoZWlyc09mZnNldCA9IDA7XG5cbiAgd2hpbGUgKG1pbmVJbmRleCA8IG1pbmUuaHVua3MubGVuZ3RoIHx8IHRoZWlyc0luZGV4IDwgdGhlaXJzLmh1bmtzLmxlbmd0aCkge1xuICAgIHZhciBtaW5lQ3VycmVudCA9IG1pbmUuaHVua3NbbWluZUluZGV4XSB8fCB7XG4gICAgICBvbGRTdGFydDogSW5maW5pdHlcbiAgICB9LFxuICAgICAgICB0aGVpcnNDdXJyZW50ID0gdGhlaXJzLmh1bmtzW3RoZWlyc0luZGV4XSB8fCB7XG4gICAgICBvbGRTdGFydDogSW5maW5pdHlcbiAgICB9O1xuXG4gICAgaWYgKGh1bmtCZWZvcmUobWluZUN1cnJlbnQsIHRoZWlyc0N1cnJlbnQpKSB7XG4gICAgICAvLyBUaGlzIHBhdGNoIGRvZXMgbm90IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIG90aGVycywgeWF5LlxuICAgICAgcmV0Lmh1bmtzLnB1c2goY2xvbmVIdW5rKG1pbmVDdXJyZW50LCBtaW5lT2Zmc2V0KSk7XG4gICAgICBtaW5lSW5kZXgrKztcbiAgICAgIHRoZWlyc09mZnNldCArPSBtaW5lQ3VycmVudC5uZXdMaW5lcyAtIG1pbmVDdXJyZW50Lm9sZExpbmVzO1xuICAgIH0gZWxzZSBpZiAoaHVua0JlZm9yZSh0aGVpcnNDdXJyZW50LCBtaW5lQ3VycmVudCkpIHtcbiAgICAgIC8vIFRoaXMgcGF0Y2ggZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIGFueSBvZiB0aGUgb3RoZXJzLCB5YXkuXG4gICAgICByZXQuaHVua3MucHVzaChjbG9uZUh1bmsodGhlaXJzQ3VycmVudCwgdGhlaXJzT2Zmc2V0KSk7XG4gICAgICB0aGVpcnNJbmRleCsrO1xuICAgICAgbWluZU9mZnNldCArPSB0aGVpcnNDdXJyZW50Lm5ld0xpbmVzIC0gdGhlaXJzQ3VycmVudC5vbGRMaW5lcztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3ZlcmxhcCwgbWVyZ2UgYXMgYmVzdCB3ZSBjYW5cbiAgICAgIHZhciBtZXJnZWRIdW5rID0ge1xuICAgICAgICBvbGRTdGFydDogTWF0aC5taW4obWluZUN1cnJlbnQub2xkU3RhcnQsIHRoZWlyc0N1cnJlbnQub2xkU3RhcnQpLFxuICAgICAgICBvbGRMaW5lczogMCxcbiAgICAgICAgbmV3U3RhcnQ6IE1hdGgubWluKG1pbmVDdXJyZW50Lm5ld1N0YXJ0ICsgbWluZU9mZnNldCwgdGhlaXJzQ3VycmVudC5vbGRTdGFydCArIHRoZWlyc09mZnNldCksXG4gICAgICAgIG5ld0xpbmVzOiAwLFxuICAgICAgICBsaW5lczogW11cbiAgICAgIH07XG4gICAgICBtZXJnZUxpbmVzKG1lcmdlZEh1bmssIG1pbmVDdXJyZW50Lm9sZFN0YXJ0LCBtaW5lQ3VycmVudC5saW5lcywgdGhlaXJzQ3VycmVudC5vbGRTdGFydCwgdGhlaXJzQ3VycmVudC5saW5lcyk7XG4gICAgICB0aGVpcnNJbmRleCsrO1xuICAgICAgbWluZUluZGV4Kys7XG4gICAgICByZXQuaHVua3MucHVzaChtZXJnZWRIdW5rKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBsb2FkUGF0Y2gocGFyYW0sIGJhc2UpIHtcbiAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoL15AQC9tLnRlc3QocGFyYW0pIHx8IC9eSW5kZXg6L20udGVzdChwYXJhbSkpIHtcbiAgICAgIHJldHVybiBwYXJzZVBhdGNoKHBhcmFtKVswXTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIGEgYmFzZSByZWZlcmVuY2Ugb3IgcGFzcyBpbiBhIHBhdGNoJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cnVjdHVyZWRQYXRjaCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmFzZSwgcGFyYW0pO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtO1xufVxuXG5mdW5jdGlvbiBmaWxlTmFtZUNoYW5nZWQocGF0Y2gpIHtcbiAgcmV0dXJuIHBhdGNoLm5ld0ZpbGVOYW1lICYmIHBhdGNoLm5ld0ZpbGVOYW1lICE9PSBwYXRjaC5vbGRGaWxlTmFtZTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0RmllbGQoaW5kZXgsIG1pbmUsIHRoZWlycykge1xuICBpZiAobWluZSA9PT0gdGhlaXJzKSB7XG4gICAgcmV0dXJuIG1pbmU7XG4gIH0gZWxzZSB7XG4gICAgaW5kZXguY29uZmxpY3QgPSB0cnVlO1xuICAgIHJldHVybiB7XG4gICAgICBtaW5lOiBtaW5lLFxuICAgICAgdGhlaXJzOiB0aGVpcnNcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGh1bmtCZWZvcmUodGVzdCwgY2hlY2spIHtcbiAgcmV0dXJuIHRlc3Qub2xkU3RhcnQgPCBjaGVjay5vbGRTdGFydCAmJiB0ZXN0Lm9sZFN0YXJ0ICsgdGVzdC5vbGRMaW5lcyA8IGNoZWNrLm9sZFN0YXJ0O1xufVxuXG5mdW5jdGlvbiBjbG9uZUh1bmsoaHVuaywgb2Zmc2V0KSB7XG4gIHJldHVybiB7XG4gICAgb2xkU3RhcnQ6IGh1bmsub2xkU3RhcnQsXG4gICAgb2xkTGluZXM6IGh1bmsub2xkTGluZXMsXG4gICAgbmV3U3RhcnQ6IGh1bmsubmV3U3RhcnQgKyBvZmZzZXQsXG4gICAgbmV3TGluZXM6IGh1bmsubmV3TGluZXMsXG4gICAgbGluZXM6IGh1bmsubGluZXNcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VMaW5lcyhodW5rLCBtaW5lT2Zmc2V0LCBtaW5lTGluZXMsIHRoZWlyT2Zmc2V0LCB0aGVpckxpbmVzKSB7XG4gIC8vIFRoaXMgd2lsbCBnZW5lcmFsbHkgcmVzdWx0IGluIGEgY29uZmxpY3RlZCBodW5rLCBidXQgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBjb250ZXh0XG4gIC8vIGlzIHRoZSBvbmx5IG92ZXJsYXAgd2hlcmUgd2UgY2FuIHN1Y2Nlc3NmdWxseSBtZXJnZSB0aGUgY29udGVudCBoZXJlLlxuICB2YXIgbWluZSA9IHtcbiAgICBvZmZzZXQ6IG1pbmVPZmZzZXQsXG4gICAgbGluZXM6IG1pbmVMaW5lcyxcbiAgICBpbmRleDogMFxuICB9LFxuICAgICAgdGhlaXIgPSB7XG4gICAgb2Zmc2V0OiB0aGVpck9mZnNldCxcbiAgICBsaW5lczogdGhlaXJMaW5lcyxcbiAgICBpbmRleDogMFxuICB9OyAvLyBIYW5kbGUgYW55IGxlYWRpbmcgY29udGVudFxuXG4gIGluc2VydExlYWRpbmcoaHVuaywgbWluZSwgdGhlaXIpO1xuICBpbnNlcnRMZWFkaW5nKGh1bmssIHRoZWlyLCBtaW5lKTsgLy8gTm93IGluIHRoZSBvdmVybGFwIGNvbnRlbnQuIFNjYW4gdGhyb3VnaCBhbmQgc2VsZWN0IHRoZSBiZXN0IGNoYW5nZXMgZnJvbSBlYWNoLlxuXG4gIHdoaWxlIChtaW5lLmluZGV4IDwgbWluZS5saW5lcy5sZW5ndGggJiYgdGhlaXIuaW5kZXggPCB0aGVpci5saW5lcy5sZW5ndGgpIHtcbiAgICB2YXIgbWluZUN1cnJlbnQgPSBtaW5lLmxpbmVzW21pbmUuaW5kZXhdLFxuICAgICAgICB0aGVpckN1cnJlbnQgPSB0aGVpci5saW5lc1t0aGVpci5pbmRleF07XG5cbiAgICBpZiAoKG1pbmVDdXJyZW50WzBdID09PSAnLScgfHwgbWluZUN1cnJlbnRbMF0gPT09ICcrJykgJiYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nIHx8IHRoZWlyQ3VycmVudFswXSA9PT0gJysnKSkge1xuICAgICAgLy8gQm90aCBtb2RpZmllZCAuLi5cbiAgICAgIG11dHVhbENoYW5nZShodW5rLCBtaW5lLCB0aGVpcik7XG4gICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJysnICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICB2YXIgX2h1bmskbGluZXM7XG5cbiAgICAgIC8vIE1pbmUgaW5zZXJ0ZWRcbiAgICAgIChfaHVuayRsaW5lcyA9IGh1bmsubGluZXMpLnB1c2guYXBwbHkoX2h1bmskbGluZXMsIF90b0NvbnN1bWFibGVBcnJheShjb2xsZWN0Q2hhbmdlKG1pbmUpKSk7XG4gICAgfSBlbHNlIGlmICh0aGVpckN1cnJlbnRbMF0gPT09ICcrJyAmJiBtaW5lQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICB2YXIgX2h1bmskbGluZXMyO1xuXG4gICAgICAvLyBUaGVpcnMgaW5zZXJ0ZWRcbiAgICAgIChfaHVuayRsaW5lczIgPSBodW5rLmxpbmVzKS5wdXNoLmFwcGx5KF9odW5rJGxpbmVzMiwgX3RvQ29uc3VtYWJsZUFycmF5KGNvbGxlY3RDaGFuZ2UodGhlaXIpKSk7XG4gICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJy0nICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICAvLyBNaW5lIHJlbW92ZWQgb3IgZWRpdGVkXG4gICAgICByZW1vdmFsKGh1bmssIG1pbmUsIHRoZWlyKTtcbiAgICB9IGVsc2UgaWYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nICYmIG1pbmVDdXJyZW50WzBdID09PSAnICcpIHtcbiAgICAgIC8vIFRoZWlyIHJlbW92ZWQgb3IgZWRpdGVkXG4gICAgICByZW1vdmFsKGh1bmssIHRoZWlyLCBtaW5lLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50ID09PSB0aGVpckN1cnJlbnQpIHtcbiAgICAgIC8vIENvbnRleHQgaWRlbnRpdHlcbiAgICAgIGh1bmsubGluZXMucHVzaChtaW5lQ3VycmVudCk7XG4gICAgICBtaW5lLmluZGV4Kys7XG4gICAgICB0aGVpci5pbmRleCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb250ZXh0IG1pc21hdGNoXG4gICAgICBjb25mbGljdChodW5rLCBjb2xsZWN0Q2hhbmdlKG1pbmUpLCBjb2xsZWN0Q2hhbmdlKHRoZWlyKSk7XG4gICAgfVxuICB9IC8vIE5vdyBwdXNoIGFueXRoaW5nIHRoYXQgbWF5IGJlIHJlbWFpbmluZ1xuXG5cbiAgaW5zZXJ0VHJhaWxpbmcoaHVuaywgbWluZSk7XG4gIGluc2VydFRyYWlsaW5nKGh1bmssIHRoZWlyKTtcbiAgY2FsY0xpbmVDb3VudChodW5rKTtcbn1cblxuZnVuY3Rpb24gbXV0dWFsQ2hhbmdlKGh1bmssIG1pbmUsIHRoZWlyKSB7XG4gIHZhciBteUNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKG1pbmUpLFxuICAgICAgdGhlaXJDaGFuZ2VzID0gY29sbGVjdENoYW5nZSh0aGVpcik7XG5cbiAgaWYgKGFsbFJlbW92ZXMobXlDaGFuZ2VzKSAmJiBhbGxSZW1vdmVzKHRoZWlyQ2hhbmdlcykpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHJlbW92ZSBjaGFuZ2VzIHRoYXQgYXJlIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlclxuICAgIGlmIChhcnJheVN0YXJ0c1dpdGgobXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpICYmIHNraXBSZW1vdmVTdXBlcnNldCh0aGVpciwgbXlDaGFuZ2VzLCBteUNoYW5nZXMubGVuZ3RoIC0gdGhlaXJDaGFuZ2VzLmxlbmd0aCkpIHtcbiAgICAgIHZhciBfaHVuayRsaW5lczM7XG5cbiAgICAgIChfaHVuayRsaW5lczMgPSBodW5rLmxpbmVzKS5wdXNoLmFwcGx5KF9odW5rJGxpbmVzMywgX3RvQ29uc3VtYWJsZUFycmF5KG15Q2hhbmdlcykpO1xuXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChhcnJheVN0YXJ0c1dpdGgodGhlaXJDaGFuZ2VzLCBteUNoYW5nZXMpICYmIHNraXBSZW1vdmVTdXBlcnNldChtaW5lLCB0aGVpckNoYW5nZXMsIHRoZWlyQ2hhbmdlcy5sZW5ndGggLSBteUNoYW5nZXMubGVuZ3RoKSkge1xuICAgICAgdmFyIF9odW5rJGxpbmVzNDtcblxuICAgICAgKF9odW5rJGxpbmVzNCA9IGh1bmsubGluZXMpLnB1c2guYXBwbHkoX2h1bmskbGluZXM0LCBfdG9Db25zdW1hYmxlQXJyYXkodGhlaXJDaGFuZ2VzKSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXJyYXlFcXVhbChteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcykpIHtcbiAgICB2YXIgX2h1bmskbGluZXM1O1xuXG4gICAgKF9odW5rJGxpbmVzNSA9IGh1bmsubGluZXMpLnB1c2guYXBwbHkoX2h1bmskbGluZXM1LCBfdG9Db25zdW1hYmxlQXJyYXkobXlDaGFuZ2VzKSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25mbGljdChodW5rLCBteUNoYW5nZXMsIHRoZWlyQ2hhbmdlcyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92YWwoaHVuaywgbWluZSwgdGhlaXIsIHN3YXApIHtcbiAgdmFyIG15Q2hhbmdlcyA9IGNvbGxlY3RDaGFuZ2UobWluZSksXG4gICAgICB0aGVpckNoYW5nZXMgPSBjb2xsZWN0Q29udGV4dCh0aGVpciwgbXlDaGFuZ2VzKTtcblxuICBpZiAodGhlaXJDaGFuZ2VzLm1lcmdlZCkge1xuICAgIHZhciBfaHVuayRsaW5lczY7XG5cbiAgICAoX2h1bmskbGluZXM2ID0gaHVuay5saW5lcykucHVzaC5hcHBseShfaHVuayRsaW5lczYsIF90b0NvbnN1bWFibGVBcnJheSh0aGVpckNoYW5nZXMubWVyZ2VkKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmxpY3QoaHVuaywgc3dhcCA/IHRoZWlyQ2hhbmdlcyA6IG15Q2hhbmdlcywgc3dhcCA/IG15Q2hhbmdlcyA6IHRoZWlyQ2hhbmdlcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29uZmxpY3QoaHVuaywgbWluZSwgdGhlaXIpIHtcbiAgaHVuay5jb25mbGljdCA9IHRydWU7XG4gIGh1bmsubGluZXMucHVzaCh7XG4gICAgY29uZmxpY3Q6IHRydWUsXG4gICAgbWluZTogbWluZSxcbiAgICB0aGVpcnM6IHRoZWlyXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRMZWFkaW5nKGh1bmssIGluc2VydCwgdGhlaXIpIHtcbiAgd2hpbGUgKGluc2VydC5vZmZzZXQgPCB0aGVpci5vZmZzZXQgJiYgaW5zZXJ0LmluZGV4IDwgaW5zZXJ0LmxpbmVzLmxlbmd0aCkge1xuICAgIHZhciBsaW5lID0gaW5zZXJ0LmxpbmVzW2luc2VydC5pbmRleCsrXTtcbiAgICBodW5rLmxpbmVzLnB1c2gobGluZSk7XG4gICAgaW5zZXJ0Lm9mZnNldCsrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydFRyYWlsaW5nKGh1bmssIGluc2VydCkge1xuICB3aGlsZSAoaW5zZXJ0LmluZGV4IDwgaW5zZXJ0LmxpbmVzLmxlbmd0aCkge1xuICAgIHZhciBsaW5lID0gaW5zZXJ0LmxpbmVzW2luc2VydC5pbmRleCsrXTtcbiAgICBodW5rLmxpbmVzLnB1c2gobGluZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdENoYW5nZShzdGF0ZSkge1xuICB2YXIgcmV0ID0gW10sXG4gICAgICBvcGVyYXRpb24gPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF1bMF07XG5cbiAgd2hpbGUgKHN0YXRlLmluZGV4IDwgc3RhdGUubGluZXMubGVuZ3RoKSB7XG4gICAgdmFyIGxpbmUgPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF07IC8vIEdyb3VwIGFkZGl0aW9ucyB0aGF0IGFyZSBpbW1lZGlhdGVseSBhZnRlciBzdWJ0cmFjdGlvbnMgYW5kIHRyZWF0IHRoZW0gYXMgb25lIFwiYXRvbWljXCIgbW9kaWZ5IGNoYW5nZS5cblxuICAgIGlmIChvcGVyYXRpb24gPT09ICctJyAmJiBsaW5lWzBdID09PSAnKycpIHtcbiAgICAgIG9wZXJhdGlvbiA9ICcrJztcbiAgICB9XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSBsaW5lWzBdKSB7XG4gICAgICByZXQucHVzaChsaW5lKTtcbiAgICAgIHN0YXRlLmluZGV4Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RDb250ZXh0KHN0YXRlLCBtYXRjaENoYW5nZXMpIHtcbiAgdmFyIGNoYW5nZXMgPSBbXSxcbiAgICAgIG1lcmdlZCA9IFtdLFxuICAgICAgbWF0Y2hJbmRleCA9IDAsXG4gICAgICBjb250ZXh0Q2hhbmdlcyA9IGZhbHNlLFxuICAgICAgY29uZmxpY3RlZCA9IGZhbHNlO1xuXG4gIHdoaWxlIChtYXRjaEluZGV4IDwgbWF0Y2hDaGFuZ2VzLmxlbmd0aCAmJiBzdGF0ZS5pbmRleCA8IHN0YXRlLmxpbmVzLmxlbmd0aCkge1xuICAgIHZhciBjaGFuZ2UgPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF0sXG4gICAgICAgIG1hdGNoID0gbWF0Y2hDaGFuZ2VzW21hdGNoSW5kZXhdOyAvLyBPbmNlIHdlJ3ZlIGhpdCBvdXIgYWRkLCB0aGVuIHdlIGFyZSBkb25lXG5cbiAgICBpZiAobWF0Y2hbMF0gPT09ICcrJykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29udGV4dENoYW5nZXMgPSBjb250ZXh0Q2hhbmdlcyB8fCBjaGFuZ2VbMF0gIT09ICcgJztcbiAgICBtZXJnZWQucHVzaChtYXRjaCk7XG4gICAgbWF0Y2hJbmRleCsrOyAvLyBDb25zdW1lIGFueSBhZGRpdGlvbnMgaW4gdGhlIG90aGVyIGJsb2NrIGFzIGEgY29uZmxpY3QgdG8gYXR0ZW1wdFxuICAgIC8vIHRvIHB1bGwgaW4gdGhlIHJlbWFpbmluZyBjb250ZXh0IGFmdGVyIHRoaXNcblxuICAgIGlmIChjaGFuZ2VbMF0gPT09ICcrJykge1xuICAgICAgY29uZmxpY3RlZCA9IHRydWU7XG5cbiAgICAgIHdoaWxlIChjaGFuZ2VbMF0gPT09ICcrJykge1xuICAgICAgICBjaGFuZ2VzLnB1c2goY2hhbmdlKTtcbiAgICAgICAgY2hhbmdlID0gc3RhdGUubGluZXNbKytzdGF0ZS5pbmRleF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoLnN1YnN0cigxKSA9PT0gY2hhbmdlLnN1YnN0cigxKSkge1xuICAgICAgY2hhbmdlcy5wdXNoKGNoYW5nZSk7XG4gICAgICBzdGF0ZS5pbmRleCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25mbGljdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoKG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4XSB8fCAnJylbMF0gPT09ICcrJyAmJiBjb250ZXh0Q2hhbmdlcykge1xuICAgIGNvbmZsaWN0ZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGNvbmZsaWN0ZWQpIHtcbiAgICByZXR1cm4gY2hhbmdlcztcbiAgfVxuXG4gIHdoaWxlIChtYXRjaEluZGV4IDwgbWF0Y2hDaGFuZ2VzLmxlbmd0aCkge1xuICAgIG1lcmdlZC5wdXNoKG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4KytdKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWVyZ2VkOiBtZXJnZWQsXG4gICAgY2hhbmdlczogY2hhbmdlc1xuICB9O1xufVxuXG5mdW5jdGlvbiBhbGxSZW1vdmVzKGNoYW5nZXMpIHtcbiAgcmV0dXJuIGNoYW5nZXMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjaGFuZ2UpIHtcbiAgICByZXR1cm4gcHJldiAmJiBjaGFuZ2VbMF0gPT09ICctJztcbiAgfSwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHNraXBSZW1vdmVTdXBlcnNldChzdGF0ZSwgcmVtb3ZlQ2hhbmdlcywgZGVsdGEpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWx0YTsgaSsrKSB7XG4gICAgdmFyIGNoYW5nZUNvbnRlbnQgPSByZW1vdmVDaGFuZ2VzW3JlbW92ZUNoYW5nZXMubGVuZ3RoIC0gZGVsdGEgKyBpXS5zdWJzdHIoMSk7XG5cbiAgICBpZiAoc3RhdGUubGluZXNbc3RhdGUuaW5kZXggKyBpXSAhPT0gJyAnICsgY2hhbmdlQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlLmluZGV4ICs9IGRlbHRhO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2FsY09sZE5ld0xpbmVDb3VudChsaW5lcykge1xuICB2YXIgb2xkTGluZXMgPSAwO1xuICB2YXIgbmV3TGluZXMgPSAwO1xuICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgaWYgKHR5cGVvZiBsaW5lICE9PSAnc3RyaW5nJykge1xuICAgICAgdmFyIG15Q291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmUubWluZSk7XG4gICAgICB2YXIgdGhlaXJDb3VudCA9IGNhbGNPbGROZXdMaW5lQ291bnQobGluZS50aGVpcnMpO1xuXG4gICAgICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobXlDb3VudC5vbGRMaW5lcyA9PT0gdGhlaXJDb3VudC5vbGRMaW5lcykge1xuICAgICAgICAgIG9sZExpbmVzICs9IG15Q291bnQub2xkTGluZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2xkTGluZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5ld0xpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG15Q291bnQubmV3TGluZXMgPT09IHRoZWlyQ291bnQubmV3TGluZXMpIHtcbiAgICAgICAgICBuZXdMaW5lcyArPSBteUNvdW50Lm5ld0xpbmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xpbmVzID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkICYmIChsaW5lWzBdID09PSAnKycgfHwgbGluZVswXSA9PT0gJyAnKSkge1xuICAgICAgICBuZXdMaW5lcysrO1xuICAgICAgfVxuXG4gICAgICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCAmJiAobGluZVswXSA9PT0gJy0nIHx8IGxpbmVbMF0gPT09ICcgJykpIHtcbiAgICAgICAgb2xkTGluZXMrKztcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIG9sZExpbmVzOiBvbGRMaW5lcyxcbiAgICBuZXdMaW5lczogbmV3TGluZXNcbiAgfTtcbn1cblxuLy8gU2VlOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLWRpZmYtbWF0Y2gtcGF0Y2gvd2lraS9BUElcbmZ1bmN0aW9uIGNvbnZlcnRDaGFuZ2VzVG9ETVAoY2hhbmdlcykge1xuICB2YXIgcmV0ID0gW10sXG4gICAgICBjaGFuZ2UsXG4gICAgICBvcGVyYXRpb247XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhbmdlID0gY2hhbmdlc1tpXTtcblxuICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcbiAgICAgIG9wZXJhdGlvbiA9IDE7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuICAgICAgb3BlcmF0aW9uID0gLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wZXJhdGlvbiA9IDA7XG4gICAgfVxuXG4gICAgcmV0LnB1c2goW29wZXJhdGlvbiwgY2hhbmdlLnZhbHVlXSk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0Q2hhbmdlc1RvWE1MKGNoYW5nZXMpIHtcbiAgdmFyIHJldCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuXG4gICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuICAgICAgcmV0LnB1c2goJzxpbnM+Jyk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2UucmVtb3ZlZCkge1xuICAgICAgcmV0LnB1c2goJzxkZWw+Jyk7XG4gICAgfVxuXG4gICAgcmV0LnB1c2goZXNjYXBlSFRNTChjaGFuZ2UudmFsdWUpKTtcblxuICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcbiAgICAgIHJldC5wdXNoKCc8L2lucz4nKTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG4gICAgICByZXQucHVzaCgnPC9kZWw+Jyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldC5qb2luKCcnKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlSFRNTChzKSB7XG4gIHZhciBuID0gcztcbiAgbiA9IG4ucmVwbGFjZSgvJi9nLCAnJmFtcDsnKTtcbiAgbiA9IG4ucmVwbGFjZSgvPC9nLCAnJmx0OycpO1xuICBuID0gbi5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG4gIG4gPSBuLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKTtcbiAgcmV0dXJuIG47XG59XG5cbmV4cG9ydCB7IERpZmYsIGFwcGx5UGF0Y2gsIGFwcGx5UGF0Y2hlcywgY2Fub25pY2FsaXplLCBjb252ZXJ0Q2hhbmdlc1RvRE1QLCBjb252ZXJ0Q2hhbmdlc1RvWE1MLCBjcmVhdGVQYXRjaCwgY3JlYXRlVHdvRmlsZXNQYXRjaCwgZGlmZkFycmF5cywgZGlmZkNoYXJzLCBkaWZmQ3NzLCBkaWZmSnNvbiwgZGlmZkxpbmVzLCBkaWZmU2VudGVuY2VzLCBkaWZmVHJpbW1lZExpbmVzLCBkaWZmV29yZHMsIGRpZmZXb3Jkc1dpdGhTcGFjZSwgbWVyZ2UsIHBhcnNlUGF0Y2gsIHN0cnVjdHVyZWRQYXRjaCB9O1xuIl0sIm5hbWVzIjpbIkRpZmYiLCJwcm90b3R5cGUiLCJkaWZmIiwib2xkU3RyaW5nIiwibmV3U3RyaW5nIiwib3B0aW9ucyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImNhbGxiYWNrIiwic2VsZiIsImRvbmUiLCJ2YWx1ZSIsInNldFRpbWVvdXQiLCJjYXN0SW5wdXQiLCJyZW1vdmVFbXB0eSIsInRva2VuaXplIiwibmV3TGVuIiwib2xkTGVuIiwiZWRpdExlbmd0aCIsIm1heEVkaXRMZW5ndGgiLCJNYXRoIiwibWluIiwiYmVzdFBhdGgiLCJuZXdQb3MiLCJjb21wb25lbnRzIiwib2xkUG9zIiwiZXh0cmFjdENvbW1vbiIsImpvaW4iLCJjb3VudCIsImV4ZWNFZGl0TGVuZ3RoIiwiZGlhZ29uYWxQYXRoIiwiYmFzZVBhdGgiLCJhZGRQYXRoIiwicmVtb3ZlUGF0aCIsIl9vbGRQb3MiLCJjYW5BZGQiLCJjYW5SZW1vdmUiLCJjbG9uZVBhdGgiLCJwdXNoQ29tcG9uZW50IiwiYnVpbGRWYWx1ZXMiLCJ1c2VMb25nZXN0VG9rZW4iLCJleGVjIiwicmV0IiwiYWRkZWQiLCJyZW1vdmVkIiwibGFzdCIsInB1c2giLCJjb21tb25Db3VudCIsImVxdWFscyIsImxlZnQiLCJyaWdodCIsImNvbXBhcmF0b3IiLCJpZ25vcmVDYXNlIiwidG9Mb3dlckNhc2UiLCJhcnJheSIsImkiLCJzcGxpdCIsImNoYXJzIiwiY29tcG9uZW50UG9zIiwiY29tcG9uZW50TGVuIiwiY29tcG9uZW50Iiwic2xpY2UiLCJtYXAiLCJvbGRWYWx1ZSIsInRtcCIsImxhc3RDb21wb25lbnQiLCJwb3AiLCJwYXRoIiwiY2hhcmFjdGVyRGlmZiIsImRpZmZDaGFycyIsIm9sZFN0ciIsIm5ld1N0ciIsImdlbmVyYXRlT3B0aW9ucyIsImRlZmF1bHRzIiwibmFtZSIsImhhc093blByb3BlcnR5IiwiZXh0ZW5kZWRXb3JkQ2hhcnMiLCJyZVdoaXRlc3BhY2UiLCJ3b3JkRGlmZiIsImlnbm9yZVdoaXRlc3BhY2UiLCJ0ZXN0IiwidG9rZW5zIiwic3BsaWNlIiwiZGlmZldvcmRzIiwiZGlmZldvcmRzV2l0aFNwYWNlIiwibGluZURpZmYiLCJyZXRMaW5lcyIsImxpbmVzQW5kTmV3bGluZXMiLCJsaW5lIiwibmV3bGluZUlzVG9rZW4iLCJ0cmltIiwiZGlmZkxpbmVzIiwiZGlmZlRyaW1tZWRMaW5lcyIsInNlbnRlbmNlRGlmZiIsImRpZmZTZW50ZW5jZXMiLCJjc3NEaWZmIiwiZGlmZkNzcyIsIl90eXBlb2YiLCJvYmoiLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiYXJyIiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIkFycmF5IiwiaXNBcnJheSIsIl9hcnJheUxpa2VUb0FycmF5IiwiaXRlciIsIk9iamVjdCIsImZyb20iLCJvIiwibWluTGVuIiwibiIsInRvU3RyaW5nIiwiY2FsbCIsImxlbiIsImFycjIiLCJUeXBlRXJyb3IiLCJvYmplY3RQcm90b3R5cGVUb1N0cmluZyIsImpzb25EaWZmIiwiX3RoaXMkb3B0aW9ucyIsInVuZGVmaW5lZFJlcGxhY2VtZW50IiwiX3RoaXMkb3B0aW9ucyRzdHJpbmdpIiwic3RyaW5naWZ5UmVwbGFjZXIiLCJrIiwidiIsIkpTT04iLCJzdHJpbmdpZnkiLCJjYW5vbmljYWxpemUiLCJyZXBsYWNlIiwiZGlmZkpzb24iLCJvbGRPYmoiLCJuZXdPYmoiLCJzdGFjayIsInJlcGxhY2VtZW50U3RhY2siLCJyZXBsYWNlciIsImtleSIsImNhbm9uaWNhbGl6ZWRPYmoiLCJ0b0pTT04iLCJzb3J0ZWRLZXlzIiwiX2tleSIsInNvcnQiLCJhcnJheURpZmYiLCJkaWZmQXJyYXlzIiwib2xkQXJyIiwibmV3QXJyIiwicGFyc2VQYXRjaCIsInVuaURpZmYiLCJkaWZmc3RyIiwiZGVsaW1pdGVycyIsIm1hdGNoIiwibGlzdCIsInBhcnNlSW5kZXgiLCJpbmRleCIsImhlYWRlciIsInBhcnNlRmlsZUhlYWRlciIsImh1bmtzIiwiX2xpbmUiLCJwYXJzZUh1bmsiLCJzdHJpY3QiLCJFcnJvciIsImZpbGVIZWFkZXIiLCJrZXlQcmVmaXgiLCJkYXRhIiwiZmlsZU5hbWUiLCJzdWJzdHIiLCJjaHVua0hlYWRlckluZGV4IiwiY2h1bmtIZWFkZXJMaW5lIiwiY2h1bmtIZWFkZXIiLCJodW5rIiwib2xkU3RhcnQiLCJvbGRMaW5lcyIsIm5ld1N0YXJ0IiwibmV3TGluZXMiLCJsaW5lcyIsImxpbmVkZWxpbWl0ZXJzIiwiYWRkQ291bnQiLCJyZW1vdmVDb3VudCIsImluZGV4T2YiLCJvcGVyYXRpb24iLCJkaXN0YW5jZUl0ZXJhdG9yIiwic3RhcnQiLCJtaW5MaW5lIiwibWF4TGluZSIsIndhbnRGb3J3YXJkIiwiYmFja3dhcmRFeGhhdXN0ZWQiLCJmb3J3YXJkRXhoYXVzdGVkIiwibG9jYWxPZmZzZXQiLCJhcHBseVBhdGNoIiwic291cmNlIiwiY29tcGFyZUxpbmUiLCJsaW5lTnVtYmVyIiwicGF0Y2hDb250ZW50IiwiZXJyb3JDb3VudCIsImZ1enpGYWN0b3IiLCJvZmZzZXQiLCJyZW1vdmVFT0ZOTCIsImFkZEVPRk5MIiwiaHVua0ZpdHMiLCJ0b1BvcyIsImoiLCJjb250ZW50IiwiZGlmZk9mZnNldCIsIl9pIiwiX2h1bmsiLCJfdG9Qb3MiLCJkZWxpbWl0ZXIiLCJwcmV2aW91c09wZXJhdGlvbiIsIl9rIiwiYXBwbHlQYXRjaGVzIiwiY3VycmVudEluZGV4IiwicHJvY2Vzc0luZGV4IiwiY29tcGxldGUiLCJsb2FkRmlsZSIsImVyciIsInVwZGF0ZWRDb250ZW50IiwicGF0Y2hlZCIsInN0cnVjdHVyZWRQYXRjaCIsIm9sZEZpbGVOYW1lIiwibmV3RmlsZU5hbWUiLCJvbGRIZWFkZXIiLCJuZXdIZWFkZXIiLCJjb250ZXh0IiwiY29udGV4dExpbmVzIiwiZW50cnkiLCJvbGRSYW5nZVN0YXJ0IiwibmV3UmFuZ2VTdGFydCIsImN1clJhbmdlIiwib2xkTGluZSIsIm5ld0xpbmUiLCJfbG9vcCIsImN1cnJlbnQiLCJfY3VyUmFuZ2UiLCJwcmV2IiwiYXBwbHkiLCJfY3VyUmFuZ2UyIiwiX2N1clJhbmdlMyIsImNvbnRleHRTaXplIiwib2xkRU9GTmV3bGluZSIsIm5ld0VPRk5ld2xpbmUiLCJub05sQmVmb3JlQWRkcyIsImZvcm1hdFBhdGNoIiwiY3JlYXRlVHdvRmlsZXNQYXRjaCIsImNyZWF0ZVBhdGNoIiwiYXJyYXlFcXVhbCIsImEiLCJiIiwiYXJyYXlTdGFydHNXaXRoIiwiY2FsY0xpbmVDb3VudCIsIl9jYWxjT2xkTmV3TGluZUNvdW50IiwiY2FsY09sZE5ld0xpbmVDb3VudCIsIm1lcmdlIiwibWluZSIsInRoZWlycyIsImJhc2UiLCJsb2FkUGF0Y2giLCJmaWxlTmFtZUNoYW5nZWQiLCJzZWxlY3RGaWVsZCIsIm1pbmVJbmRleCIsInRoZWlyc0luZGV4IiwibWluZU9mZnNldCIsInRoZWlyc09mZnNldCIsIm1pbmVDdXJyZW50IiwiSW5maW5pdHkiLCJ0aGVpcnNDdXJyZW50IiwiaHVua0JlZm9yZSIsImNsb25lSHVuayIsIm1lcmdlZEh1bmsiLCJtZXJnZUxpbmVzIiwicGFyYW0iLCJwYXRjaCIsImNvbmZsaWN0IiwiY2hlY2siLCJtaW5lTGluZXMiLCJ0aGVpck9mZnNldCIsInRoZWlyTGluZXMiLCJ0aGVpciIsImluc2VydExlYWRpbmciLCJ0aGVpckN1cnJlbnQiLCJtdXR1YWxDaGFuZ2UiLCJfaHVuayRsaW5lcyIsImNvbGxlY3RDaGFuZ2UiLCJfaHVuayRsaW5lczIiLCJyZW1vdmFsIiwiaW5zZXJ0VHJhaWxpbmciLCJteUNoYW5nZXMiLCJ0aGVpckNoYW5nZXMiLCJhbGxSZW1vdmVzIiwic2tpcFJlbW92ZVN1cGVyc2V0IiwiX2h1bmskbGluZXMzIiwiX2h1bmskbGluZXM0IiwiX2h1bmskbGluZXM1Iiwic3dhcCIsImNvbGxlY3RDb250ZXh0IiwibWVyZ2VkIiwiX2h1bmskbGluZXM2IiwiaW5zZXJ0Iiwic3RhdGUiLCJtYXRjaENoYW5nZXMiLCJjaGFuZ2VzIiwibWF0Y2hJbmRleCIsImNvbnRleHRDaGFuZ2VzIiwiY29uZmxpY3RlZCIsImNoYW5nZSIsInJlZHVjZSIsInJlbW92ZUNoYW5nZXMiLCJkZWx0YSIsImNoYW5nZUNvbnRlbnQiLCJmb3JFYWNoIiwibXlDb3VudCIsInRoZWlyQ291bnQiLCJjb252ZXJ0Q2hhbmdlc1RvRE1QIiwiY29udmVydENoYW5nZXNUb1hNTCIsImVzY2FwZUhUTUwiLCJzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/uvu/node_modules/diff/lib/index.mjs\n"); /***/ }) }; ;